A lot of teams developing embedded software struggle to deliver on time, on budget, and at a quality level that meets customer expectations. Successful embedded software development is often elusive and there are all kinds of excuses software teams have for their failure. However, there are many teams in the industry that are repeatedly successful even under the direst conditions. I’ve found that these teams have mastered what I call the embedded software triad. In this post, we explore the three elements of the embedded software triad and how they affect development.
Embedded Software Development
The embedded software triad consists of three elements: architecture, processes, and implementation. To be successful, an embedded software team must not just master these elements but also balance them. Too much focus on one area will disrupt the development cycle and lead to late deliveries, going over budget, and even buggy, low-quality software.
The relationships between architecture, processes, and implementation are best visualized through a Venn diagram as shown below in Figure-1.
Figure 1. Success in embedded software development requires a balance between architecture, processes, and implementation.
When a team masters and balances each element it is more likely that the team will successfully deliver their software. Unfortunately, it is not uncommon to come across teams that are out of balance and hyper-focused on one or two elements. Let’s examine each intersection in Figure 1 and see what happens.
1 – Focusing on Architecture and Implementation
Teams that are focused on architecture and implementation are more likely to deliver lower quality software and late. In Figure 1, this condition is denoted by the numeral 1. The software team in this case neglects development processes which creates inconsistent deliveries. The cause for the inconsistency is the lack of well-defined processes that are followed repeatability. Without those processes, these teams will also likely struggle with quality issues that could cause project delays and cause them to go over budget.
2 – Focusing on Processes and Implementation
The second overlap area in Figure 1 is for teams that overfocus on processes and implementation. These teams tend to understand the importance of processes, but they overlook how important the software architecture is. These teams design their system on the fly without any roadmap or blueprint for what it is they are building. While the team’s software quality and consistency may be good, they will often still deliver late because they constantly must rework their system with every new feature and requirement. I often refer to these teams as lost or meandering because they don’t have the big picture to work from. The software they write doesn’t scale well.
3 – Focusing on Architecture and Processes
The third area in Figure 1 is where a team focuses on their software architecture and their processes with little thought given to implementation. These teams are focused more on the theory of embedded software development than on actually getting a product to market. They tend to also be teams that are perfectionists. These teams will never complete their software. They either lack the implementation skills or bog themselves down so many processes that they run out of money or customers before the project is ever completed.
4 – Balancing the Embedded Triad
The final and fourth area in Figure 1 is for successful teams. Successful teams and developers will balance all three elements. They will have a software architecture that guides their implementation efforts. They will have the right number of processes to ensure quality software and consistency. They will have implementation skills that allow them to implement the architecture and leverage their processes to test and verify the implementation.
In this post, we’ve explored the three elements for successful embedded software development. I like to refer to them as the triad because if you cross just one then your project is done. It’s not uncommon for teams to accidentally hyper-focus on two of the three. The reasons often come down to nothing more than where developers’ strengths and weaknesses are.
Failure to manage these elements though will result in a lot of stress, late projects, and wasted money. Teams can balance these elements in several ways:
- Perform quarterly and yearly reviews of each area
- Train and mentor their employees
- Develop the right processes to manage embedded software develop
- Leverage external resources to help improve development (I highly recommend starting a discussion with Jacob Beningo)
No matter the solution, failure to balance these elements will result in late deliveries, spending far more on development than is necessary, and an inconsistent development cycle.
If you feel that you need help getting your software development back on-track, email Jacob at firstname.lastname@example.org to schedule an introductory call. We’re here to help you be successful.