I read The Mythical Man Month by Fred Brooks in school. I read a lot of books in school. But this one sunk in and the lessons in it have stayed with me for all this time. There is a ton of information in there but lately I have been thinking a lot about Brooks’s included No Silver Bullet paper.
Now, normally I don’t talk that much about technology when I write. I do that for a living. I do this for fun and as an outlet for rants. But maybe there is something in it for everyone.
First, let me explain the title for you non-software types out there. Brooks said that there was never going to be a technology developed that would make software significantly easier to create. He made this claim based on the idea that there were essential and accidental properties of software systems development. (See Aristotle or even Plato’s Forms for more of the philosophy of essential and accidental properties.) The new technologies like new programing languages and new methods for design and development or even new machines were all addressing the accidental properties. He claimed that the essential properties were problems that the human mind had to sort out and there were no ways to make it go faster.
So far he’s right. People have claimed that various technologies have had a huge impact but these are simple linear improvements at most. At bottom, software design and development of complex systems is more like solving word problems than anything else. It is like suggesting that an author would finish a novel faster if she had a faster typewriter. As if the typing were the problem.
So, unlike the werewolves of the world, there is no silver bullet, no single solution to the problem of complex software design and development. But has there been any significant progress at all?
I think there has been some minor movement. But we may be getting close now to a big shift. Cloud computing and distributed systems are starting to make it financially viable to spend a little extra time doing the kind of additional work on software components that make them truly standalone. This means that they can be hosted and optimized as a single component, which gets us much closer to the revolution akin to the electronics revolution.
We were supposed to have this revolution a long time ago. Software was supposed to be reusable and more like installing components than doing everything with bare metal. Some progress has been made but we are still not there. It is simply not worth the additional investment to take a part of a module and make it into a standalone “product” that might stand for reuse or for individual consideration in some other way. The API and integration issues combined with the maintenance overhead make it a questionable investment at best.
But these new system architectures are different. If I want to run my component on multiple distributed nodes, it is worth the extra time to make sure it will move around. This change may bring us a significant improvement in the way developers use services and service-oriented code.
It won’t be anything to bother Mr. Brooks. There will be no revolution in the way we attack the essential nature of software development. But it will be fun to watch.