Agile Development for Embedded Systems
We use the following Agile/eXtreme Programming paradigms for Embedded Software Development, applying a best fit approach, depending on the nature of the work. Obviously, when working closely with the hardware, for instance with a Board Support Package for a new piece of hardware, Pair Programming and Test Driven Development will not fit well, as many days of upfront development and debugging are required before the BSP comes to life. The complete suite of Agile development will fit well for a complete application that can be developed from scratch. This is illustrated in the table below.
| Board Support Package | Device Driver | Library | Embedded System / Application | |
| Pair Programming | | | | |
| Test Driven Development | | | ||
| Acceptance Test | | | ||
| Continuous Integration | | | ||
| Version Control | | | ||
| Collective Code Ownership | | | ||
| Performance Optimization | | | ||
| Root-Cause Analysis | | | ||
| "Done Done" | | | ||
| Incremental Design | | | ||
| Ubiquitous Language | | | ||
| Informative Workspace | | |
Agile Processes for Embedded Software Development
Our Agile processes can be broken down into the following sections, each one relating to the create, develop and test phases in the Harmonic Software Systems philosophy. Each one of these processes adds a powerful technique to improve the quality of the software system under development. Our Agile teams understand these processes, and are able to combine them to provide real value to our customers.
Create
| Stories | We plan our work in small, customer-centric pieces |
| Estimating | We provide reliable estimates: 1. Estimate in terms of ideal engineering days (story points), not calendar time. |
| Vision | We know why our work is important and how we'll be successful.Create a Vision Statement: |
| Root Cause Analysis | We prevent mistakes by fixing our process |
| Informative Workspace | We are all tuned into the status of our project |
| Iteration Planning | We stop at predetermined, unchangeable time intervals and compare reality to plan |
| Release Planning | We plan for success. Release early, release often |
| Incremental Requirements | We define requirements in parallel with other work, but we can work with upfront requirements |
| Reporting | We inspire trust in the team's decisions |
| Weekly status reports | We inform the customer of our progress |
| Incremental Design | We deliver stories every week without compromising design quality |
| Risk Management | We make and meet long term commitments |
| Retrospectives | We continually improve our work habits |
Develop
Refactoring | Every day, our code is slightly better than the day before Reduce technical debt |
Collective Code Ownership | We are all responsible for high-quality code |
No Bugs | We confidently release without a dedicated testing phase 1. Write fewer bugs through Pair Programming |
Pair Programming | We help each other succeed: 1. Pair on everything you'll need to maintain |
Simple Design | Our design is easy to modify and maintain Express every concept once (and only once) |
Version Control | We keep all our project artifacts in a single, authoritative place |
"Done Done" | We're done when we're production-ready: |
Continuous Integration | We keep our code ready to ship 1. Integrate your code every few hours |
Coding Standards | We embrace a joint aesthetic |
Automated Build | We eliminate build and configuration hassles |
Trust | We work together effectively and without fear |
Sit together | We communicate rapidly and accurately |
Ubiquitous Language | We understand each other Programmers should speak the language of their domain experts, not the other way around. |
Slack | We deliver on our iteration commitments: |
Spike Solutions | We perform small, isolated experiments when we need more information |
Ten-Minute Build | We eliminate build and configuration hassles. Automate the build |
Documentation | We communicate necessary information effectively |
Test
Exploratory Testing | We discover surprises and untested conditions 1. Charters Test Types: None, Some, All |
Iteration Demo | We keep it real. After every iteration we ask: |
Real Customer Involvement | We understand the goals and frustrations of our customers and end-users |
Test Driven Development | We produce well-designed, well-tested, and well-factored code in small, verifiable steps 1. "Don't write any production code unless you have a failing test". |
Performance Optimisation | We optimise when there's a proven need |
Customer Tests | We implement tricky domain concepts correctly |