A long time ago, I read Fred Brooks’ “The Mythical Man Month” and “No Silver Bullet“, and I agreed with it.
But now, many years later, I think he was wrong. I think there are lots of silver bullets that make software easier to build.
The problem is that what we need to build keeps getting more complex, providing diminishing returns on the advances in technology.
I realize this is a controversial statement to make, so let me provide some examples:
Pong
How hard is it to make the game Pong for Windows? I think most people would agree that it is close to trivial - there are libraries to manage launching the game, libraries to track sprites and mouse movement, and libraries to manage text on the screen.
But 25 years ago, it wasn’t trivial. Everything had to be written from scratch, often in assembler. That’s why Pong was so entertaining - nothing had ever been built like it before.
The core concept of Dr. Brooks’ argument is that there are no order-of-magnitude changes in software development. But I would argue that over the course of a generation, Pong is now an order-of-magnitude easier to build than it used to be.   No one change made this so - but a host of smaller, incremental changes led us to the point where a teenager can write a Pong game in a weekend.
Spreadsheet
The spreadsheet was once one of the most sophisticated applications ever produced, and it changed the world. Back when it was first developed, Lotus 123 and Quattro and Excel battled for dominance providing basic math, and a suite of simple functions and graphing tools.
Nowadays, people write spreadsheet software in JavaScript to run in a browser.
Again, something that was once very hard, and very sophisticated is now, relatively speaking, trivial. (This is not to imply that producing a JavaScript spreadsheet is trivial, but it is trivial relative to the production of the first spreadsheet program).
And why is that? Because the tools are better. The libraries are richer and the graphics and communications pipelines are easier to use, more accessible and easier to debug. Here’s a thought experiment - using nothing but software from 1990, produce an online spreadsheet that people can use with their personal computers.  You’ll need to provide:
- Network socket code
- Server socket code
- Dynamic download/upload code
- Zero-click install
- etc
- etc
- etc
The Enduring Legacy
The reason that the assertion that “There are no silver bullets” still seems to be true is twofold:
- People expect their applications to do more than they used to.
- Business logic isn’t any easier
Increasing Expectations
Over time, Pong isn’t any fun anymore, and a basic spreadsheet doesn’t help you with your more advanced problems. You need new help, more sophisticated games, with 3d capabilities, and you need macros and programming built into your spreadsheet, and change tracking, and audit trails and so forth. As the scope of the application expands, it hits the edges of the known, and forces the programmer into the unknown. At the edge, in the unknown, there are no silver bullets. And so the general problem of software remains hard, even as the specific elements grow easier over time.
Business Logic
The second problem is that business logic doesn’t get any easier. If anything, it gets harder to capture all the rules that govern more sophisticated applications.  Business logic is a human phenomenom, and it is not well suited for automation. Certainly there are tools that claim to improve the collection of business logic, and engines that claim to let people write business logic in human terms.  But in my experience, these are, at best, modest improvements. The bulk of the sophistication in capturing and coding business logic remains.
In Conclusion
- I think software development would be easier if we could build apps on older, well-proven technology instead of newer, less supported systems
- But as software problems become “standardized” and well-supported they are no longer valuable
- Because people expect their software to do valuable things, they will always insist that at least some of the work be done at (or near) the cutting edge
- Business logic is much harder to standardize and takes up an increasing amount of the complexity in modern software
Questions
- Do you disagree? Can you show me examples of older systems that are just as hard to build now as they were when they were first developed?
- If we could convince users to accept somewhat older technology, do you think it would make software development easier and faster?
- Are there societal changes that could make business logic easier?
I think you misunderstand the “No Silver Bullet” argument. Not to be pedantic, but it’s “No Silver Bullet” not “No Accumulation of Silver Bullets”.
While I heartily agree that software of 20 years ago is easier to write with today’s tools, it’s due to a host of advancements, not any single one.
It’s not as if Brooks was unaware of C and the power that the (at the time of the essay) high level language brought over assembly. I think that if the argument you put forth was valid, it would have been just as true in 1986. In other words, it would have been possible then to write programs that were cutting edge in 1976 in 1/10th the time.
Comment by Rick Duggan — June 14, 2006 @ 1:43 am
Hmm. I was thinking about this on the drive home today. I can’t think of any example from any industry of any innovation that “instantly” produced a 10x improvement. It’s always technology+practice+more tech+new business models that produce that kind of improvement, and it takes a long time (many years) for them to gel.
Which suggests that the entire concept of “one silver bullet” is a non-starter - there is no such thing anywhere.
Two examples spring to mind: The printing press, and replaceable parts. The printing press required a number of innovations to come together over many years to reach a 10x improvement in bookmaking. Similarly, replaceable parts weren’t able to provide a 10x improvement until assembly lines and supply chains were sorted out.
Interestingly, it occurs to me that a number of 10x improvements in other industries took far longer to gel than the 10x improvements in software. Viewed over the timespan of the entire industrial era, software’s rapid advance in efficiency may be unprecedentedly small.
Comment by JB — June 15, 2006 @ 2:34 am
Operating Systems - even now that the world seems to have standardized on a single processor, these aren’t getting any easier to write.
Compilers.
Editors. Legend has it vi was written in a weekend, probably not true, but it was a quick and dirty project, and it ran fast over a slow terminal connection on an unfamiliar host, could you do the same in one week?
It’s getting orders of magnitude easier to deliver functionality, but you simply aren’t writing the same amount of software. I don’t think “someone else having done 90% of the work for you” was exactly what he was talking about when he was talking about silver bullets. Sure, if I’m working on Doom, it’s going to be easier if someone else writes my graphics code for me, but what does that prove? That old problems develop standard solutions?
I think the big footnote to this is that while it may be easier to deliver Pong or a 1980s quality spreadsheet now, people made millions of dollars doing it back then, not so much now. It’s easier to deliver functionality when that functionality has become a commodity, but don’t expect to get any better than commodity rates for your work (and in software, the commodity rate is $0.00)
Comment by carter — May 12, 2007 @ 5:23 pm