What do you think the one activity is that takes up the most of the time for software developers today?
In a draft of a new book, Amr Elssamadisy presents this hypothetical experiment that allows us to figure this out:
Suppose I was your client, and I asked you and your team to build a software system for me. Your team proceeds to build the software system. It takes you a full year, 12 months, to deliver working, tested software. I then thank the team and take the software and throw it out.
After that, I ask you and your team to rebuild the system. You have the same team, requirements, tools, and software. Basically, nothing has changed. It is the same environment. How long will it take you and your team to build the system this time?
Common answers to this question by developers, many of them with 20+ years of experience, is that it will take between 20% and 70% of the time. I.e. Instead of one year it would take 2,5 – 8,5 months. This is a huge difference!
So, what was the problem the first time, what has changed so much? The difference is that team has learned about the requirements, about each other, about the tools etc.
Thus, learning is the bottleneck of software development.
This insight can be used to better evaluate your work methods. Instead of asking: “Will pair programming slow us down”, a more relevant question is “Will pair programming speed up or slow down our learning?”. Another example: “Will we learn faster if we show the system to our customer every other week or if we show it once a month?”
Keep an eye on the bottleneck!