Can agile improve on waterfall for embedded engineering projects
Table of contents
Embedded systems play an increasingly significant and complex role in modern engineering projects in every industry. Across automotive applications, medical devices, IoT systems, and commercial appliances, for example, embedded engineering is playing an increasing role in both user interactions and device-to-device communication. Yet, many embedded projects still need to modernise their build tools and techniques to meet today's expectations.
Despite increasing in scale and complexity, embedded projects have needed to be faster to take advantage of tooling and development models better suited to modern embedded applications. We've seen embedded software projects benefit richly from a shift from sequential development models towards agile development methods with abundant precautions and safeguards in place.
Modern agile engineering provides the tools necessary for the iterative development of embedded software. Within our teams, it has proven to be a high-quality asset that affords projects greater levels of communication, visibility, and progress while maintaining the same level of safety and accuracy that embedded projects require.
Here, we look at the advantages of adopting agile development methods in embedded software development projects. Can agile improve on waterfall for embedded engineering projects
Beginning Embedded Engineering
For many years, until the 1990s, sequential development models were the most prevalent methodologies for software developers. The most commonly used of these was the waterfall model, a plan-driven methodology introduced in the 1970s that is still used in some software projects today.
Despite being largely phased out in favour of agile methodologies, in general, software engineering projects, waterfall methods have stuck around in embedded development precisely because of the high degree of value it places on rigid planning, extensive documentation, and process-driven development. Undoubtedly, it's a process that still has a place in many software projects today but comes with some potential drawbacks worth bearing in mind.
Sticking rigidly to the waterfall model will disregard many of the hard-won advantages the modernised development techniques can now provide to teams and projects.
This dilemma leaves teams with a tough choice:
- Should we stick with conventional tried and tested methods for new projects, even as the projects have changed significantly? Or,
- Should we use more modern tools for upcoming projects despite being a new way of building embedded applications?
To fully analyse this choice, let's look at both waterfall and agile development methodologies and analyse what each can deliver for teams in embedded software development.
Waterfall Development Methodology
The waterfall model is defined as a linear approach to software development that follows a series of fixed stages feeding independently from one to the next.
This model has long had a strong appeal for embedded software development as the rigidly defined steps of the process minimise the risk of late-stage changes, build strong documentation, and define precisely what the project's code should do. The characteristics of a typical embedded system as having limited networking capabilities, high requirements for safety, and an unmovable deadline, make waterfall development a natural choice.
The waterfall model has stuck around for a long time within embedded engineering precisely because it has a strong level of utility for developers.
Advantages of Waterfall Development for Embedded Engineering
- Clearly defined stages prevent ad hoc decisions and temporary roadblocks changing the focus and direction of the project.
- The highly defined stages of waterfall development often suit the rigid requirements of many embedded software projects. As a methodology that prioritises planning, design, and documentation before code, it's well-suited to ironing out potential design flaws before code is written.
- The step-by-step nature of waterfall development makes it easy to measure progress against estimates, communicate progress with related teams, and ensure firm and unmovable deadlines are still on track to be met.
- Testing and validation can be undertaken against a design with rigid documentation likely to have changed comparably little throughout the development phases.
Disadvantages of Waterfall for Embedded Engineering
- It's rare to have a complete and comprehensive picture of the development landscape before undertaking development. Hardware specifications change alongside requirements and expectations — waterfall development is notably less flexible than agile methodologies.
- Disconnects between various phases of development can introduce some artificial roadblocks. Often, it makes more sense to work on various stages of design, documentation, and testing during the development phase, as that's when your knowledge and understanding of the system are at their greatest.
- There's little opportunity for shareholders to get hands-on with a simplified code version until long into the project. This can increase the likelihood that plans and designs may change late on and heighten the need for additional flexibility in approach.
Over time, waterfall methods have been adapted slightly to allow more degrees of freedom and flexibility within projects than the original model allows. While adaptations have expanded the use-case for waterfall methods and made it more approachable for some projects, some of the main drawbacks remain an issue — particularly for modern IoT systems and devices that are larger in scope and use than early embedded systems.
Similarly, adapting waterfall for embedded projects does little to improve, develop, and enhance your use of agile practices in other types of development. Instead, let's look at implementing and improving agile methods to create an ideal tool for tackling embedded software development projects.
Agile Embedded Engineering
Agile development was built from the ground up to address the drawbacks and pitfalls of waterfall development. With a focus on small cross-functional teams and an emphasis on communication, visibility, and productivity — agile aims to address weaknesses that are particularly prevalent in large and complex projects.
Yet, despite the ever-growing scale of embedded systems, simply adopting agile development for embedded applications in the same way you would for a big console game or enterprise system won't make the methodology an ideal fit.
Embedded software development often involves real-time computing, safety-critical systems, and limited hardware resources that require high degrees of assurance and verification. While these areas of development stray outside the original intent behind agile development, it is a methodology that can be readily augmented to support its use in embedded systems.
For example, a robust and reliable architecture plays a particularly crucial role in embedded engineering and must be at the forefront of systems design. Similarly, detailed design, rigid specification, and abundant documentation are essential to successful systems. Each of these is an area that would traditionally be a lower priority in agile methods than they would undertaking waterfall development.
Over time, we have developed practices and strategies to overcome potential pitfalls by augmenting agile development with strategies well-suited to embedded projects.
One of the critical ways we deploy agile methodologies into embedded projects is by prioritising tasks that support the underlying framework before introducing peripheral components. By doing this, we limit the likelihood of high-impact structural changes being needed in the later stages of the project and maximise our ability to gain in-depth knowledge and understanding of critical infrastructure early in the project.
Similarly, one of the agile's most valuable assets is its ability to allow teams to investigate various approaches to implementation and discover new details about the system and its hardware. In embedded engineering, details often have to be ironed out as far in advance as possible to ward off unwelcome surprises.
These two competing goals can be achieved by defining short-term research tasks as part of early project sprints. The goals of these tasks should be to trial implementation details, experiment with technologies, and gain an in-depth understanding of the system before starting work on the larger project.
Benefits of Agile For Embedded Software Development
- Shareholders are involved at every stage. This asset is compelling in embedded engineering projects as opportunities for changes to be made after the fact are much rarer and much more costly.
- Accurate estimates achieved by working with the system can be a tremendous asset in planning increasingly accurate deadlines and shipping dates — resulting in fewer truly last-minute surprises.
- Milestones and objectives are closely adhered to as teams focus on each one instead of grouping several together in a segmented development phase.
- Regular small successes boost the project and are easier to focus on and manage than one long-term goal defined as the end of a long development phase.
Adopting the Right Methodology for Embedded Systems
To say that any software development methodology is entirely outdated or irrelevant to a particular field would be both unfair and inaccurate. The waterfall and agile methodologies have a place in embedded engineering today.
The rigid processes and documentation processes of waterfall development have some key advantages to the safety-critical, real-time requirements of many embedded systems. Hardware teams, for example, still use the waterfall method extensively for most projects.
The ever-changing nature of modern embedded engineering often requires more modern and productive methodologies that can be more easily applied to today's engineering teams. The explosion in IoT technologies and the ever-growing capabilities of today's devices means systems are growing consistently more significant, more complex, and consistently more connected. Agile often offers an ideal fit for these engineering projects in these scenarios.
Of course, neither waterfall development nor agile engineering guarantees success in any discipline of software engineering. To do that you need an experienced team with knowledge of the domain and a long time spent learning, understanding, and deploying software within the industry. get in touch today to find out how our teams can build, manage, and deploy embedded solutions for you.
Latest blog posts
How we helped Nextail automate processes
Nextail first contacted us to create a UI library for them. Satisfied with the outcomes, they hired us for their Demo Data Generator project, which we worked on from the very beginning.
How we built a scalable, investment-worthy system for F...
FaultFixers contacted us to help them improve their legacy system and optimize it for new features and functionalities. The result? Building a highly stable and scalable system that has helped them penetrate new markets and...
Why every agency must prioritize accessibility now or s...
The web was initially designed to be a playground for all. However, at some point, we forgot to invite everyone to the party. As a company that works on digital products, we have both the power and the responsibility to cha...