Software development is the process of computer programming, documenting, testing, and bug fixing involved in creating and maintaining applications and frameworks involved in a software release life cycle and resulting in a software product. The term refers to a process of writing and maintaining the source code, but in a broader sense of the term it includes all that is involved between the conception of the desired software through to the final manifestation of the software, ideally in a planned and structured process. Therefore, software development may include 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 being to meet specific needs of a specific client/business (the case with custom software), to meet a perceived need of some set of potential users (the case with commercial and open source software), or for personal use (e.g. a scientist may write software to automate a mundane task). 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.
The need for better quality control of the software development process has given rise to the discipline of software engineering, which aims to apply the systematic approach exemplified in the engineering paradigm to the process of software development.
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.
Custom software (also known as bespoke software or tailor-made software) is software that is specially developed for some specific organization or other user. As such, it can be contrasted with the use of software packages developed for the mass market, such as commercial off-the-shelf (COTS) software, or existing free software.
Since custom software is developed for a single customer it can accommodate that customer's particular preferences and expectations. Custom software may be designed in stage by stage processes, allowing all nuances and possible hidden dangers to be taken into account, including issues which were not mentioned in the specifications. Especially the first phase in the software development process may involve many departments, including marketing, engineering, research and development and general management.
Large companies commonly use custom software for critical functions, including content management, inventory management, customer management, human resource management, or otherwise to fill the gaps present in the existing software packages. Often such software is legacy software, developed before COTS software packages offering the required functionality became available.
Custom software development is often considered expensive compared to off-the-shelf solutions or products. This can be true if one is speaking of typical challenges and typical solutions. However, it is not always true; custom software development by a reputable supplier is often a matter of building a house upon a solid foundation and, if managed properly, it is possible to do this quickly and to a high standard. In many cases, COTS software requires customization to correctly support the buyer's operations. The cost and delay of COTS customization frequently adds up to the expense of developing custom software. Cost is not the only consideration however, as the decision to opt for custom software often includes the requirement to own source code to safeguard future development or changes to the system installed.
Additionally, COTS comes with high upfront license costs frequently running into millions of dollars. Thus only the big corporations are able to absorb such high costs upfront. Additionally, the big software houses having COTS products revamp their product very frequently. Thus a particular implementation needs to be upgraded for compatibility every 2–4 years. Given the cost of customization, such upgrades also turn out to be expensive as a dedicated product release cycle will have to be earmarked for it.
The decision to build a custom software or go for a COTS implementation would usually reside on one or more of the following: