Software development (as opposed to mere coding) can be divided into five stages:
- Analysis - understand the problem to be solved; gather user requirements
- Design - choose the data structures,
that will model the problem; possibly prototype the system, especially if it has a large user interface component
Code - implement the design in code
Test - debug and correct mistakes
Document - write the user documentation for the system (should ideally occur throughout the development process)
A number of years ago, each of these stages took roughly 20% of the total time in a project,
though today the actual writing of code is likely to be the shortest of the phases.
One common source of project overrun is only accounting for what is to most programmers the most interesting phase, writing code.
Many efforts have been made to make the writing of code more efficient.
However, relatively little effort has gone into increasing efficiency in the other four stages.