# Software development process

{% hint style="success" %}
**Software development process** (or **SDLC** - **software development life cycle**) is the process of dividing software development work into distinct phases to improve design, product management, and project management. The methodology may include the pre-definition of specific deliverables and artifacts that are created and completed by a project team to develop or maintain an application.
{% endhint %}

Most modern development processes can be vaguely described as agile. Other methodologies include **waterfall**, **prototyping**\*, **iterative** and **incremental development**, **spiral development**, **rapid application development**, and **extreme programming**.

### Software development activities

1. **Identification of need.** The sources of ideas for software products: _market research_ (new customers/existing customers), _sales prospects_ who rejected the product, _required features_.
2. **Planning.** Customers typically have an abstract idea of what they want as an end result but do not know what software should do. So, an engineer should: _extract the requirements_ and perform an _requirements analysis_.
3. **Design.** Once the requirements are established, the design of the software can be established in a software design document (IEEE 1016). On this stage should be done _high-level design_ of main modules for overall picture (architecture diagram, block diagram) and should be already chosen _programming_ _language_, _operating system_, and _hardware components._ Also it may include _detailed low-level design_ with prototyping as proof-of-concept.
4. **Development & Implementation.** Implementation is the part of the process where software engineers actually program the code for the project.
5. **Testing.** This part of the process ensures that defects are recognized as soon as possible.
6. **Documenting.** Documenting the internal design of software for the purpose of future maintenance and enhancement. This may also include the writing of an API, be it external or internal.
7. **Deployment.** This may involve installation, customization (such as by setting parameters to the customer's values).
8. **Maintenance.** Enhancing software to cope with newly discovered faults or requirements, fixing reported issues, keeping the software running.
