
From time to time we will post free information and articles here. Please check it out regularly, and use it!
Software engineering is the process for the development and maintenance of high quality software systems, delivered on time and within cost estimates. As Dr. W. Edwards Deming pointed out (and the Japanese have taken to heart in their manufacturing enterprises), it is less expensive to design quality into a product than to test it in. This holds true for software. Deming argued that the way to obtain high quality is through constant incremental improvements, measuring and understanding the quality attributes of the product and production system, and a general attention to detail. It is said that God lives in the details. Deming also maintained that high quality can only be obtained through a cooperative venture among everyone involved. Thus management must work with the customer and the workers to obtain a win-win situation for all involved. The ultimate pay off can take 3 to 5 years to reach, so management must be free of, or able to resist, the pressures for quick fixes.
Software development is not a linear process. Tasks overlap and feedback. Brook's law states that adding people to a late project may delay it more. This is because effort must be expended to train or at least familiarize the new workers with the project, and the addition communications needed to coordinate more people takes time and provides more opportunities for miscommunications and consequent delays. In other words, you can not trade people and time in sequentially ordered tasks.
The complexity of a software system feeds back into the quality of the system, but in a nonlinear way. The very term "system" implies the holistic point of view needed to understand this phenomenon. A high quality software system becomes more difficult to obtain as the size grows not only because there are more potential things to go wrong, more potential coding errors which can be made, more algorithmic choices which can degrade performance, but because as more people work on a system the less chance there is to maintain a unified idea of how the system is supposed to be, if indeed there ever was one. This prevents the system from having the quality characteristics which can be ascribed to what has been called "a good hack". In addition, it becomes impossible for one person to understand the entire system, and thus realize potential interactions between modules, etc. Of course there are offsetting advantages to having more people working on a system. These include a larger pool of (hopefully good) ideas, the possibility that one person will catch an error or omission of another, etc. These must be weighed against the overhead of communications required to make these advantages possible. All things being equal (which they seldom are), the quality of software systems tends to decrease with increasing complexity.
This outline explains the process of software engineering in order that managers can better understand the procedures and resist the urge to force quick fixes that will compromise the quality and long term success of the software development process. If you would like a free copy of the full paper, please e-mail russell.martin@mail.wdn.com or mail your request to R. L. Martin and Associates, 2078 Lake Grove Lane, Crofton, MD 21114-1830.
©1999 Russell Martin