Waterfall vs. Agile Development
In software development, various methodologies exist to advance projects efficiently. Among the most common are “waterfall development” and “agile development”.
In embedded software development, it is necessary to choose among these development methodologies according to product characteristics and project requirements.
For those aiming to become embedded software engineers, this article explains the basics of waterfall development and agile development, as well as their respective characteristics.
- What is Waterfall Development?
- Agile Development Is Characterized by Being “Fast” and “Agile”
- How to Choose the Best Development Methodology for Embedded Software
- Summary
What is Waterfall Development?
Waterfall development is one of the longest-established and most fundamental development methodologies in software development. It is said to be based on a 1970 paper by computer scientist Winston W. Royce, and has since been adopted worldwide for many years. The name “Waterfall” comes from the fact that this development methodology proceeds in one direction from upstream to downstream, like a waterfall.
Basic Flow of Waterfall Development
In waterfall development, the entire development project is divided into clear phases, and each phase is completed in order. The general phases are as follows.
Requirements Definition → Basic Design → Detailed Design → Implementation (Programming) → Unit Testing → Integration Testing → System Testing → Operation and Maintenance
Each phase is characterized by proceeding to the next only after the previous phase is completely finished. Basic design does not proceed until requirements definition is 100% complete, and detailed design does not proceed until basic design is complete. Just as water from a waterfall does not flow back up, waterfall development basically does not assume returning to a previous phase.
V-model in Embedded Development
In embedded software development, the “V-model,” which is an improved version of waterfall development, is often adopted. The V-model diagrammatically represents the relationship between software development phases and their corresponding testing phases in the shape of a “V” as shown below.
The left, descending side of the “V” represents the development phases (Requirements Definition → Basic Design → Detailed Design → Program Design), and the right, ascending side represents the testing phases (Unit Testing → Integration Testing → System Testing → Operational Testing). Because embedded software must work closely with hardware, it needs frequent verification at every stage, and the V-model provides this by pairing each design stage with its own test phase.
Advantages of Waterfall Development
Waterfall development has the following advantages.
1. Easy to foresee the entire project
Since the overall requirements are defined at the start of the project, the required development period, necessary personnel, and budget can be calculated in advance. In embedded development, coordination with the hardware manufacturing schedule is often required, so having a clear overall schedule in advance is a major advantage.
2. Easy to manage progress
Since each phase is clearly separated, it is easy to understand which phase the project is currently in and what percentage of the whole has been completed. For project managers, this can be said to be an easy methodology for managing the status of the entire team.
3. Easy to ensure quality
Since deliverables (such as specifications and design documents) are created in each phase and strictly reviewed before proceeding to the next phase, it is easier to build a system according to the specifications. Especially in embedded software, since there are many products involving human lives, such as automobiles and medical devices, it is important to perform detailed design in advance to ensure quality.
4. Easy to hand over
Because detailed documentation is created at each step, even if team members change during development, anyone can understand the work of their predecessor by reading the documentation.
Disadvantages of Waterfall Development
On the other hand, waterfall development also has disadvantages.
The biggest disadvantage is that it is difficult to respond to specification changes. If requirements need to be changed during development, it is necessary to go back to already completed phases and redo them. This is called “rework,” and when rework occurs, it has a major impact, such as extending the development period and increasing costs.
In addition, because the number of functions has increased significantly in recent years, deciding all of the specifications at the beginning of development can take a very long time, or is increasingly difficult in the first place. In such situations, it is sometimes practically difficult to proceed with waterfall development.
Another drawback is that working software takes a long time to appear. Since the software is released only after all phases are completed, the actual operation can only be confirmed at the final stage of the project. Therefore, problems such as “it does not work as expected” or “it is different from the expected specifications or operation” may not surface until additional testing is performed.
In embedded development, it is not uncommon for unexpected problems to be found during testing on actual machines due to hardware specification changes or other reasons. In such cases, there is a challenge that it is difficult to respond flexibly.
Agile Development Is Characterized by Being “Fast” and Flexible
Agile development emerged from discussions among 17 engineers and programmers who gathered in Utah, USA, in 2001. As a result of those discussions, the “Manifesto for Agile Software Development” was compiled, which has become the official definition of agile development.
“Agile” means “quick” or “nimble,” and it is a development methodology that emphasizes the ability to respond quickly to rapidly changing environments. It was also designed to solve the challenges of waterfall development. Therefore, it has characteristics where the advantages and disadvantages of the waterfall model are reversed.
Basic Flow of Agile Development
In agile development, instead of finalizing strict specifications from the beginning, development starts after compiling rough specifications and requirements. Then, a series of development phases of “planning → design → implementation → testing → release” is repeated in small cycles for each function.
This short-term development cycle is called an “iteration” or “sprint,” and is usually set for a period of about one to two weeks. At the end of each iteration, working functions are released to receive feedback from customers and users. Based on that feedback, improvements and new functions are added in the next iteration, taking an approach that gradually increases the completeness of the entire system.
Advantages of Agile Development
Agile development has the following advantages.
1. Flexible response to specification changes
Because development is repeated in small cycles, priorities and requirements can be reviewed for each iteration. Even if there are market changes or new requests from customers, they can be addressed in the next iteration.
2. Ability to check working software from an early stage
Since working functions are released for each iteration, users can check the actual product and provide feedback from the early stages of development. This reduces the risk of the final deliverable deviating significantly from user expectations.
3. Ability to proceed with development while collaborating as an entire team
In agile development, all development members are involved in all phases from design to implementation and testing. This promotes multi-skilling among members, leading to improved productivity for the entire team.
Disadvantages of Agile Development
On the other hand, agile development also has disadvantages.
The biggest challenge is that it is difficult to estimate the overall schedule and budget. Since strict specifications are not decided from the beginning, it is difficult to accurately predict how much time or cost the entire project will take. This can be a bottleneck, especially in projects with strictly fixed deadlines and budgets.
There is also a challenge that the direction of development is prone to shifting. While it allows for flexible responses, if clear goals are not set, development can lose its way. To make a project successful, an experienced project manager and high communication skills of the entire team are required. It can be said to be a methodology that is difficult for project managers to manage.
Furthermore, care must be taken as documentation tends to be neglected. Because agile development emphasizes “working software,” creating detailed design documents and other documentation may be put on the back burner. In embedded development, solid documentation is often required for long-term maintenance and troubleshooting of products, so this can be a challenge.
Many embedded devices are used over long periods of time. When performing maintenance several years after development is completed, issues such as documentation not being properly created can become a problem.
How to Choose the Best Development Methodology for Embedded Software
In embedded software development, whether waterfall development or agile development is more suitable depends on the characteristics of the product and the nature of the project.
When Waterfall Development is Suitable
In embedded development, waterfall development is suitable for projects with clear requirements and few changes. Examples include replacing existing products with already finalized specifications, or products whose specifications are strictly defined by laws and regulations.
Waterfall development is also often chosen for products that require high safety and reliability. For products that affect human lives, such as automotive brake control systems and medical devices, it is necessary to perform detailed design and testing in advance to ensure quality. In such cases, an approach that adopts the V-model and thoroughly verifies each phase is effective.
Furthermore, a waterfall-like approach may be suitable for areas that closely interface with hardware. This is because hardware design and manufacturing schedules cannot be easily changed, requiring software to be developed systematically in accordance with hardware specifications.
When Agile Development is Suitable
On the other hand, agile development is suitable for projects where requirements are uncertain and highly likely to change. For example, it is suitable for areas where you want to make improvements while observing user reactions, such as user interfaces for IoT devices and cloud integration functions.
Agile development is also effective when experimentally introducing new technologies or functions. Because prototypes can be quickly created to check operation and any issues can be corrected early, technical risks can be reduced. By incorporating this method, development efficiency and predictability can be improved through measures such as identifying the hardware resources required to meet operational specifications or confirming the feasibility of performance on that hardware in advance.
In recent years, even in the field of embedded development, products are increasingly becoming network-compatible and equipped with software update functions. In such cases, because continuous addition and improvement of functions are required even after release, there is an increasing number of cases where an agile-like approach is adopted.
Hybrid Development: Getting the Best of Both Worlds
In actual embedded development sites, “hybrid development,” which combines waterfall development and agile development, is also often adopted.
For example, basic functions where hardware control or safety is emphasized are reliably built using waterfall development, while user interfaces and application layer functions are flexibly handled using agile development. In this way, selecting and combining the optimal development methods according to the characteristics of the project is the key to success.
Summary
In embedded software development, waterfall development was conventionally the mainstream because of the emphasis on product safety and reliability. However, in recent years, in addition to the progress of IoT and network compatibility, products have more functions than before. Furthermore, because continuous addition and improvement of functions have become required for many products, agile development is also increasingly being adopted.
For those building a career in embedded software, understanding the characteristics of both development methods and acquiring the ability to select the optimal method according to the nature of the project are essential to becoming an excellent engineer.


