Why need a process...?
[Copyright © DEEPAK JAIN]
By definition, I take a process as the decision or a set of decisions, one wishes to get early in a project. Here, the question comes why do the people feel the need to get something right early in the project. The answer obvious is because they perceive those things hard to change in later phases of the project. I could not find any theoretical reason of anything in software being hard to change. Any aspect of any software may be picked up to make easy to change. Here a common practical problem arises. Efforts to make anything easy to change make the overall complex software a little more complex. This way, making everything easy to change in the software makes it uncontrollably complex. In fact, this is the complexity of the software systems that makes it hard to change. And its hardness to change gives a need of right decisions in early phases of the project.
The sad part of software development is, while there are well defined theories to ensure the reliability of the hardware projects, the things are not so developed and matured about software projects. But at the same time, it is mandatory to control its development through a well-defined and systematic process. The old fashioned 'code & test' approach is now impractical in concern of increased complexities and huge size of current projects. Ad hoc development approaches in current huge developments may cause disastrous outputs. They lead to ambiguous communications, imprecise observations, brittle designs, inaccurate risk assessment, insufficient testing, uncontrolled change propagation and subjective progress assessment.
For these controls over the huge developments, formally defined processes are needed. These development processes are required to provide visibility into the projects. Visibility in turn aids timely management control and mid-course corrections against the expected errors and crisis. It helps developers to weed out faults quite early before they cause to entire failure. This also avoids cascading of faults into later phases where, accumulation of increased number of faults leads to failure. A formal development methodology also helps to organize workflow and outputs to maximize resource utilization and to define everybody's roles and responsibilities clearly. Individual productivity hence increases due to specialization and at the same time the team's productivity increases due to coordination of activities. The adoption of a formal development process with well define unambiguous and complete policies will lead to the benefits of correct requirements to generate the correct product in order to meet the customer's needs preciously and inclusion of necessary features that will in turn, reduce the post-development cost.