After design, software development begins with requirements analysis. The output of requirements analysis is detailed specifications used to engineer a solution.
Software development is used frequently to meet the needs of clients or businesses, potential users, or personal use. When this process systematically employs the principles of engineering, it is known as software engineering. There are many approaches to software engineering but most processes include research, requirements gathering, problem analysis, planning, implementing, deploying, and maintaining the software. These stages are collectively known as the software development life cycle (SDLC).
There are many approaches to SDLC. Some are carried out one after another, known as a waterfall approach, while others are repeated over many cycles, known as an iterative, incremental, or agile approach. Agile development usually includes less planning and documentation and more time coding and developing. This approach also promotes continuous testing. Waterfall software development requires more detailed planning and risk assessment before coding begins. This process seeks to avoid design changes later in the project. There are advantages and disadvantages to different methodologies, and the best approach often depends on the type of problem.