Fred Brooks’ silver bullet

Ujjwal Gyawali 10 January, 2021

Bryan Mathers

There is no silver Bullet??

Bear with me…

In his original paper “No Silver Bullet: Essence and Accidents of Software Engineering”, Fred Brooks argues that there is no innovation (a silver bullet) in software development that would achieve an order of magnitude increase in productivity, in reliability, in simplicity¹. He believes no such silver bullet is in existence till date and will never will; the very nature of software makes it very unlikely.

The innocent and straightforward looking project at the initiation in no time is capable to turn into a monster (i.e., a werewolf according to Brooks) that results in missed schedules, blown budgets and flawed products.

Brooks identifies two main categories of complexity in software development: the essence and the accident. The essential complexity of software development relates to the requirement specification, system design (i.e., mapping specification to software), and testing (i.e., verifying that the software meets the business needs) while the accidental complexity refers to the difficulties associated with implementation (languages, runtime, tools, and programming techniques).

Accidents in software engineering

In his article, Brooks explained how the assorted innovations that attempted to address accidental complexity (at the time)were not silver bullets, and concluded that the only things that may yield close to an order of magnitude productivity improvement are those that address essential complexity, such as improvements in requirements gathering, rapid prototyping, and cultivating good design skills.

The very problem that accounts to all the disasters in software development is in the early stages of development in system designs and architecture, and not in the implementation. That is the very reason why the advancements in high level programming languages account to no remarkable achievements in the field. This is also the very reason why it’s so difficult to address the problems in software development once the development is at pace and adding more people into the development team only adds onto the problem, or worse, ensure failure.

There isn’t a magical solution to make all of software development problems go away. In other words, a “silver bullet” that one can use to lay the monster that lurks in every software project to rest doesn’t simply exist .

However, Brooks believes one approach to realizing such “silver bullet” that can change the software development process is allowing the engineers to develop the “big” parts of the software first, and add the “fill-ins” later. He felt that this process will excite the engineers and provides them a working system in each stage of development, rather than gradually building from scratch. Another such approach is in order to get great software, hire great designers. Great designers and great managers are very rare, both equally important. Why does Brooks emphasize on designers so much??

Unlike in other fields of engineering projects, say for example building a bridge or simply a doghouse, it’s very difficult to keep track of progress in software development due to its intangible nature. Besides complexity, the very fact that software being a collection of program which in itself is a collection of statements to implement a business logic, and is finally represented as bits that runs on machine makes it difficult to visualize especially to non technical clients. To be honest, it’s not just clients but development team itself; things could go very wrong and out of hands in no time. And having a great designer to lead who has inside out knowledge of what’s being built is a must that one cannot compromise, period.

What makes a great designer you may ask. Well, a great designer is someone who gives you the software on paper before he/she even touches the keyboard. So what makes a great designer? Years of development experience and profound knowledge of system architecture and design, problem solving (of course) paired with leadership and soft skills (to create great designers) and lastly knowledge of business domain itself. As you can see designers and developers aren’t two separate entities but two and often times overlapping phases of a growth.

“Great designers come from great designers.”
-Fred Brooks

His advices to grow great designers, include systematically identifying top designers as early as possible, providing opportunities for growing designers to interact with and simulate each other.

To conclude, Brooks encourages us to hire great designers and spend significant amount of time in the earlier phase of careful planning and designing the system that adheres to the thoroughly researched specification, and build an earlier prototype with core functionalities to work with. Furthermore in the hope of keeping things simple, and with great wisdom he bestows upon us the most effective and radical solution to avoid all of problems in constructing software. He advices us to not construct it at all and use an already existing solution that satisfies our needs whenever possible.

[1]: Fred Brooks. (April 1987) No Silver Bullet: Essence and Accidents of Software Engineering