Software Development, Steps in the software development process
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing, involving the creation and maintenance of applications, frameworks, or other software components. Software development involves writing and maintaining source code, but in a broader sense, it includes all processes, usually planned and structured, from the conception of the desired software to its final manifestation.  Software development also includes research, new development, prototyping, modification, reuse, redesign, maintenance, or other activities that produce software products.
There are many sources of ideas for software products. These ideas can come from market research, including demographics of potential new customers, existing customers, sales prospects who reject products, other in-house software developers, or creative third parties. Marketers typically evaluate a software product idea for its economic viability, suitability for existing channel distribution, likely impact on existing product lines, desired functionality, and fit with the company’s marketing goals. During the marketing evaluation phase, cost and timing assumptions are evaluated. Decide early in Phase 1 if the project should be advanced further based on more detailed information from marketing and developers.
An important task in creating software is requirements analysis. Clients often have an abstract idea of the result they want, but no idea what the software should do. Skilled and experienced software engineers identify incomplete, ambiguous, or even contradictory requirements at this point. Demonstrating live code frequently may help reduce the risk of incorrect requirements.
Although a lot of effort is put into ensuring completeness and consistency of requirements during the requirements phase, this rarely happens; let the software design phase be the most influential when it comes to minimizing the impact of new or changing requirements stage. Fluctuations in requirements are challenging because they can affect future or development work already in progress.
What is software development?
Software development refers to a group of computer science activities devoted to the process of creating, designing, deploying, and supporting software.
The software itself is a set of instructions, or programs, that tell the computer what to do. It is hardware independent and makes computers programmable. There are three basic types:
System software provides core functions such as operating systems, disk management, utilities, hardware management, and other operational necessities.
Programming software provides programmers with tools such as text editors, compilers, linkers, debuggers, and other tools for creating code.
Applications (or apps) that help users perform tasks. Office productivity suites, data management software, media players, and security programs are examples. App also refers to web and mobile applications, such as those used to shop on Amazon.com, socialize with Facebook, or post pictures on Instagram.
A fourth possible type is embedded software. Embedded systems software is used to control machines and devices that are not normally considered computers – telecommunications networks, automobiles, industrial robots, etc. These devices and their software can be connected as part of the Internet of Things (IoT).
Software development is mostly carried out by programmers, software engineers, and software developers. These roles interact and overlap, and the dynamics between them vary by development department and community.
Programmers or coders write source code to program computers to perform specific tasks, such as merging databases, processing online orders, routing communications, conducting searches, or displaying text and graphics. Programmers typically interpret instructions from software developers and engineers and execute them using programming languages such as C++ or Java.
Software engineers use modeling languages and other tools to design solutions that can often be applied to problems in a general way, rather than just solving specific instances or clients. Software engineering solutions follow the scientific method and must function in the real world, like a bridge or an elevator. As products get smarter with the addition of microprocessors, sensors, and software, their responsibilities grow. Not only are more and more products relying on software for market differentiation, but its software development must be coordinated with the product’s electromechanical development efforts.
A software developer’s role is less formal than that of an engineer and can be intimately involved in a specific project area — including writing code. At the same time, they drive the entire software development lifecycle—including working with cross-functional teams to translate requirements into features, managing development teams and processes, and conducting software testing and maintenance.
Steps in the software development process
Developing software typically involves the following steps:
Choose a method to establish a framework for the application software development steps. It describes the overall workflow or roadmap of the project. Methodologies can include Agile development, DevOps, Rapid Application Development (RAD), Scaled Agile Framework (SAFe), Waterfall, etc. (See Glossary.)
Gather requirements to understand and document the needs of users and other stakeholders.
Choose or build an architecture as the underlying structure on which the software runs.
A design is developed around a solution to the problem posed by the requirement, usually involving process models and storyboards.
Build models using modeling tools that enable early validation, prototyping, and simulation of designs using modeling languages such as SysML or UML.
Build your code using an appropriate programming language. Peer and team reviews are involved to eliminate issues early and produce high-quality software faster.
As part of software design and coding, testing is performed using pre-planned scenarios, and performance testing is performed to simulate load testing of the application.
Manage configurations and defects to understand all software artifacts (requirements, design, code, tests) and build different versions of software. Establish quality assurance priorities and release criteria to resolve and track defects.
Deploy software for use and respond to and resolve user issues.
Migrate data from existing applications or data sources to new or updated software, if necessary.
Manage and measure projects to maintain quality and delivery throughout the application lifecycle, and evaluate development processes using models such as the Capability Maturity Model (CMM).
The steps of this process fit into Application Lifecycle Management. The IBM Engineering Management solution is a superset of ALM that supports the management of concurrent mechanical, electrical, and software development.