Why is it that so many people continue to believe that software developers can do the impossible? In life there is always a critical path to everything, a path that you just can’t skip ahead. Yes sometimes work can be divided and thereby accelerated such as painting a room. You can get one person to paint four walls or you can get four people to pain one wall each speeding up the by four times. But if you want to apply two separate coats of paint you absolutely can’t get eight people to paint at the same time both coats. It just doesn’t work. The first coat of paint needs to dry before the second coat of paint can be applied. That’s a critical path you just can’t skip, no matter how much you wish it away.
However in software development a lot of people tend to forget this notion. There is a tendency to think that if we add extra developers to any effort we can shorten it by the amount of people we add. The thinking is if we add 20% more developers the time to implement the project should therefore decrease by 20%. The reality is that it doesn’t work this way. It’s not like painting a room. You can’t just grab a brush and start painting. It’s not that simple. Even if you’re the best developer in the world someone from the project still has to show you how to setup your environment. You have to learn how the software is implemented. You have to “get up to speed” which can take some time. This can take anywhere from a few weeks to several months depending on the project because of the inherent complexity of software development.
In some cases adding extra resources can even slow down your effort. For every person you add someone from your existing team needs to “bring them up to speed”, which means their not producing during this time. The closer you are to the deadline the more likely you are to slow the effort by adding new people to the team because of this training cost. They just won’t be productive quick enough to be worth it. They’ll probably only really start to get “up to speed” after the deadline.
My favorite analogy by far is the title of this entry, you can’t put nine woman together and expect them make a baby in one month. The critical path is nine months, no matter what you do. Some work just can’t be divided. Ever try to learn a language by dividing it up with several people while simultaneously skipping ahead some steps? And that’s what you have to anticipate with any software project. There will always be several critical paths.
Not only that, but sometimes one developer can implement a solution an order of magnitude faster and especially better than another developer . This is true in almost any profession. Just look at professional sports athletes, there is an amazing difference in quality. Can anyone beat Michael Jordan at basketball? Anyone want to play hockey against Wayne Gretzky? Every profession has it’s stars and its obvious that there is a difference among them, even among the elite of the elite.
The same is true with software and developers. I’ve heard sayings that an elite software developer can easily be worth ten junior developers. I completely agree. One Michael Jordan is worth several average players. Sometimes it’s worth waiting for a more qualified, or even just a specialized developer, to implement a solution. They might be able to do it in a way that will simplify the life of every other developer on the team and thereby reduce the total cost of the project today and tomorow rather than add to everyone’s effort. We’ve all seen patch jobs that take much longer to do anything with because of a bad implementation. That are buggy and needs to be continually fixed. That are just a complete mess. This is often the result of trying to push the critical path, of trying to apply two coats of paint at the same time.
Not only will you be ahead if you understand the critical path, it will also reduce your total software development costs. It will give you higher quality code which will lead to less bugs, less fixes, less workarounds, less hacks. It will lead to a better solution. Happier customers. Better maintainability. It will make improving and adding new features easier in the future. It will lead to higher employee morale. A better team. Lower turnover within the company. It’s just worth it. If you don’t believe me, just look at the statistics from this article on what happens if you push the critical path too much. Critical paths exist for a reason and it’s absolutely worth your time to acknowledge them rather than trying to wish them away.