Thursday, December 31, 2009

No Silver Bullet




This year we have an Object Oriented Programming (OOP) course, well we work from a book (I don't know it's name :D) anyway I read some parts of it and there is one part that I really really liked, this part discusses the "No Silver Bullet" concept that was issued by Fred Brooks in 1986 in a paper published under the same name, the paper is about software engineering.

This paper tells us that there are two main types of difficulties facing that software development :
essence and accidental, the essence difficulties are the ones that are part of software and they cannot be solved but can be reduced and dealt with, using different methods like Object Oriented Paradigm, the others which are the accidental ones might be solved through researches and other ways.

The four essence difficulties presented in Fred's paper are:

1 - Complexity
  • Software is complex in a terrible way even more than Hardware, this is because in software there are numerous cases that are to be handled and different technologies to be supported which implies complexity, this is very clear in large products that contain many modules that have different states and interact with each other in many ways, to bring it closer, count the number of loops, if statements and other controls in a program, you will find that the functionality of the software (when large) cannot be comprehended by one person.
2 - Conformity
  • "No problem, Call the IT department and tell them to do ... " that's something that each company owner must have said, people not in the field of software development always have a strong belief that software is easy to make and can "adapt" with any thing, this may sound correct but it's not, this causes software to be the last step in building a factory or starting a company, sometimes the design of the institution is not the smartest one but cannot be changed, but anyway the software should support it, this happens a lot when old institutions decide to add technology.
3 - Changeability
  • Software must change during any of its steps (requirements, specification, analysis, ...), any way, even a small change implies the reintegrating the modules and regression testing to ensure that the change would not harm the software. Software also have to change when a new Hardware shows up to work on it, and even if the product was perfect a customer is likely to ask for expansion of the software to support even more features.
4 - Invisibility
  • Any thing can be visualized, doctors have plastic humans, x rays, images and many other things that help them to visualize anything in the human body, architects, mechanical engineers have drawings, every one has someway that used to talk about different terms in the same languages, unfortunately software is not like that, it is impossible to visualise the way a software works and even thought there is Unified Mpdeling Language( UML) it's not really unified, add to that the fact that even with it you cannot "visualize" the software.

These are the four essences difficulties of software that we software engineers are cursed with :D , and there is "No Silver Bullet" for them which means they cannot be solved.
Anyway I think that Fred is a little bit pessimistic or may be he is just realistic, what do you think?

To read more click here.
To understand the meaning of the term "Silver Bullet" click here.