Lessons from Software Engineering at Google: Part 2 - Iterating on Software

I help product teams build quality software and lead engineering efforts. Currently working at OpenSpace as a Senior Software Engineer.
Search for a command to run...

I help product teams build quality software and lead engineering efforts. Currently working at OpenSpace as a Senior Software Engineer.
No comments yet. Be the first to comment.
We will go over the book Software Engineering at Google, covering the importance of communication, iteration and continuous learning, well-thought-out documentation, robust testing, and many more. ๐
This is the third article in a series where we cover the book Software Engineering at Google by Titus Winters, Tom Manshreck, and Hyrum Wright. ๐ We will go over various aspects of software engineering as a process, including the importance of commu...
Last month I built a regression-testing harness for a single library upgrade โ React Query v4 โ v5 in one of the front-end apps I'm working on. It's about 800 lines of code across four packages. It ru

Images are heavy. When you're building offline support, storing them alongside your application data is tempting โ and eventually painful. I hit this wall building support for image attachments. The n

Deciding how to approach offline support can be challenging, especially once you move beyond the basics. So far, I focused on persisting data that was already fetched as a result of user actions. This

Software engineering is changing faster than most of us can comfortably adapt to. The capabilities of LLM models change almost monthly. New tools appear every week. Advice that felt solid three months

This is the eighth post in my series about offline support in web applications and the fifth focused on the foreground queue. In the previous article, we covered error handling and retry strategies. A

This is the second article in a series where we cover the book Software Engineering at Google by Titus Winters, Tom Manshreck, and Hyrum Wright. ๐ We will go over various aspects of software engineering as a process, including the importance of communication, iteration and continuous learning, well-thought-out documentation, robust testing, and many more.
In this article, we cover one of the key elements that take the act of programming into the domain of software engineering - iteration.
As we said in the first part, software engineering is programming over time. What essentially makes up software engineering is the act of programming repeated over and over again, making the piece of software evolve and change, either on the functionality or the implementation level. We have a fancy name for that. It is iteration. โป๏ธ
For inherently data-driven engineers, we often want data to be the only deciding factor to perform another iteration. That means data collected straight from the product (for example through analytics or logs), from user feedback, or perhaps market research. The book points out, however, that this is indeed a good start but in reality, most decisions are based on a mix of data, assumption, precedent, and argument. It's best when objective data makes up the majority of those inputs but it can rarely be all of them.
Being data-driven over time implies also the need to change directions when the data changes (or when the assumptions are dispelled). Mistakes or revisited plans are inevitable. Treat them just as a part of the journey. ๐ค๏ธ
...starting antoher iteration. The faster you can get the results of the iteration in front of the prospective users and collect relevant feedback, the better. It means you can correct the course, avoiding problems and wrong assumptions. That's valuable across many levels - from a single increment of code that you put up for review, through features you're team is working on, all the way to entire products or suites of products.
If you spend all of your time working alone on a feature you are increasing the risk of unnecessary failure. Even though software development is deeply intellectual work that can require deep concentration and a long time you must play that off against the value of collaboration and review.
If you keep your great idea hidden from the world and refuse to show it to anyone until the implementation is polished you're taking a huge gamble. It's easy to make fundamental design mistakes early on. You risk inventing wheels. Having the feedback loop shortened is almost always beneficial. ๐
That's it! We now have a solid understanding of what iteration is and why are we doing it in the first place. Here's a short summary of things we went through:
iteration in the context of software engineering
drivers of iteration in software projects
the importance of making iterations as short as possible
Next up, we will briefly touch on communication, which is often a bottleneck for a lot of engineering teams. See you! ๐
If you liked the article or you have a question, feel free to reach out to me on Twitterโ or add a comment below!
The original Twitter thread with notes from the book
Link to purchasing the book
Photo by Jake Blucker on Unsplash