No Silver Bullet: Essence and Accidents of Software Engineering

Just happened to read another gem No Silver Bullets from Frederick P. Brooks. I have already gone through some of the chapters from his classic “The Mythical Man Month: Essays on Software Engineering”.  (trying to complete)

The wonderful analogy of Essence and Accidents of Software Process described by writer fully maps the real issues on Software Design Process, the development of High Level languages and tools only serve to resolve the Accidents of the Software process but there is no sinlge answer for the Essence [conceptual design issues] of Software Process.


“To see what rate of progress one can expect in software technology, let us examine the difficulties of that technology. Following Aristotle, I divide them into essence, the difficulties inherent in the nature of software, and accidents, those difficulties that today attend its production but are not inherent.

The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.

I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems.

If this is true, building software will always be hard. There is inherently no silver bullet.”

So, what is the solution for these inherent and complex software issues [Essence] which the modern day tools and languages cannot address or which cannot be guranteed the way the language/tool productivity can be guaranteed. One of the possible solution the writer has presented is “growing” good designers.


My first proposal is that each software organization must determine and proclaim that great designers are as important to its success as great managers are, and that they can be expected to be similarly nurtured and rewarded. Not only salary, but the perquisites of recognition–office size, furnishings, personal technical equipment, travel funds, staff support–must be fully equivalent.

How to grow great designers? Space does not permit a lengthy discussion, but some steps are obvious:

  • Systematically identify top designers as early as possible. The best are often not the most experienced.
  • Assign a career mentor to be responsible for the development of the prospect, and carefully keep a career file.
  • Devise and maintain a careerdevelopment plan for each prospect, including carefully selected apprenticeships with top designers, episodes of advanced formal education, and short courses, all interspersed with solo-design and technicalleadership assignments.
  • Provide opportunities for growing designers to interact with and stimulate each other.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s