While the global media braces everyone for a recession, it has become nearly impossible to find and hire embedded software engineers in the embedded systems field. I can’t count the number of companies that I’ve recently talked to who are short-staffed and looking for developers and can’t find them. When you can’t find enough staff for a project, there are two choices: scale back your plans or find ways to become more efficient with the assets already on your team. This post will explore several tips for how embedded developers can improve their efficiency.
Tip #1 – Spend Less Time Debugging
Embedded software developers typically spend anywhere from 20% – 40% of their time debugging. On average, one to two days per week are spent trying to resolve problems in the code. Put another way, that’s 420 – 840 hours per year! If you have 2-4 developers working on a team, decreasing how much time is spent debugging can free up a lot of person-hours that can be reallocated to getting more done.
No matter how good a developer gets, the time spent will never go to zero. I’ve been writing embedded software professionally for 20 years; I’ve gone from debugging 80% of the time down to less than 5%. Of course, we’re human and will never be perfect no matter how good we get, but we can certainly decrease the time to a single-digit percentage. A few ideas to help your team spend less time debugging include:
- Embracing Test-Driven Development techniques
- Develop off target as much as possible
- Master debugging strategies
(Additional details can be found in 3 Tips for Decreasing Debug Time).
Tip #2 – Don’t Reinvent the wheel
There is a stigma in embedded software development today that tools and software stacks should be free and open source. I used to argue that the problem was that management didn’t understand the software and, therefore, underestimated the importance of getting the right tools and buying commercial software stacks. But unfortunately, I’ve encountered many engineers who believe that being open source and free is the only way, and spending any money is not worth the investment, no matter the damage or the final costs.
Quality software takes time and money to write correctly. If you need software stack A and company B have already written it, then purchase the software stack to save yourself time and money. In many instances, companies that sell software stacks will even provide training or an FAE to help your team quickly integrate and configure the software! If you are short on developers, leverage these additional assets to move you toward your end goal quickly. Don’t let your team get excited about creating some piece of software that every developer and their sister have written a hundred times.
Developers are paid to develop a product that meets the needs of the business’s customers and generates a return on investment. While the cost for developers is fixed, developers don’t have an unlimited number of hours to create technologies from scratch or spend hours trying to take a square open-source software stack and integrate it into a round hole.
Tip #3 – Prioritize product features
I hear about so much time wasted on product features that either are never completed or ends up being cut out of a product. One key, if not the key, to be more efficient is to have your priorities straight. What are the core product features that are required to launch the product? If those features have not been implemented yet, then there is no reason developers should be working on the frosting or the cherry on top!
Embedded systems, in my experience, are never finished. There is always another feature to add, an improvement to make, and so forth. Therefore, at the start of every project and continuously throughout, the team needs to have a prioritized feature list that leads to a minimally viable product. An important feature to include is a bootloader so that the firmware can continue to be improved and new features added (and dare I say removed?) throughout the product’s life.
Tip #4 – Invest in training and education
If you have a limited number of assets and can’t quickly expand those assets, then those assets need to be more efficient. Continuous education is a great way to help developers stay updated on the latest and most remarkable technologies and techniques. In addition, technology and techniques often provide developers with critical skills that help them dramatically improve how efficient they are.
There are several ways that companies can invest in their developers. First, they can provide access to online learning resources in their industry. Many technical periodicals, books, and videos are available for a relatively low cost. Second, it focuses on continuous education, such as training courses. Courses can focus on technical job aspects, but even time management and self-improvement can help make a difference.
Tip #5 – Strategically automate
Automation can be a fantastic tool to make developers more efficient if applied strategically. For example, if days or weeks are spent on manual testing, then automating the testing could be a helpful prescription. On the other hand, if days or weeks are spent preparing a system so that it can be shipped, can part of the whole process be automated using a script? Can product configuration files be created, and then auto-generation tools be used? What about using modeling tools to figure out the potential design issues early and flesh them out when they are ant-sized instead of molehills?
Strategically automating developer and coding tasks is an untapped resource in many embedded teams today. The trick is to go about your day constantly asking, “Do I need to be doing this, or is this something I can automate?”. Then, within a few weeks, developers will have more time to focus on the important things instead of menial and labor-intensive activities.
Hiring new embedded software developers today is tough. In many cases, companies have to make do with their team. There’s no reason that a steady team can’t get more done. As we have seen, the trick is to get more efficient. Sometimes, just spending money on tools and software stacks can make the difference. In others, careful consideration into processes that can be automated to free up developer time. I suspect nearly every team could do with some feature prioritization. The trick is to be more efficient, not do less or push your developers to burn out.
What are you doing today to become a more efficient developer? What activities can you cut, automate, and improve to free up future time?
|Jacob Beningo is an embedded software consultant who specializes in real-time, microcontroller-based systems. He actively promotes software best practices through numerous articles, blogs, and webinars on topics from software architecture design, embedded DevOps, and implementation techniques. Jacob has 20 years of experience in the field and holds three degrees including a Masters of Engineering from the University of Michigan.|
- 3 tips for decreasing time spent debugging
- Settling into the new norm for an embedded engineering workforce
- How the chip shortage deepens the engineering skills crisis
- Competing priorities leave developers struggling to secure code
- CEO interview: implementing embedded security has to be simple
For more Embedded, subscribe to Embedded’s weekly email newsletter.