Have we seen the silver bullet? – Thirty years of The Mythical Man-Month
The Mythical Man-Month is a classic work in the field of software engineering. Many of the topics discussed there are still relevant thirty years after its first publication. Thought leaders and practitioners are still debating on the assertions made in the book, despite the tools of the trade have moved from X86 assembly or Cobol to Rust or TypeScript. Considering the amount of changes and progress that have taken place in this period, it’s indeed a timeless work.
Particularly, the argument from the chapter No Silver Bullet, which states that there will be no breakthrough in Software Engineering that can improve the productivity by an order of magnitude, in the next 10 years, or next X years, has drawn continued interest. Will there be and what is the magic that will transform the hard-to-estimate, error-prone and bug-packed discords of software manufacturing into an accurate, smooth and systematic symphony?
Brooks’ argument is that, as the fundamental complexity in Software Engineering is the complexity of the actual system to be built, and all solutions then have not tackled this fundamental difficulty, the improvement on productivity will be limited.
On hindsight, it’s not conclusive if the productivity has been improved by an order of magnitude or more. But it’s certainly evident that numerous magnificent software products, sheer in their size and complexity, have been built. Excel is an engineering miracle; Google Map is an engineering miracle; Git is an engineering miracle. Using estimates from the 80s, these products could have taken centuries to build, and with Brooks’ rule, can’t be shortened by adding more manpower.
What gives? To me it’s definitely reuse. Reuse, layers of abstraction and incremental development. If you think about how many things under the hood is going on, and how many assembly instructions it corresponds to when you write down a statement like element.on('click', callback)
or @Bean
, it’s mind-blowing. We don’t need to implement or care the lower level interactions anymore and are able to focus on what needs to be implemented at hand. In a sense we are still building it slowly, a dozen thousand LOC per year, but on top of the shoulders of giants. Combined with abstraction and incremental approach, we achieved what we have today.
In the original essay No Silver Bullet, Brooks nominated reuse and incremental approach as hopeful candidates. He got it right.
But as pointed out by Joel in The Law of Leaky Abstractions, we are never able to really forget the internals and let abstraction do its magic. It’s going to be leaky. It’s going to give problems and we solve the problems one by one and painstakingly. It’s going to progress, but never as smooth as we hope. Quoting G. W. F. Hegel, a spiral-development.