Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development involves writing and maintaining the source code, but in a broader sense, it includes all processes from the conception of the desired software through to the final manifestation of the software, typically in a planned and structured process. Software development also includes research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that result in software products.
Software can be developed for a variety of purposes. The three most common purposes are: to meet specific needs of a specific client or organization (known as custom software),[citation needed] to meet a perceived need of some set of potential users (known as commercial software ),[citation needed] or for personal use (e.g. a scientist may write software to automate a mundane task).[citation needed] Embedded software development, that is, the development of embedded software, such as used for controlling consumer products, requires the development process to be integrated with the development of the controlled physical product. System software underlies applications and the programming process itself, and is often developed separately.
There are many approaches to software project management, known as software development life cycle models, methodologies, processes, or models. The waterfall model is a traditional version, contrasted with the more recent innovation of agile software development.[citation needed] Though it is often used as an interchangeable synonym for “software development”, the term “software engineering” is also used to refer to a particular approach to software development, which uses engineering methods and in some cases involves professional engineering qualifications.