The Software Development Process: A Complete Guide
The early stages of developing new software can feel a little overwhelming.
Fortunately, a variety of systems have been established that can make the process much more manageable.
This guide provides an overview of the software development processes and methodologies, from Agile to Waterfall. Whether you’re building software in-house or outsourcing to a custom software development company, this guide gives you a basic understanding of the phases and methodologies involved in creating great software.
The Rise of Agile and DevOps
Software development has evolved over the last decade, giving rise to new methodologies that are now considered mainstream.
These new methods of creating software place an emphasis on speed and efficiency.
Describing the state of the software industry in 2005, Martin Fowler, Chief Scientist of ThoughtWorks, wrote:
“Most software development is a chaotic activity, often characterized by the phrase ‘code and fix.’ The software is written without much of an underlying plan, and the design of the system is cobbled together from many short-term decisions. This works pretty well if the system is small, but as the system grows, it becomes increasingly difficult to add new features. Furthermore, bugs have become increasingly prevalent and increasingly difficult to fix. A typical sign of such a system is a long test phase after the system is ‘feature complete.’ Such a long test phase plays havoc with schedules, as testing and debugging is impossible to schedule.”
Two primary philosophies form the foundation of modern software development: the Manifesto for Agile Software Development and the development of DevOps infrastructures.
The primary goal of Agile is transforming the development cycle into a collaborative process. Agile promotes flexibility, streamlines communications, and eliminates confusion.
DevOps focuses on developing and improving products faster than competing organizations. The operations and development teams work together in a DevOps structure, thereby eliminating most breakdowns in communications.
DevOps and Agile philosophies share fundamental goals, but use slightly different tactics in achieving them. Both approaches promote the use of automation.
Software Development Phases
Though there is no “one method” for developing software, development typically goes through a series of standardized steps or phases, sometimes referred to as a software development lifecycle. Following these steps can help assure the quality of the software.
The use of a standardized system streamlines the development process by minimizing confusion and maximizing efficiency. The basic steps for a standardized software development system are:
Understanding the problem. To develop a fully functional software solution, it is essential to fully understand the problem it solves and any additional requirements the organization may have. This aspect of software development is considered by many to be the most crucial part of the development process.
Planning. The development team organizes and lays out a plan for developing the software. As part of the planning phase, the team estimates the costs and resources needed. This step often gets merged with the feasibility analysis.
Feasibility analysis. In this step, the team determines the quickest way to implement the project with the least risk and expense. This step also details the risks involved and provides sub-plans for softening those risks. Determining feasibility helps ensure you don’t end up investing in a project you can’t complete.
Design and prototyping. Because design plays a vital role in attracting potential customers, the goal is to make the design user-friendly. As a result, users should easily be able to achieve the best outcomes. Software designers often build a prototype at this stage to allow the team and project stakeholders to get a better feel for the design. Prototypes can sometimes be the first version of the product, capable of further development after release.
Note: Running into snags and unforeseen problems in the design and prototyping stage almost guarantees cost overruns—and may result in a collapse of the project.
Coding. Once the product design is finalized, developers begin writing the code for the software. If they’re following an Agile process, this work happens iteratively in “sprints.” The goal is to have a working version of the software at the end of each sprint.
Software testing. New software typically undergoes a variety of testing phases before being implemented or sold to a customer. In this phase, the quality assurance (QA) team finds defects and sends them back to the developers to be fixed.
Maintenance and support. After the software is released, most development organizations define the period of time that they will support and maintain it. If defects (or “bugs”) occur, the support team fixes them reactively. By contrast, maintenance proactively develops additional features or triages low-priority defects that don’t negatively impact the software design and user experience.
Five Popular Software Development Processes
Factors such as the project’s size, the team’s strengths and weaknesses, and other issues will help determine the best development process for the project. All organizations set up their software development processes in different ways, and each project is handled differently, as well. Despite these differences, nearly all organizations develop software using a variation of one of the following five systems (or a combination of them).
Waterfall
The Waterfall development process is one of the oldest and most established models used for building software. Criticized for its lack of flexibility, Waterfall is often described as a “plan-driven” process. It requires teams to know all the work that needs to be done, in the correct sequence, before development begins.
Because of its rigid planning structure, most teams avoid using Waterfall when radical change is possible. The Waterfall process works best when goals and requirements do not change during development.
The Waterfall development process doesn’t support testing new products, addressing user feedback mid-stream, or a dynamic development process. However, techniques such as continuous integration and deployment can eliminate many of these issues.
Agile and Scrum
The Agile software development processes (like Scrum, its most popular methodology) use a repetitive and dynamic approach. Unlike Waterfall’s tightly controlled sequential flow, Agile uses cross-functional teams that work in sprints.
Sprints focus the team’s work on one project for a defined period—usually two weeks, but sometimes up to two months. The goal of each sprint is to build and release usable software to customers for feedback.
As stated in the Agile Manifesto, the creators of Agile placed more value on:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
This list of priorities drew early criticism of Agile software development processes, to which the Agile Alliance’s Jim Highsmith responded:
“The Agile movement is not anti-methodology. Many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modeling, but not to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely-used tomes. We plan, but recognize the limits of planning in a turbulent environment.”
Agile allows organizations to test theories and complete work quickly, without a significant investment. Testing can occur after each sprint, making it easier to detect bugs or return to an earlier version if a problem develops.
While Agile has the potential to improve software quality and increase the speed of development, the reality is that few (if any) organizations practice a pure Agile methodology. Instead, most teams use some form of Agile hybrid, using only the parts of Agile that make sense to them.
The downside of Agile in practice is that the methodology’s dynamic nature sometimes causes projects to take longer than anticipated and go over budget.
For more information about Agile, read Taazaa’s white paper, The (Almost) Complete Guide to Agile Project Management.
Incremental and Iterative
Incremental and iterative software development processes offer a middle ground between the rigid planning of the Waterfall process and the flexibility of Agile.
Both processes apply the concept of creating small amounts of software and then presenting them for feedback to different users. However, they differ dramatically in what is created.
In an Incremental process, each “incremental” improvement of the product adds one new function or feature. In essence, it is similar to creating an overall plan, developing a minimum viable product (MVP) with just the core functionality, and then using feedback for developing additional features. With an incremental process, developers use early feedback on core features to make improvements.
In an Iterative process, the initial version is a simplified implementation that progressively becomes more complex. Each iteration adds more features until the final version is complete. With an iterative approach, users get an early view of the product and then provide feedback to the development team.
V-Shaped
The V-shaped process is a spin-off of the classic Waterfall method. In Waterfall, developers work sequentially during the development process, saving all testing for the end of the project.
The V-shaped method includes a rigid validation and verification step following each phase of the development process. In that step, requirements are tested before development proceeds.
This method functions well for teams working on small projects with a tight focus. Instead of risking following a plan that finds problems at the very end of development, it offers opportunities to test during the development process. Nevertheless, V-shaped is still a “plan-driven” process and probably won’t work for teams wanting greater flexibility.
Spiral
The Spiral method combines a few software development processes and methodologies. It merges the V-shaped focus on testing with the iterative qualities of Incremental, Iterative, and Agile. Once the team develops a plan for a specific iteration, they perform an in-depth risk analysis to identify errors or areas of risk.
For example, let’s say the product has a feature that customers haven’t used or tested. The untested feature would first be developed as a prototype and provided to users for feedback. Once the team gathers and reviews the feedback, the feature gets fully developed.
As each new feature is completed, the development costs and product functionality expands further outward (like a spiral).
The Spiral process reduces risk. For example, if a large or critical project requires significant documentation and validation during development, Spiral might be the best choice. This process can also be useful when dealing with a customer who isn’t entirely certain about their desired requirements and is comfortable with extensive edits during the software’s development.
Conclusion
Despite the variety of software development processes and methodologies out there, the basic phases remain about the same. It’s how they’re implemented that marks the difference between Waterfall, Incremental, Iterative, V-shaped, Spiral, and Agile software development processes.
In most cases, your development team (or the custom software development company you partner with) looks at the project’s needs and recommends a methodology. They may even have their own hybrid process that they prefer.
If you and your team struggle to decide on or implement a methodology, Taazaa’s experienced consultants can help. Contact us today!
About Taazaa
Taazaa means “fresh.” Think new. Not canned. Tailored to you. We work with like-minded people and organizations looking for a fresh experience around creating and unleashing great software.
Since 2007, Taazaa has helped hundreds of mission-minded organizations stay relevant in a world of relentless change. Leveraging custom software solutions and emerging technology, we follow design-based development practices that promote rapid delivery and a tailored fit to your business.
We’re agile. We’re high-empathy and low-friction. And we make great software.