Software development is the process of imagining, defining, designing, programming, documenting, testing, and fixing bugs associated with building and maintaining applications, frameworks, or other software components. Software development is the process of writing and maintaining source code, but in a broader sense it includes everything that happens from the conception of the desired software to the final embodiment of the software, sometimes in a planned and structured process. Consequently, software development can include research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that lead to the creation of software products.
Software can be developed for a variety of purposes, the three most common being to meet the specific needs of a particular customer/company (the case of custom software ), to meet the perceived need of some group of potential users (the case of commercial and open source software ) or for personal use (for example, a scientist might write software to automate an everyday task). Embedded software development, that is, the development of embedded software, such as that used to control consumer products, requires that the development process be integrated with the development of a controlled physical product. System software underlies applications and the programming process itself and is often developed separately.
The need for better quality control of the software development process has led to the discipline of software engineering, which seeks to take a systematic approach, as exemplified by the software development process engineering paradigm.
There are many approaches to software project management known as models, methodologies, processes, or software development life cycle models. the waterfall model is the traditional version, as opposed to the more recent innovation of agile software development.