# Software development

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Software_development
> Markdown URL: https://mediated.wiki/source/Software_development.md
> Source: https://en.wikipedia.org/wiki/Software_development
> Source revision: 1355991274
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

Creation and maintenance of software

Part of a series on Software development Core activities Data modeling Processes Requirements Design Construction Engineering Testing Debugging Deployment Maintenance Paradigms, models Agile Cleanroom Incremental Prototyping Spiral V model Waterfall Methodologies, frameworks ASD DAD DevOps DSDM FDD IID Kanban Lean SD LeSS MDE MSF PSP RAD RUP SAFe Scrum SEMAT TDD TSP UP XP Supporting disciplines Configuration management Deployment management Documentation Project management Quality assurance User experience Practices ATDD BDD CCO CD CI DDD PP SBE Stand-up TDD XP Tools Build automation Compiler Debugger GUI builder IDE Infrastructure as code Profiler Release automation UML modeling Standards, bodies of knowledge CMMI IEEE standards IREB ISO 9001 ISO/IEC standards ITIL OMG PMBOK SWEBOK Glossaries Artificial intelligence Computer science Electrical and electronics engineering Outlines Software development Computer programming Programming languages C C++ C# Java JavaScript Perl Python Rust v t e

**Software development** is the process of designing, creating, testing, and maintaining software applications to meet specific user needs or business objectives. The process is more encompassing than [programming](/source/Computer_programming), writing [code](/source/Source_code), because it includes conceiving the goal, evaluating feasibility, analyzing [requirements](/source/Software_requirements), [design](/source/Software_design), [testing](/source/Software_testing) and [release](/source/Software_release_life_cycle). The process is part of [software engineering](/source/Software_engineering) which also includes [organizational management,](/source/Management) [project management](/source/Software_project_management), [configuration management](/source/Configuration_management) and other aspects.[1]

Software development involves many skills and job specializations, including [programming](/source/Software_programmer), [testing](/source/Software_test), [documentation](/source/Technical_writing), [graphic design](/source/Graphic_design), [user support](/source/User_support), [marketing](/source/Marketing), and [fundraising](/source/Fundraising). Common types of [tools](/source/Software_tools) are [compilers](/source/Compiler), [integrated development environments](/source/Integrated_development_environment) (IDEs), and [version control](/source/Version_control).

The details of the process used for a development effort vary. The process may be confined to a formal, documented [standard](/source/Standards_(software)), or it can be customized and [emergent](/source/Emergence) for the development effort. The process may be sequential, in which each major phase (i.e., design, implement, and test) is completed before the next begins, but an iterative approach—where small aspects are separately designed, implemented, and tested—can reduce risk and cost and increase quality.

## Methodologies

Main article: [Software development methodology](/source/Software_development_methodology)

