The end of the year is always a favorite time of mine. Yes, I enjoy the Christmas lights, egg nog and the general holiday cheer, but I also enjoy the opportunity to strategize about the upcoming year. The end of the year is a great time to look at what went right and wrong this year and make some plans for improvement in the next. As I stop and look at how the embedded systems industry is changing, there are give 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). This has placed embedded software developers at a disadvantage and forced us to spend more time either 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. 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’s. I recall afterwards the dread of having to manually run through tests to make sure that everything worked because it would undoubtedly take at least a day to validate. However, for this module I had carefully developed and maintained tests 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 and artificial intelligence 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 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 ran 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. Getting a strong foundation in ML and then maintaining it will be far more effective for when it is needed than to wait and try to jump into the deep end and leverage on a project while still learning about the technology.
Skill #3 – Security
There are so many devices today that are being developed for use with the IoT that it is impossible for developers to not be concerned with security. The skillsets required to secure an embedded product are certainly specialized and I would even argue hard to find and access at times. The potential negative impact on a company for not having a secure product though can be devastating. No one wants to be front page news due to a security breach and 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 their Platform Security Architecture (PSA) which outlines security best practices. There are also several silicon providers who have taken it upon themselves to build out security software development kits (SDK) to ease the security burden on developers and companies. Understanding these capabilities and developing the skills needed will be critical.
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 really isn’t new to developers. In fact, developers should be doing everything that they can to avoid adding bugs to their software so they can avoid it! That said, when I speak with developers through-out the industry, it isn’t uncommon for developers to spend an average of 40% of their time on debugging activities. One of the greatest productivities boosts any developer or team can undertake is to simply try to decrease the time they spend debugging from 40% to 30%. This 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 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 be used to decrease 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.
Conclusions
The skills required by embedded developers is constantly changing and evolving. We once just had to understand the C programming language and how to 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 I think keeps our jobs interesting and forces us to be constantly learning. Today we examined a few skillsets that I often see lacking in businesses and developers that I think will be critical to develop next year in order to be successful.