A brief history of software development

History of modern computer technology is very short, it is only about 70 years. History of software is shorter, it is about 50 years. Most software development methods do not fully take shape until 1970s. Basically, there are two ways to develop software:

The “Classical way” or the “Product-driven way” considers develop software is a building activity with each brick (Code) putting on top of each other until they become the software product. It considers that anyone with programming skills can build software and that activities leading to a software product are “free form” as each programmer know what he is doing. This view came from the early days of computer, a time in which software was still a mystery that depended on programmers to code software. It relies on the individual techniques and knowledge that is in his head and not documented.

The “Modern way” or the “Process-driven way” appeared in the late 1970s is based on the manufacturing area which focus on the way software is built to determines the product’s quality. This way considers software as a set of small tasks that follow a process where each can be controlled and measured. It discards the concept that software development is a “free-form”. It insists that it is a discipline that is best done under strict rules in which relationships between tasks are well defined explicitly. These relationships, also known as “process”, identify the tasks needed to produce a software product and guide it through a roadmap called “Software development life cycle”.

Most software projects today either follow the “Classical” or the “Modern” way depends on the education and training of developers. Between 1970s to 1990s, the software industry focused mostly on the classical way since most software at that time were relatively small and more simple. However the quality of those software was not very good with many defects. The shift from “Classical way” to “Modern way” began in the late 1980s when the US government’s wanted to improve the quality of software in military embedded systems by demanded that all software works for government must follow strict quality standards. This was manifested with the Ada programming language and its frameworks for common methods and tools such as DOD-STD-2167.

The establishment of the Software Engineering Institute (SEI) at CarnegieMellonUniversity in late 1980s is the attempt to improve quality of software throughout the U.S. The development and application of the Capability Maturity Model for Software (CMM) and several process models appeared later have changed the way people develop software in the U.S and then to other countries.

During the transition time, there is major disagreement between people who are trained in the “Classical way” and the “Modern way”. One group consider following a “process” destroys the individual’s creativity. The other consider not following a process is chaotic and out of control. There are many arguments and debates among developers until evidences from industry clearly demonstrated that standardized process can improve projects’ ability to manage cost, schedule, and defects. Even when companies begin to accept the “Modern way”, universities are still teaching the “Classical way” so students are confused. They are trained to do whatever they can (Free-form) to build software during their four years in college but when they work in the industry, they are forced to follow a “process” in which most do not understand. Many feel uncomfortable by the “ unnecessary bureaucracy” in strongly process-driven efforts. This led to a rebellion in the early 2000s against any “heavyweight” processes such as the CMMI or ISO 9000. A group of developers create a light weight alternative process now known as “The agile processes”.

The fact is for large and complex project, you do need the discipline process to ensure the quality and control aspects. There are enough evidences to show that following a software development process can bring higher quality and better software product on time, within schedule and cost. However, for smaller project, it is acceptable to have a less restriction ways such as Extreme Programming, Scrum, Adaptive Software Development. It is important to understand the benefits of both processes (Modern ways and Agile way) but it is also important to point out that developers should not return to the old classical way of free-form, do whatever you like to build software.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University