From time to time, software developers need to look back on their successes and failures and make plans to improve their overall development process. As I stop and look at how the embedded systems industry is changing, there are specific skills that I think every developer is going to need in 2021 and beyond.
Skill #1 – Integrated, Automated Testing
The first skill that every developer needs is the ability to write automated tests. Traditionally embedded developers have not been the greatest at leveraging test-driven development or continuous integration (CI) techniques. This shortcoming has placed embedded software developers at a disadvantage and forced us to spend more time running through manual tests or, worse, spot-checking our software. The result is launching products with our fingers crossed and silent prayers that things don’t come back to bite us.
Automated testing tools, harnesses, and CI/CD platforms have advanced to the point that developers need to leverage them into their development process. The value and the results can be tremendous. For example, I recently had to rework a code module where I tore up probably 70% of the code internal to the API. I recall afterward the dread of manually running through tests to make sure that everything worked because it would undoubtedly take at least a day to validate. However, I had carefully developed and maintained tests for this module, including during my tear up. My automated tests were able to validate everything was good in less than 1 second! (And it found a minor oversight I made, too).
Skill #2 – Machine Learning
There has been a lot of hype around machine learning (ML) and artificial intelligence (AI), especially for embedded software solutions. This year, I’ve often felt that it is a technology solution looking for a problem to solve. However, the facts are that before any of us realize it, machine learning will become a core component in nearly every embedded system. The techniques are just too powerful, and the rate of development is quickly moving so that inferences can be run on the smallest and lowest energy devices.
Machine learning may not be a technique that can be applied today to the products that the reader is developing, but that doesn’t mean that a blind eye should be turned to them. Gaining a solid foundation in ML will be far more effective than waiting and leveraging on a project while still learning about the technology.
Skill #3 – Security
Today, there are so many devices that are being developed for use with the IoT that it is impossible for developers not to be concerned with security. The skillsets required to secure an embedded product are certainly specialized, and often hard to find and access. The potential negative impact on a company for not having a secure product can be devastating. No one wants to be front-page news due to a security breach. Plus, learning security skills can help a developer become more valuable to their employer
Security skills are certainly something that will always need to evolve. Arm has its Platform Security Architecture (PSA) which outlines security best practices. Further, several silicon providers have taken it upon themselves to build out security software development kits (SDK) to ease developers' and companies' security burdens. Understanding these capabilities and developing the skills needed will be critical in the future.
Skill #4 – RTOS Application Design
One skill that is particularly close to my own heart is the skillset required to design and implement RTOS-based applications. Every year I run several RTOS workshops and give talks at conferences around RTOS applications and have been finding that developers struggle to design and implement applications using them. Given the complexity of today’s applications, an RTOS has become a core component in many systems. Understanding the design patterns, best practices, and techniques will be critical to successfully launching a product in a timely manner.
Skill #5 – Debugging
Debugging is a skill that isn’t new to developers. Developers should be doing everything that they can to avoid adding bugs to their software. That said, when I speak with developers throughout the industry, it isn’t uncommon for developers to spend an average of 40 percent of their time on debugging activities. One of the most significant productivity boosts any developer or team can undertake is to simply decrease the time they spend debugging. Even a 10 percent improvement equates to adding an extra work month per developer over a year! (It works out to 5 weeks, but I would take the extra week as a vacation for a job well done).
Anyone looking to boost productivity or decrease budgets and time to market should start with activities that will help prevent bugs in the first place and then focus on the techniques that can reduce the time required to find bugs. This can involve a wide range of technologies from tracing, integrated CI/CD pipelines, static analysis, and code metric monitoring, and so on.
The skills required by embedded developers are constantly changing and evolving. Gone are the days when developers had only to understand the C programming language and control bits in a control register. Today’s embedded software engineers need skills that branch into every cutting edge of computer science. This can certainly seem intimidating, but it’s one of the features that keep our jobs exciting and constantly force us to learn. Today we examined a few skillsets that I often see lacking in businesses and developers that I think will be critical to future successes.
Jacob Beningo is an embedded software consultant who currently works with clients in more than a dozen countries to dramatically transform their businesses by improving product quality, cost and time to market. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees which include a Master of Engineering from the University of Michigan. Feel free to contact him at [email protected] at his website www.beningo.com, and sign-up for his monthly Embedded Bytes Newsletter.