Flowchart of the [evolutionary prototyping model](https://en.wikipedia.org/w/index.php?title=Evolutionary_prototyping_model&action=edit&redlink=1), an [iterative](/source/Iterative) development model[2]

Each of the available methodologies is best suited to specific kinds of projects, based on various technical, organizational, project, and team considerations.[3]

- The simplest methodology is the "code and fix", typically used by a single programmer working on a small project. After briefly considering the purpose of the program, the programmer codes it and runs it to see if it works. When they are done, the product is released. This methodology is useful for prototypes but cannot be used for more elaborate programs.[4]

- In the top-down [waterfall model](/source/Waterfall_model), feasibility, analysis, [design](/source/Software_design), development, [quality assurance](/source/Software_quality_assurance), and implementation occur sequentially in that order. This model requires one step to be complete before the next begins, causing delays, and makes it impossible to revise previous steps if necessary.[5][6][7]

- With [iterative](/source/Iterative) processes these steps are interleaved with each other for improved flexibility, efficiency, and more realistic scheduling. Instead of completing the project all at once, one might go through most of the steps with one component at a time. [Iterative development](/source/Iterative_and_incremental_development) also lets developers prioritize the most important features, enabling lower priority ones to be dropped later on if necessary.[6][8] [Agile](/source/Agile_software_development) is one popular method, originally intended for small or medium sized projects, that focuses on giving developers more control over the features that they work on to reduce the risk of time or cost overruns.[9] Derivatives of agile include [extreme programming](/source/Extreme_programming) and [Scrum](/source/Scrum_(software_development)).[9] [Open-source software development](/source/Open-source_software_development) typically uses agile methodology with concurrent design, coding, and testing, due to reliance on a distributed network of volunteer contributors.[10]

- Beyond agile, some companies integrate [information technology](/source/Information_technology) (IT) operations with software development, which is called [DevOps](/source/DevOps) or [DevSecOps](/source/DevSecOps) including [computer security](/source/Computer_security).[11] DevOps includes continuous development, [testing](/source/Continuous_testing), [integration](/source/Continuous_integration) of new code in the version control system, [deployment](/source/Continuous_deployment) of the new code, and sometimes [delivery](/source/Continuous_delivery) of the code to clients.[12] The purpose of this integration is to deliver IT services more quickly and efficiently.[11]

Another focus in many programming methodologies is the idea of trying to catch issues such as [security vulnerabilities](/source/Security_vulnerabilities) and [bugs](/source/Bug_(computer_programming)) as early as possible ([shift-left testing](/source/Shift-left_testing)) to reduce the cost of tracking and fixing them.[13]

In 2009, it was estimated that 32% of software projects were delivered on time and on budget, and with full functionality. An additional 44% were delivered, but were missing at least one of their features. The remaining 24% were cancelled before release.[14]

## Life cycle

[Software development life cycle](/source/Software_development_life_cycle) describes the typical phases of the process of developing software.[15]

### Feasibility

The sources of ideas for software products are plentiful. These ideas can come from [market research](/source/Market_research), including the [demographics](/source/Demographics) of potential new customers, existing customers, sales prospects who rejected the product, other internal software development staff, or a creative third party. Ideas for software products are usually first evaluated by [marketing](/source/Marketing) personnel for economic feasibility, fit with existing channels of distribution, possible effects on existing product lines, required [features](/source/Software_feature), and fit with the company's marketing objectives. In the marketing evaluation phase, the cost and time assumptions are evaluated. [16] The feasibility analysis estimates the project's [return on investment](/source/Return_on_investment), its development cost and its timeframe. Based on this analysis, the company can make a business decision to invest in further development. [17] After deciding to develop the software, the company is focused on delivering the product at or below the estimated cost and time and with a high standard of quality (i.e., lack of bugs) and the desired functionality. Nevertheless, most software projects run late, and sometimes compromises are made in features or quality to meet a deadline. [18]

### Analysis

Software analysis begins with a [requirements analysis](/source/Requirements_analysis) to capture the business needs of the software.[19] Challenges for the identification of needs are that current or potential users may have different and incompatible needs, may not understand their own needs, and change their needs during the process of software development.[20] Ultimately, the result of analysis is a detailed specification for the product that developers can work from. Software analysts often [decompose](/source/Decomposition_(computer_science)) the project into smaller objects, components that can be reused for increased cost-effectiveness, efficiency, and reliability.[19] Decomposing the project may enable a [multi-threaded](/source/Multi-threaded) implementation that runs significantly faster on [multiprocessor](/source/Multiprocessor) computers.[21]

During the analysis and design phases of software development, [structured analysis](/source/Structured_analysis) is often used to break down the customer's requirements into pieces that can be implemented by software programmers.[22] The underlying logic of the program may be represented in [data-flow diagrams](/source/Data-flow_diagram), [data dictionaries](/source/Data_dictionary), [pseudocode](/source/Pseudocode), [state transition diagrams](/source/State_transition_diagram), and/or [entity relationship diagrams](/source/Entity_relationship_diagram).[23] If the project incorporates a piece of [legacy software](/source/Legacy_software) that has not been modeled, this software may be modeled to help ensure it is correctly incorporated with the newer software.[24]

### Design

Main article: [software design](/source/Software_design)

Design involves choices about the implementation of the software, such as which [programming languages](/source/Programming_language) and database software to use, or how the hardware and network communications will be organized. Design may be iterative with users consulted about their needs in a process of [trial and error](/source/Trial_and_error). Design often involves people who are expert in aspects such as [database design](/source/Database_design), screen architecture, and the performance of servers and other hardware.[19] Designers often attempt to find [patterns](/source/Software_design_patterns) in the software's functionality to spin off distinct modules that can be reused with [object-oriented programming](/source/Object-oriented_programming). An example of this is the [model–view–controller](/source/Model%E2%80%93view%E2%80%93controller), an interface between a [graphical user interface](/source/Graphical_user_interface) and the [backend](/source/Frontend_and_backend).[25]

### Programming

Main article: [computer programming](/source/Computer_programming)

The central feature of software development is creating and understanding the software that implements the desired functionality.[26] There are various strategies for writing the code. Cohesive software has various components that are independent from each other.[19] Coupling is the interrelation of different software components, which is viewed as undesirable because it increases the difficulty of [maintenance](/source/Software_maintenance).[27] Often, software programmers do not follow industry best practices, resulting in code that is inefficient, difficult to understand, or lacking [documentation](/source/Software_documentation) on its functionality.[28] These standards are especially likely to break down in the presence of deadlines.[29] As a result, testing, [debugging](/source/Debugging), and revising the code become much more difficult. [Code refactoring](/source/Code_refactoring) is a technique for restructuring existing code without changing its external behavior, often to improve its design, readability, or maintainability.[30]

Since the popularization of [large language models](/source/Large_language_models), [AI-assisted software development](/source/AI-assisted_software_development) has been used to augment human programming by having an AI handle syntax and write code[31].

### Testing

Main article: [software testing](/source/Software_testing)

Test coverage report in Clover

Testing is the process of ensuring that the code executes correctly and without errors. [Debugging](/source/Debugging) is performed by each software developer on their own code to confirm that the code does what it is intended to. In particular, it is crucial that the software executes on all inputs, even if the result is incorrect.[32] [Code reviews](/source/Code_review) by other developers are often used to scrutinize new code added to the project, and according to some estimates dramatically reduce the number of bugs persisting after testing is complete.[33] Once the code has been submitted, [quality assurance](/source/Quality_assurance) – a separate department of non-programmers for most large companies – test the accuracy of the entire software product. Testing activities may also occur throughout the software development life cycle, depending on the methodology used.[34] [Acceptance tests](/source/Acceptance_tests) derived from the original software requirements are a popular tool for this.[32] Quality testing also often includes stress and load checking (whether the software is robust to heavy levels of input or usage), [integration testing](/source/Integration_testing) (to ensure that the software is adequately integrated with other software), and [compatibility testing](/source/Compatibility_testing) (measuring the software's performance across different operating systems or browsers).[32] When tests are written before the code, this is called [test-driven development](/source/Test-driven_development).[35]

### Production

See also: [Software release life cycle](/source/Software_release_life_cycle)

Production is the phase in which software is deployed to the end user.[36] During production, the developer may create technical support resources for users[37][36] or a process for fixing bugs and errors that were not caught earlier. There might also be a return to earlier development phases if user needs changed or were misunderstood.[36]

## Workers

Further information: [Programmer](/source/Programmer) and [Software engineer](/source/Software_engineer)

Programmer at work

Software development is performed by **software developers**, usually working on a team. Efficient communications between team members is essential to success. This is more easily achieved if the team is small, used to working together, and located near each other.[38] Communications also help identify problems at an earlier stage of development and avoid duplicated effort. Many development projects avoid the risk of losing essential knowledge held by only one employee by ensuring that multiple workers are familiar with each component.[39] Software development involves professionals from various fields, not just software [programmers](/source/Programmer) but also product managers who set the strategy and [roadmap](/source/Technology_roadmap) for the product,[40] individuals specialized in testing, documentation writing, [graphic design](/source/Graphic_design), user support, [marketing](/source/Marketing), and fundraising. Although workers for proprietary software are paid, most contributors to [open-source software](/source/Open-source_software) are volunteers.[41] Alternately, they may be paid by companies whose [business model](/source/Business_model) does not involve selling the software, but something else – such as services and modifications to open source software.[42]

## Models and tools

### Computer-aided software engineering

[Computer-aided software engineering](/source/Computer-aided_software_engineering) (CASE) is tools for the partial [automation](/source/Automation) of software development.[43] CASE enables designers to sketch out the logic of a program, whether one to be written, or an already existing one to help integrate it with new code or [reverse engineer](/source/Reverse_engineer) it (for example, to change the [programming language](/source/Programming_language)).[44]

### Documentation

Main article: [Software documentation](/source/Software_documentation)

Documentation comes in two forms that are usually kept separate – one intended for software developers, and another made available to the end user to help them use the software.[45][46] Most developer documentation is in the form of [code comments](/source/Code_comment) for each file, [class](/source/Class_(programming)), and [method](/source/Method_(programming)) that cover the [application programming interface](/source/Application_programming_interface) (API)—how the piece of software can be accessed by another—and often implementation details.[47] This documentation is helpful for new developers to understand the project when they begin working on it.[48] In agile development, the documentation is often written at the same time as the code.[49] User documentation is more frequently written by [technical writers](/source/Technical_writing).[50]

### Effort estimation

Main article: [Software development effort estimation](/source/Software_development_effort_estimation)

Accurate estimation is crucial at the feasibility stage and in delivering the product on time and within budget. The process of generating estimations is often delegated by the [project manager](/source/Software_project_management).[51] Because the effort estimation is directly related to the size of the complete application, it is strongly influenced by the addition of features in the requirements—the more requirements, the higher the development cost. Aspects not related to functionality, such as the experience of the software developers and code reusability, are also essential to consider in estimation.[52] As of 2019[\[update\]](https://en.wikipedia.org/w/index.php?title=Software_development&action=edit), most of the tools for estimating the amount of time and resources for software development were designed for conventional applications and are not applicable to [web applications](/source/Web_application) or [mobile applications](/source/Mobile_application).[53]

### Integrated development environment

[Anjuta](/source/Anjuta), a C and C++ IDE for the GNOME environment

An [integrated development environment](/source/Integrated_development_environment) (IDE) supports software development with enhanced features compared to a simple [text editor](/source/Text_editor).[54] IDEs often include automated [compiling](/source/Compiling), [syntax highlighting](/source/Syntax_highlighting) of errors,[55] debugging assistance,[56] integration with [version control](/source/Version_control), and semi-automation of tests.[54]

### Version control

Main article: [Version control](/source/Version_control)

Version control is a popular way of managing changes made to the software. Whenever a new version is checked in, the software saves a [backup](/source/Backup) of all modified files. If multiple programmers are working on the software simultaneously, it manages the merging of their code changes. The software highlights cases where there is a conflict between two sets of changes and allows programmers to fix the conflict.[57]

### View model

The [TEAF](/source/TEAF) Matrix of Views and Perspectives

A [view model](/source/View_model) is a framework that provides the [viewpoints](/source/View_model) on the [system](/source/System) and its [environment](/source/Environment_(systems)), to be used in the [software development process](/source/Software_development_process). It is a graphical representation of the underlying semantics of a view.

The purpose of viewpoints and views is to enable human engineers to comprehend very [complex systems](/source/Complex_system) and to organize the elements of the problem around domains of [expertise](/source/Expertise). In the [engineering](/source/Engineering) of physically intensive systems, viewpoints often correspond to capabilities and responsibilities within the engineering organization.[58]

### Fitness functions

[Fitness functions](/source/Fitness_function) are automated and objective tests to ensure that the new developments do not deviate from the established constraints, checks and compliance controls.[59]

## Intellectual property

See also: [AI-assisted software development § Challenges](/source/AI-assisted_software_development#Challenges)

[Intellectual property](/source/Intellectual_property) can be an issue when developers integrate [open-source](/source/Open-source) code or libraries into a proprietary product, because most [open-source licenses](/source/Open-source_licenses) used for software require that modifications be released under the same license. As an alternative, developers may choose a proprietary alternative or write their own software module.[60]

## See also

- [List of AI-assisted software development tools](/source/List_of_AI-assisted_software_development_tools)

- [List of software developed at universities](/source/List_of_software_developed_at_universities)

- [AI-assisted software development](/source/AI-assisted_software_development)

## References

1. **[^](#cite_ref-FOOTNOTEDooley20171_1-0)** [Dooley 2017](#CITEREFDooley2017), p. 1.

1. **[^](#cite_ref-FOOTNOTEDooley201712_2-0)** [Dooley 2017](#CITEREFDooley2017), p. 12.

1. **[^](#cite_ref-3)** System Development Methodologies for Web-Enabled E-Business: A Customization Framework Linda V. Knight (DePaul University, USA), Theresa A. Steinbach (DePaul University, USA), and Vince Kellen (Blue Wolf, USA)

1. **[^](#cite_ref-FOOTNOTEDooley20178–9_4-0)** [Dooley 2017](#CITEREFDooley2017), pp. 8–9.

1. **[^](#cite_ref-FOOTNOTEDooley20179_5-0)** [Dooley 2017](#CITEREFDooley2017), p. 9.

1. ^ [***a***](#cite_ref-FOOTNOTELanger20162–3,_5–6_6-0) [***b***](#cite_ref-FOOTNOTELanger20162–3,_5–6_6-1) [Langer 2016](#CITEREFLanger2016), pp. 2–3, 5–6.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva20118_7-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 8.

1. **[^](#cite_ref-FOOTNOTEDooley201711_8-0)** [Dooley 2017](#CITEREFDooley2017), p. 11.

1. ^ [***a***](#cite_ref-FOOTNOTEDooley201713_9-0) [***b***](#cite_ref-FOOTNOTEDooley201713_9-1) [Dooley 2017](#CITEREFDooley2017), p. 13.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva201141–42_10-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), pp. 41–42.

1. ^ [***a***](#cite_ref-FOOTNOTEVishnu20191–2_11-0) [***b***](#cite_ref-FOOTNOTEVishnu20191–2_11-1) [Vishnu 2019](#CITEREFVishnu2019), pp. 1–2.

1. **[^](#cite_ref-12)** Laukkanen, Eero; Itkonen, Juha; Lassenius, Casper (2017). ["Problems, causes and solutions when adopting continuous delivery—A systematic literature review"](https://doi.org/10.1016%2Fj.infsof.2016.10.001). *Information and Software Technology*. **82**: 55–79. [doi](/source/Doi_(identifier)):[10.1016/j.infsof.2016.10.001](https://doi.org/10.1016%2Fj.infsof.2016.10.001).

1. **[^](#cite_ref-FOOTNOTEWintersManshreckWright202017_13-0)** [Winters, Manshreck & Wright 2020](#CITEREFWintersManshreckWright2020), p. 17.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva20116_14-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 6.

1. **[^](#cite_ref-FOOTNOTESaif201946–47_15-0)** [Saif 2019](#CITEREFSaif2019), pp. 46–47.

1. **[^](#cite_ref-FOOTNOTEMorris20011.10_16-0)** [Morris 2001](#CITEREFMorris2001), p. 1.10.

1. **[^](#cite_ref-FOOTNOTELanger20167_17-0)** [Langer 2016](#CITEREFLanger2016), p. 7.

1. **[^](#cite_ref-FOOTNOTEDooley20173,_8_18-0)** [Dooley 2017](#CITEREFDooley2017), pp. 3, 8.

1. ^ [***a***](#cite_ref-FOOTNOTELanger20168_19-0) [***b***](#cite_ref-FOOTNOTELanger20168_19-1) [***c***](#cite_ref-FOOTNOTELanger20168_19-2) [***d***](#cite_ref-FOOTNOTELanger20168_19-3) [Langer 2016](#CITEREFLanger2016), p. 8.

1. **[^](#cite_ref-FOOTNOTELanger20162–3_20-0)** [Langer 2016](#CITEREFLanger2016), pp. 2–3.

1. **[^](#cite_ref-FOOTNOTEDooley2017193–194_21-0)** [Dooley 2017](#CITEREFDooley2017), pp. 193–194.

1. **[^](#cite_ref-FOOTNOTELanger2016103–104_22-0)** [Langer 2016](#CITEREFLanger2016), pp. 103–104.

1. **[^](#cite_ref-FOOTNOTELanger2016117,_127,_131,_137,_141_23-0)** [Langer 2016](#CITEREFLanger2016), pp. 117, 127, 131, 137, 141.

1. **[^](#cite_ref-FOOTNOTELanger2016106_24-0)** [Langer 2016](#CITEREFLanger2016), p. 106.

1. **[^](#cite_ref-FOOTNOTEDooley2017142_25-0)** [Dooley 2017](#CITEREFDooley2017), p. 142.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva201131_26-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 31.

1. **[^](#cite_ref-FOOTNOTELanger20168–9_27-0)** [Langer 2016](#CITEREFLanger2016), pp. 8–9.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva201131–32_28-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), pp. 31–32.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva201134–35_29-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), pp. 34–35.

1. **[^](#cite_ref-30)** ["Refactoring Home Page"](http://refactoring.com/). *refactoring.com*. Retrieved 11 May 2026.

1. **[^](#cite_ref-31)** Cass, Stephen (23 September 2025). ["The Top Programming Languages 2025"](https://spectrum.ieee.org/top-programming-languages-2025). *IEEE Spectrum*. Retrieved 6 May 2026.

1. ^ [***a***](#cite_ref-FOOTNOTELanger20169_32-0) [***b***](#cite_ref-FOOTNOTELanger20169_32-1) [***c***](#cite_ref-FOOTNOTELanger20169_32-2) [Langer 2016](#CITEREFLanger2016), p. 9.

1. **[^](#cite_ref-FOOTNOTEDooley2017272_33-0)** [Dooley 2017](#CITEREFDooley2017), p. 272.

1. **[^](#cite_ref-34)** ["IEEE Standards Association"](https://standards.ieee.org/ieee/29119-2/7498/). *IEEE Standards Association*. Retrieved 11 May 2026.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva20119_35-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 9.

1. ^ [***a***](#cite_ref-FOOTNOTELanger201610_36-0) [***b***](#cite_ref-FOOTNOTELanger201610_36-1) [***c***](#cite_ref-FOOTNOTELanger201610_36-2) [Langer 2016](#CITEREFLanger2016), p. 10.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva201137_37-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 37.

1. **[^](#cite_ref-FOOTNOTEDooley20172_38-0)** [Dooley 2017](#CITEREFDooley2017), p. 2.

1. **[^](#cite_ref-FOOTNOTEWintersManshreckWright202030–31_39-0)** [Winters, Manshreck & Wright 2020](#CITEREFWintersManshreckWright2020), pp. 30–31.

1. **[^](#cite_ref-40)** ["What Does a Product Manager Do? And How to Become One"](https://www.coursera.org/articles/what-does-a-product-manager-do). *Coursera*. 21 January 2025. Retrieved 5 May 2025.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva20117_41-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 7.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva201114–15_42-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), pp. 14–15.

1. **[^](#cite_ref-FOOTNOTELanger201622_43-0)** [Langer 2016](#CITEREFLanger2016), p. 22.

1. **[^](#cite_ref-FOOTNOTELanger2016108–110,_206_44-0)** [Langer 2016](#CITEREFLanger2016), pp. 108–110, 206.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva2011243_45-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 243.

1. **[^](#cite_ref-FOOTNOTEWintersManshreckWright2020192_46-0)** [Winters, Manshreck & Wright 2020](#CITEREFWintersManshreckWright2020), p. 192.

1. **[^](#cite_ref-FOOTNOTEWintersManshreckWright2020193–195_47-0)** [Winters, Manshreck & Wright 2020](#CITEREFWintersManshreckWright2020), pp. 193–195.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva2011143_48-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 143.

1. **[^](#cite_ref-FOOTNOTETuckerMorellide_Silva2011144_49-0)** [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 144.

1. **[^](#cite_ref-FOOTNOTEWintersManshreckWright2020204_50-0)** [Winters, Manshreck & Wright 2020](#CITEREFWintersManshreckWright2020), p. 204.

1. **[^](#cite_ref-FOOTNOTESaif201950–51_51-0)** [Saif 2019](#CITEREFSaif2019), pp. 50–51.

1. **[^](#cite_ref-FOOTNOTESaif201952–53_52-0)** [Saif 2019](#CITEREFSaif2019), pp. 52–53.

1. **[^](#cite_ref-FOOTNOTESaif201945_53-0)** [Saif 2019](#CITEREFSaif2019), p. 45.

1. ^ [***a***](#cite_ref-FOOTNOTETuckerMorellide_Silva201168_54-0) [***b***](#cite_ref-FOOTNOTETuckerMorellide_Silva201168_54-1) [Tucker, Morelli & de Silva 2011](#CITEREFTuckerMorellide_Silva2011), p. 68.

1. **[^](#cite_ref-FOOTNOTEDooley2017236_55-0)** [Dooley 2017](#CITEREFDooley2017), p. 236.

1. **[^](#cite_ref-FOOTNOTEDooley2017239_56-0)** [Dooley 2017](#CITEREFDooley2017), p. 239.

1. **[^](#cite_ref-FOOTNOTEDooley2017246–247_57-0)** [Dooley 2017](#CITEREFDooley2017), pp. 246–247.

1. **[^](#cite_ref-58)** Edward J. Barkmeyer (February 2003). ["INSTIR 6928 - Concepts for Automating Systems Integration"](https://web.archive.org/web/20170125115826/http://www.mel.nist.gov/msidlibrary/doc/AMIS-Concepts.pdf) (PDF). NIST. Archived from [the original](http://www.mel.nist.gov/msidlibrary/doc/AMIS-Concepts.pdf) (PDF) on 25 January 2017. Retrieved 21 May 2026.

1. **[^](#cite_ref-59)** *Fundamentals of Software Architecture: An Engineering Approach*. O'Reilly Media. 2020. [ISBN](/source/ISBN_(identifier)) [978-1492043454](https://en.wikipedia.org/wiki/Special:BookSources/978-1492043454).

1. **[^](#cite_ref-FOOTNOTELanger201644–45_60-0)** [Langer 2016](#CITEREFLanger2016), pp. 44–45.

## Further reading

- Conde, Dan (2002). *Software Product Management: Managing Software Development from Idea to Product to Marketing to Sales*. Aspatore Books. [ISBN](/source/ISBN_(identifier)) [1587622025](https://en.wikipedia.org/wiki/Special:BookSources/1587622025).

- Davis, A. M. (2005). *Just enough requirements management: Where software development meets marketing*. Dorset House Publishing Company, Incorporated. [ISBN](/source/ISBN_(identifier)) [0932633641](https://en.wikipedia.org/wiki/Special:BookSources/0932633641).

- Dooley, John F. (2017). *Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring*. Apress. [ISBN](/source/ISBN_(identifier)) [978-1-4842-3153-1](https://en.wikipedia.org/wiki/Special:BookSources/978-1-4842-3153-1).

- Kit, Edward (1992). [*Software Testing in The Real World*](https://archive.org/details/softwaretestingi00kite). Addison-Wesley Professional. [ISBN](/source/ISBN_(identifier)) [0201877562](https://en.wikipedia.org/wiki/Special:BookSources/0201877562).

- Hasted, Edward (2005). *Software That Sells: A Practical Guide to Developing and Marketing Your Software Project*. Wiley Publishing. [ISBN](/source/ISBN_(identifier)) [0764597833](https://en.wikipedia.org/wiki/Special:BookSources/0764597833).

- Hohmann, Luke (2003). *Beyond Software Architecture: Creating and Sustaining Winning Solutions*. Addison-Wesley Professional. [ISBN](/source/ISBN_(identifier)) [0201775948](https://en.wikipedia.org/wiki/Special:BookSources/0201775948).

- Horch, John W. (March 1995). "Two Orientations On How To Work With Objects". *[IEEE Software](/source/IEEE_Software)*. **12** (2): 117–118. [ProQuest](/source/ProQuest) [215832531](https://www.proquest.com/docview/215832531).

- Langer, Arthur M. (2016). *Guide to Software Development: Designing and Managing the Life Cycle*. Springer. [ISBN](/source/ISBN_(identifier)) [978-1-4471-6799-0](https://en.wikipedia.org/wiki/Special:BookSources/978-1-4471-6799-0).

- McCarthy, Jim (1995). [*Dynamics of Software Development*](https://archive.org/details/dynamicsofsoftwa00mcca). Microsoft Press. [ISBN](/source/ISBN_(identifier)) [1556158238](https://en.wikipedia.org/wiki/Special:BookSources/1556158238).

- Morris, Joseph M. (2001). *Software industry accounting* (2nd ed.). [John Wiley & Sons](/source/John_Wiley_%26_Sons). [OCLC](/source/OCLC_(identifier)) [53863959](https://search.worldcat.org/oclc/53863959).

- Rittinghouse, John (2003). *Managing Software Deliverables: A Software Development Management Methodology*. Digital Press. [ISBN](/source/ISBN_(identifier)) [155558313X](https://en.wikipedia.org/wiki/Special:BookSources/155558313X).

- Saif, Syed Mohsin (2019). "Software Effort Estimation for Successful Software Application Development". In Vishnu, Pendyala (ed.). *Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities*. [IGI Global](/source/IGI_Global). pp. 45–97. [ISBN](/source/ISBN_(identifier)) [978-1-7998-1865-6](https://en.wikipedia.org/wiki/Special:BookSources/978-1-7998-1865-6).

- Tucker, Allen; Morelli, Ralph; de Silva, Chamindra (2011). *Software Development: An Open Source Approach*. CRC Press. [ISBN](/source/ISBN_(identifier)) [978-1-4398-8460-7](https://en.wikipedia.org/wiki/Special:BookSources/978-1-4398-8460-7).

- Vishnu, Pendyala (2019). "Evolution of Integration, Build, Test, and Release Engineering Into DevOps and to DevSecOps". In Vishnu, Pendyala (ed.). *Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities*. IGI Global. pp. 1–20. [ISBN](/source/ISBN_(identifier)) [978-1-7998-1865-6](https://en.wikipedia.org/wiki/Special:BookSources/978-1-7998-1865-6).

- Wiegers, Karl E. (2005). *More About Software Requirements: Thorny Issues and Practical Advice*. Microsoft Press. [ISBN](/source/ISBN_(identifier)) [0735622671](https://en.wikipedia.org/wiki/Special:BookSources/0735622671).

- Winters, Titus; Manshreck, Tom; Wright, Hyrum (2020). *Software Engineering at Google: Lessons Learned from Programming Over Time*. O'Reilly Media, Inc. [ISBN](/source/ISBN_(identifier)) [978-1-4920-8276-7](https://en.wikipedia.org/wiki/Special:BookSources/978-1-4920-8276-7).

- Wysocki, Robert K. (2006). [*Effective Software Project Management*](https://archive.org/details/effectivesoftwar0000wyso). Wiley. [ISBN](/source/ISBN_(identifier)) [0764596365](https://en.wikipedia.org/wiki/Special:BookSources/0764596365).

## External links

- Media related to [Software development](https://commons.wikimedia.org/wiki/Category:Software_development) at Wikimedia Commons

v t e Software engineering Fields Computer programming DevOps Empirical software engineering Experimental software engineering Formal methods Requirements engineering Search-based software engineering Site reliability engineering Social software engineering Software deployment Software design Software maintenance Software testing Systems analysis Concepts Abstraction CI/CD Compatibility Backward compatibility Compatibility layer Compatibility mode Forward compatibility Software incompatibility Component-based software engineering Data modeling Enterprise architecture Functional specification Modeling language Programming paradigm Software Software archaeology Software architecture Software configuration management Software development process/methodology Software quality Software quality assurance Software system Software verification and validation Structured analysis Essential analysis Orientations Agile Aspect-oriented Object orientation Ontology SDLC Service orientation Models Developmental Agile EUP Executable UML Incremental model Iterative model Prototype model RAD Scrum Spiral model UP V-model Waterfall model XP Model-driven engineering Round-trip engineering Other CMMI Data model ER model Function model Information model Metamodeling Object model SPICE Systems model View model Languages IDEF SysML UML USL Related fields Computer engineering Computer science Information science Project management Risk management Systems engineering Category Commons

v t e Computer science This template follows roughly the 2012 ACM Computing Classification System Hardware Printed circuit board Peripheral Integrated circuit Very-large-scale integration System on a chip (SoC) Energy consumption (green computing) Electronic design automation Hardware acceleration Processor Size – Form Systems organization Computer architecture Computational complexity Dependability Embedded system Real-time computing Cyber-physical system Fault tolerance Wireless sensor network Networks Network architecture Network protocol Network components Network scheduler Network performance evaluation Network service Software organization Interpreter Middleware Virtual machine Operating system Software quality Software notations, tools Programming paradigm Programming language Compiler Domain-specific language Modeling language Software framework Integrated development environment Software configuration management Software library Software repository Software development Control flow Software development process Requirements analysis Software design Software construction Software deployment Software engineering Software maintenance Programming team Open source model Theory of computing Model of computation Stochastic Formal language Automata theory Computability theory Computational complexity theory Logic Semantics Algorithms Algorithm design Analysis of algorithms Algorithmic efficiency Randomized algorithm Computational geometry Mathematics of computing Discrete mathematics Probability Statistics Mathematical software Information theory Mathematical analysis Numerical analysis Theoretical computer science Computational problem Information systems Database management Information storage Enterprise information Social information Geographic information Decision support Process control Multimedia information Data mining Digital library Computing platform Digital marketing World Wide Web Information retrieval Security Cryptography Formal methods Security hacker Security services Intrusion detection system Hardware security Network security Information security Application security Human- centered computing Accessibility Extended reality augmented virtual Human–computer interaction Interaction design Mobile computing Social computing Ubiquitous computing Visualization Concurrency Concurrent computing Parallel computing Distributed computing Multithreading Multiprocessing Artificial intelligence Computational intelligence Natural language processing Knowledge representation and reasoning Computer vision Automated planning and scheduling Search methodology Control method Philosophy of Distributed Machine learning Supervised Unsupervised Reinforcement Multi-task Cross-validation Graphics Animation Rendering Photograph manipulation Graphics processing unit Image compression Solid modeling Applied computing Quantum computing E-commerce Enterprise software Computational mathematics Computational physics Computational chemistry Computational biology Computational social science Computational engineering Differentiable computing Computational healthcare Digital art Electronic publishing Cyberwarfare Electronic voting Video games Word processing Operations research Educational technology Document management Outline Glossaries Category

Authority control databases International GND National United States Japan Spain Israel Other Yale LUX

---
Adapted from the Wikipedia article [Software development](https://en.wikipedia.org/wiki/Software_development) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Software_development?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
