In my new product development role I get to observe programmers from a little further away than before. What I keep noticing is my amazement how quickly programmers these days are able to develop complex pieces of software. It takes just days to develop functionality which few years ago took weeks to develop and would take months of development time in the '90s. Migration from native OSes to web browsers as execution environment, adoption of web standards for presentation layer, and all the great online services available through easy to use APIs have made development of extremely complex tasks almost trivial.
But increased productivity has come with a great price in the form of support costs of a complex piece of machinery. When the developer is in the zone, code flows out of him or her like a breeze. But when fixing a bug or adapting functionality to a new use case, the lead times have only increased because developer must first refresh his understanding of the code and the system before he or she can make changes that don't cause even more problems. The end result is that programmers spend the first few weeks as members of a start-up or project team turning out insane amount of functionality, and then they spend months and years fixing bugs and pivoting code to new business reality.
The solution I see to this problem is multifold. First, product managers should be more careful in their specifications and request from programmers to develop only the absolutely essential functionality. Second, programmers must resist the urge to show off their superpowers and instead concentrate on creating a bug-free code and account for all the edge cases. Third, the architecture of the system must be such to allow easy replacement of individual components since it is much easier to develop a component from scratch than adapt it to the new reality. Fourth, the share of developers in a start-up or project team must be kept low so that only essential functionality gets developed and non-technical or external solutions are tried first before resorting to developing in-house technology.