Software development

**Software development** is the process of creating a computer software. It includes the software release life cycle of preparing a design, coding the program, and fixing the bugs. The final goal is software release of a product that serves the wishes of users.

Software product is usually a result of research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities.

There are 3 main goals of software development:

# to meet specific needs of a specific client/business;
# to meet a need of some set of potential users;
# for personal use.

## Process 
A software development process (model, methodology) is a system that is used to structure, plan, and control the process of developing information systems. Each model is defferent, more or less structured and is considered to be suitable to only some kinds of projects.

There are several stages of software development:

* Analyzing the problem
* Market research
* Gathering requirements for the proposed software
* Devising a plan or design for the software
* Implementation (coding) of the software
* Testing the software
* Deployment
* Maintenance and bug fixing

## Activities 
### Understanding the need 
There are different sources of ideas for software products like market research. The next step is market evaluation. It includes a check of cost and time assumptions, economic feasibility, fit with existing channels distribution, effects on existing product lines, required features, fit with the company's marketing objectives.

This process is also connected with non-technical activities like human resources, risk management, intellectual property, budgeting, crisis management, etc.

### Planning 
An important task in creating a software program is understanding the requirements. The software engineers must accept the client's idea and adapt it to the working process.

### Designing 
After establishing the requirements, the engineers start creating a software design document. Design of the software means the high-level design of the main modules with a full picture of how the parts fit together. The language, operating system, and hardware components should be clear at this stage.

### Implementation, testing and documenting 
There are 3 next processes which are combined:

# implementation — programming the code for the project.
# testing — looking for defects
# documenting — making documents of the inner design of software, API can be also included

### Deployment and maintenance 
The deployment includes installation, customization, testing, and possibly a longer period of evaluation.

Software training and support are important because software is only effective if it is used rightly.

Maintaining and improving software is the stage to cope with new faults or requirements, it usually takes a lot of time and effort.

## Modern Development Methods 
As technology changes, the way people make software also changes. Here are some of the most common modern methods:

### Agile Development 
Instead of planning everything at the start, **Agile** development breaks the work into small parts called "sprints." Every few weeks, the team shows a working version of the software to the user. This helps the team fix problems quickly and change the plan if needed.

### Open Source Development 
Many pieces of software are created by volunteers from all over the world. This is called **Open Source**. Anyone can see the code, fix bugs, or add new features. Famous examples include the Linux operating system and the Firefox web browser.

### Cloud Computing 
Today, much software is not kept on a single computer. Instead, it runs on the **Cloud**. This means the software lives on powerful servers on the internet. Users can access it from anywhere using a web browser.

### Artificial Intelligence (AI) in Coding 
In recent years, developers have started using **AI tools** to help them write code faster. These tools can suggest how to finish a sentence of code or find mistakes automatically. However, humans still need to check the work to make sure it is safe.

## References
*