Before the ‘agile revolution’, the biggest bottleneck for organizations was building, deploying and maintaining reliable software (It still is for a lot of organizations). Then came the agile way of building teams and software. Suddenly, software was delivered faster, more reliably and more quickly. Practices like test driven development, continuous integration automated regression tests helped fix that bottleneck. The actual deployment and day to day operations were the next bottleneck. The devops movement and continuous delivery were the answer to that. Now we can reliably build, test, deploy and maintain software. Time to move on to the next bottleneck. For me it is the organization being bureaucratic and inflexible. It can manifest it many ways for a development team. A few examples are that I have observed are,
1. At one client whom I worked with, we requested for two extra developers at the beginning of a six month project. It took them four months to find the developers. Instead of increasing the team productivity, it actually brought the productivity down. For a team already constrained on capacity, we now had to get the new developers up to speed as well as build the application. By the time the developers were fully ramped up, the project was over (with the scope reduced).
2. At another client, we had a ‘technical architecture council’ and a ‘security council’. Each of them had their own opinion and they never agreed on a lot of things. More importantly, they took weeks and months to disagree. As a development team focussed on delivering business features, the biggest bottleneck for us was a consensus on the technical architecture. In the end when they did agree, we had to change a lot of stuff that we had already built. Of course, this had to happen before the first release, which means we didn’t go live for a long time.
3. Then there is the classic procurement bottleneck. In most traditional organizations, there is a decent lead time for any procurement, be it hardware or software. It can be anywhere between weeks to months. For a team looking to release early and get feedback, it can be a fatal bottleneck. It can be anything from getting a developer box, a testing environment or production infrastructure. The traditional answer most often is, ‘That is how the process works’. To be fair to the IT team, the bottleneck is sometimes somewhere else, like the hardware vendor. The cloud is a great way to alleviate a lot of the hardware procurement issues, but again a lot of traditional organizations are sceptical about it. It is changing rapidly though.
4. Another bottleneck I have seen is getting money from the business. If it takes three months for you to decide if you want to pay for something or not, then you have already wasted three months of development time and your competitors may have already built it in that time. Business agility has it’s own wikipedia article, so I’ll stop talking about it.
I am sure there are good and bad reasons why certain processes exist in an organization. The point these things are never scrutinized and changed. There is no feedback loop. As a result, you spend more money and make customers and employees unhappy. This applies to any organization in general not just software. Quoting from the theory of constraints, a chain is no stronger than it’s weakest link.