In recent years, we often hear “We work according to agile methodology“, “we use scrum in development”, and similar. But what is agile and is it possible to use it in the development of embedded devices?
What is Agile?
If you look in the dictionary for the explanation of the word, you will find this definition: “Able to move your body quickly and easily”, but then you wonder what it has to do with device development and how to use it.
Agile methodology is an iterative approach to software development that emphasizes collaboration, adaptability, and customer feedback. It breaks down projects into smaller increments, allowing teams to deliver working software more frequently and respond to changing requirements effectively. Agile fosters a culture of continuous improvement and encourages close communication among cross-functional team members.
This is what is explained in Manifesto for Agile Software Development, written by The Agile Alliance – a group of 17 software pioneers, back in 2001, as a response to the shortcomings of traditional, linear development methods, such as the Waterfall model, which often led to lengthy development cycles, rigid planning, and difficulties in adapting to changing requirements.
Agile methodology has many frameworks – Scrum, Kanban, Extreme Programming (XP), Lean Software Development, Large Scale Agile, and many more. Each framework provides a set of practices, roles, and ceremonies to support Agile principles and help teams organize their work effectively.
Iron Triangle Paradigm Shift
The Iron Triangle model represents three chief constraints in project management: Time, Cost, and Scope. This model is helpful for making reasonable trade-offs among these constraints. For example, a project can be completed faster (time) by increasing the budget (cost) or cutting the scope.
In the traditional Waterfall approach, the scope is fixed. This means that if you want to ensure a product has all the required features, time and cost should be adjusted. This approach is typically used in standard embedded development. For example, the scope details are defined upfront, within defined time and cost, but in the meantime, cost has been cut. What is done is that you extend time, so you don’t need to lower quality.
On the other hand, in the Agile approach, time (sprints) and cost are fixed, while the scope varies. Agile focuses on implementing high-priority requirements from the product backlog, and adapting to evolving requirements. For example, if the budget is unexpectedly cut during the project, the team collaborates with stakeholders to re-prioritize the backlog, focusing on delivering the highest-value features within the new budget constraints. The scope is adjusted dynamically, ensuring the most critical functionalities are delivered without compromising quality or extending time.
This paradigm shift allows for greater flexibility, faster delivery of usable products, and better alignment with stakeholder needs, ultimately leading to more successful project outcomes.
Now, when you know Agile essentials, we can go further to see if Agile can be used in the development of embedded devices.
Agile in embedded development
Why is this topic being discussed at all? What stops the use of agile methodology in embedded development?
With all the good that Agile brings, there are still some obstacles that limit the application of agile in embedded development, especially for hardware development part, such as:
- Real-time and Safety Constraints: Embedded systems often operate in environments where real-time performance and safety are critical. These systems must execute tasks within strict timing constraints and ensure high reliability to prevent failures. For example, automotive systems must respond instantly to sensor inputs to ensure passenger safety. Balancing these stringent requirements with the flexibility of Agile can be challenging, as Agile’s iterative cycles and incremental changes may not align well with the rigorous validation and certification needed for real-time and safety-critical applications.
- Specialized Testing and Tooling: Automated testing and continuous integration (CI) are essential to Agile methodologies, but implementing these practices in embedded development can be complex. Embedded systems often require specialized hardware for testing, and setting up an automated testing environment that accurately reflects the final operational context is difficult. Hardware-in-the-loop (HIL) testing, which integrates real hardware components with simulation models, requires significant investment in specialized equipment and tools.
- Detailed documentation: Industries such as automotive, aerospace, and medical devices mandate rigorous documentation and compliance with regulatory standards. These sectors require detailed design documentation, traceability of requirements, and extensive testing records to ensure safety and quality. Agile methodologies, which prioritize working software over comprehensive documentation, can seem at odds with these requirements.
Agile methodologies are generally more straightforward to implement in embedded software development compared to hardware development as:
- Software can be easily updated and iterated upon in short cycles (sprints), allowing teams to quickly incorporate changes and feedback.
- Modifications in software are typically less costly and time-consuming than in hardware. This allows for more frequent adjustments to requirements and priorities without significant rework.
Despite these challenges, Agile can still be effectively implemented in embedded development through several strategies:
- Adopt a Hybrid Approach: . For example, Agile can be applied to software development while hardware development follows a more structured approach. This allows teams to benefit from Agile’s iterative cycles and continuous feedback for software components, while still adhering to the stringent requirements and validation processes needed for hardware.
- Invest in Tooling and Infrastructure: Implementing automated testing frameworks and continuous integration pipelines tailored to embedded systems is crucial for Agile adoption. Investing in tools that support HIL testing, simulation environments, and prototyping tools can facilitate Agile practices. Automated testing frameworks should handle the specific challenges of embedded systems, such as timing constraints and hardware dependencies. Continuous integration pipelines should ensure frequent integration and testing, allowing for early detection and resolution of issues. Simulation tools can help in testing and validating designs early, reducing the time and cost associated with physical prototyping.
- Foster a Collaborative Culture: Promoting a culture of collaboration and continuous improvement is essential for successful Agile implementation. Cross-functional teams, including members from hardware, software, quality assurance, and other relevant domains, should communicate openly and work together iteratively to solve problems. Regular Agile ceremonies, such as daily stand-ups, sprint planning, and retrospectives, can foster collaboration and ensure alignment on goals and progress. Encouraging continuous learning and improvement helps teams adapt to changes and enhance their processes.
- Focus on Incremental Delivery: Delivering small, functional increments of the product helps manage complexity and allows for early feedback and adjustments. Each increment should be a potentially shippable product, even if it’s a small part of the overall system. This approach ensures that the development process remains aligned with customer needs and allows for early identification and resolution of issues, although maybe this will decide the duration of the sprint. Incremental delivery also helps manage risk, as each iteration provides an opportunity to test and validate the product in a real-world environment, reducing the likelihood of major issues arising late in the development cycle.
Conclusion
Applying Agile methodologies to embedded development presents significant challenges, including real-time and safety constraints, specialized testing and tooling requirements, the need for detailed documentation, and the necessity of a cultural shift. However, the benefits of Agile—improved responsiveness, enhanced innovation, early issue detection, and a customer-centric approach—make it a worthwhile consideration.
By adopting a hybrid approach, investing in appropriate tools and infrastructure, fostering a collaborative culture, and focusing on incremental delivery, organizations can successfully integrate Agile principles into their embedded development processes. Ultimately, Agile can enhance the quality, innovation, and market responsiveness of embedded systems, driving technological advancement forward.