Early software often had a list of inadequacies, bugs and other problems due to a range of problems caused by inexperience both in developers and potential users. Over time, five areas within the process of software development were identified as being the main culprits for arising difficulties.
In the beginning, requirements were often not clearly stated, resulting in extra features having to be added at later stages, often causing major problems in integrating the additional features into the existing programming. Today, requirements are clearly stated and consist of testable requirements agreed on by all involved before work is commenced.
Time schedules were often unrealistic, resulting in proceedings being rushed, often causing bugs, etc. Today, adequate time is allowed for planning, design and development.
In the past, testing facilities were not always adequate, often resulting in problems being missed. In addition, testing mostly relied on basic function testing of the end product. Testing facilities today are far more sophisticated and take peopleware into consideration. In other words, the software is tested on actual users at various stages of development before finalizing, in order to ensure optimal user friendliness.
When late changes of requirements were presented in the past, developers often hastily attempted to integrate them. Today, the changes are discussed and if necessary, time schedules are revised in order to allow for seamless integration. Once integrated, the software will again undergo the testing process as above.
Early software development was often hindered by lack of communication and documentation. Today, many tools of communication, information sources and documentation facilities are used in order to ensure both team and end user remain informed what is happening how and when at all times. In this way, problems are more likely to be identified at an early stage.