Software refers to both computer operating systems themselves, as well as to programs and applications designed to run on computers. Software development is the designing and writing of software, including development of the program architecture and user interface and programming of the source code. The software development process is the approach taken to software development, and there are many well-developed models for this process. In general, they contain variations on the phases of doing a requirements analysis, speccing the product, creating the software architecture, implementing the code, testing and documenting the product, providing training and support, and maintaining and enhancing the release. Whichever model is being used, the software development process may sometimes be aimed at new product development, while at other times it is focused on revision — for example, when a point release is created to fix bugs — and at yet other times, it may be preparation for a new version of existing software, adding significant features as well as offering bug fixes.
The Waterfall Model for software development process is an early model and also one with inherent limitations. It prescribes a strictly uni-directional approach to development, moving one-way through the sequence of software development phases, without ever returning to a previous stage or changing the specification, once development has begun. The Spiral Model, by contrast, uses an iterative process, in which a sequence of requirements, followed by design, implementation, and finally testing is followed by a second cycle in which more features and components are added. In Agile Models of the software development process — of which there are a number — development projects are divided into week- to month-long subsets called timeboxes, each of which goes through a miniaturized version of an entire software development process, including a release at the end. Other features of Agile development include proximity of the collaborating team and use of customers to respond to the product throughout the process.
Software development process may be radically different for a large firm and for an individual programmer. For example, a commercial software publisher, like Sibelius Software®, a part of Avid Technology®, might spend several years on the software development process for each version and release a software application that is hundreds of MB in size and used by thousands of people. On the other hand, an individual like Roman Molino Dunn, The Music Transcriber®, programming a plug-in in response to someone’s wish that he or she could do something different with a piece of commercial software, might create a 4 kb piece of software within an hour of having the idea, in an extreme case.