Brooks' stand on the software challenges though genuine and true to a significant extent does sporadically sound pessimistic. He says,“… no single software engineering development will produce an order of magnitude improvement in programming productivity within ten years”. In his view, nothing can possibly solve the difficulties pertaining to the "essence", or the inherent abstract concept and consequentially there is no single solution to the problems in productivity, reliability and simplicity. Well, being aware of the fact that it is two decades since this paper was written and a lot of things have changed since then, quite a few interesting things have popped up which would possibly convince us to disagree with some of his statements.
Facts are Facts!
Over the last few years, software development technology has grown steadily and we’ve been able to develop and deploy applications that were once considered literally impossible. Unfortunately, with the growing needs of the customers, the complexity of the systems built also increased exponentially. Hence, complexity factor has been one biggest challenge to all software developments no matter the software was developed in 1987 or it is going to be developed in 2007.
Another property of the software development which could be deemed eternal is the "Changeability". Brooks' describes software as a thought-stuff", which is "infinitely malleable". From the early years of software development to the present period, software developments have always been subjected to change.
To a certain extent, I do agree that software is invisible and in Brooks’ view, it is also unvisualizable. William Thomson describes that “I am convinced that measurement as practiced in other engineering disciplines is IMPOSSIBLE for software engineering. But the idea of prototyping has made the process of visualizing the software to a significant extent. Also, the difficulties due to conformity still exist due to the fact that the enterprise systems are not homogeneous. A number of discrete and disparate systems fit together to constitute the larger system. That is why people struggle to achieve uniformity and system integrity. But is there any hope (The silver bullet!)? And the answer is YES! Though not a complete panacea, we are now equipped with the necessary infrastructure to combat these problems to a significant level.
Now, what’s the change?
The good news is that although we cannot avoid the complexity or changeability of the software, we now have very effective tools and strategies that would help us manage the system better. Moreover, with the same complex systems, developers have now found new means to make it more and more user-friendly. Brooks' statement is very true with regards to the complexity of the systems growing day by day but now, we have tools like UML that enable better understanding of the system to be built. In the mid and late-90's, after the development of UML tools such as use case diagrams, class diagrams, sequence and collaboration diagrams, the area of object oriented software engineering acquired a new dimension. After UML 2.0, there are many different kinds of UML diagrams including component diagrams and detailed design diagrams enabling developers and customers view a software system in varying levels of abstraction.
Fortunately, we also have good process models for software development including iterative, concurrent modeling and agile methodologies such as Rational Unified Process (RUP) or Xtreme programming (XP). Modern process models are typically incremental and iterative in nature and hence adopt reasonable risk mitigation strategies in terms of change in requirements, than the older sequential models like the water fall model.
Brooks' notion is quite true that it is next to impossible to visualize the software as it is not embedded in space and to precisely decide as to what to build. But he also acknowledges the fact that the system could be proto-typed in order to help with design decisions and some user interface designs. Decades back, developers didn't have a effective means to communicate with the business users. Neither did the users know to communicate what they wanted the system to be. Development of software tools such as CASE tools is yet another major leap towards the software engineering discipline. Typical CASE tools such as code generation tools, Data Modeling tools, UML, Refactoring tools and Configuration Management tools support nearly all aspects of the software development. Today, UML notations help us to develop just about any type of application, running on any type and combination of hardware, operating system, programming language, and network.
Brooks did mention that integrated programming environments do attack the accidental difficulties including syntactical errors and problems due to maintaining disparate programs together, by the use of integrated libraries. Today, there are a good number of Integrated development environments (IDE) in place that include the industry’s most powerful and proven tools for developing software with optimum reliability, performance, and minimum code size. One such example is the MULTI® IDE developed Green Hills Software, which has a lot of sophisticated capabilities which enable you to develop, debug, and optimize code more quickly, significantly reducing both the development costs and time. More than that, it can be customized within our own existing environments such as Eclipse. These kinds of developments definitely do much more than providing “freedom from syntactic and semantic errors”.
Though the issue of conformity still exists, at least we are now equipped with means to combat it effectively. Since software evolves over time it is not a cost effective means to persistently replace all the older systems in order to meet the current demands. Instead, people now have a choice to adopt certain integration strategies to maintain uniform and consistent picture through out the enterprise. One good example for the same would be the CRM packages and CDI (Customer Data Integration) hubs.
From what we have seen, it is very evident that the difficulties haven’t changed themselves, but mankind has found effective means to survive with the difficulties. We face newer challenges, but we also have means to tackle them, if not to avoid them. The current challenges facing the software systems of today, other than resilience and adequacy are attributed to the “Adaptiveness” of the system. However, with the concept of modularity, organizations have learnt to cope up even with this new challenge. Therefore, the essential difficulties do exist and will continue to as long as there is the need for software engineering, nevertheless, the new developments in this discipline is a silver lining and a ray of hope to the software engineers, if not a silver bullet that would do magic to lay the problems to rest!
1. F. P. Brooks, "No Silver Bullet: Essence and accidents of Software Engineering”, Computer Magazine
2. as retrieved on April 25th, 2007.
 Green Hills Software is continually adding support for new processors and operating systems. For more information, go on to