Jun 09

There are lots of silver bullets

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:


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.


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:

  1. People expect their applications to do more than they used to.
  2. 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


  • 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?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>