The Abstract Nature of Software
Software development is an abstract process. Envisioning the exact functionality of an entire application proves to be quite difficult before the development process begins. While the client may have a general idea of what types of tasks their application should perform, he/she never fully imagines the requirements necessary to perform each function.
Before development, an experienced programmer would carefully consult their client, breaking down each requested function, until all possible details are uncovered. During the development process, a series of milestones would be scheduled where input may be received from the client. Typically, at these points, the client will have a clearer grasp of how they would like their application to be structured. After gathering the client’s input, the developer will make the necessary adjustments. Correct scheduling allows the developer to make time to perform these adjustments.
Because of software’s abstract nature, a definitive completion point becomes difficult to pin down. The client may realize an infinite amount of functionality which they would like to include however, it is unfeasible for the developer to make an infinite amount of adjustments to the clien’t software. As a result, the need to nail down the major requirements of the requested software, before development begins, must be emphasized. This way, the completion of the application may be considered as the completion of each major requirement.