> For the complete documentation index, see [llms.txt](https://dotnetweb30-ke.gitbook.io/ke/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dotnetweb30-ke.gitbook.io/ke/engineering-management/process-planning-sdlc/software-development-process.md).

# 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.
