Having the right tools for the job is key to success in embedded development. But in the hands of the improperly skilled, even the right tools can yield a disastrous outcome. Firmware engineers require seven essential skills to succeed in today's rapid-paced development environment.
Skill #1 – Debugging
According to the 2015 UBMdebugging an embedded system was the greatest challenge facing developers and managers, surpassing even the challenge of meeting project deadlines. Undoubtedly the increasing complexity of embedded systems and the time spent debugging is a major driver to delivering on-time. Having skills to debug a real-time embedded system quickly and efficiently can have a direct impact on time-to-market and development costs, which is why mastering debugging skills is critically important for an engineer to be successful.
Skill #2 – Real-time language skills
Despite all the press about how cool and suave makers and hackers are, I would bet that the majority lack the programming language skills necessary to launch a real-time embedded product. Firmware engineers that learn the nuances of C or C++ and can apply those skills will be more successful. Skilled language developers will know which constructs are safe, buggy, or can be applied under the given system constraints. Mastering programming language skills is a MUST for firmware engineers looking to have long-term success.
Skill #3 – Understand hardware at the component level
Firmware developers may find it tempting to focus only on skills that directly relate to developing software and completely ignore the hardware. Many companies today even push their engineers into nice little boxes of skills and job responsibilities, so why not just focus on your primary area of expertise? But at some point during every project, all the little niches need to come together for developers to integrate and debug the system. Firmware engineers who can hold their own in software and hardware will be better able to function and lead the integration effort and in the end will appear more valuable to management and the team. Plus, it's always fun when a hardware engineer points his finger at the problem and says it's the magic black software box to be able to respond "The pull-up on the bus looks a little weak for this architecture .... have you checked that?" or something to that effect.
Skill #4 – Healthy scepticism
Healthy scepticism is probably more of a mindset or an attitude than a pure skill but nonetheless for today we will consider it a skill that needs to be mastered. All of us human engineers, at some point in our careers, we will select a component or a library or make a decision that will come back to bite us. From that point forward, when any component, library, or the like makes big promises we suddenly treat it like the plague and our response is blown way out of proportion. Practicing healthy scepticism should allow a developer to say I've been burned in the past by this, I don't believe this, but I'm willing to evaluate, analyse and form an opinion based on engineering data rather than a personal, past experience. Healthy scepticism can help an engineer see the currents of change and determine when it makes sense to jump onboard with a new technology, process, or platform.
Skill #5 – Ability to self-market
The firmware engineer who can market themselves will gain many advantages over a peer who can't. Marketing skills such as resume development or interview skills are not taught to engineers at the university. Instead, engineers have to learn these skills on-the-fly in the field. The engineer who can promote and market himself will get the job, the raise, and the extra perks. Firmware engineers need to learn and understand that they aren't just in the software business. They also need to gain marketing skills if they are to maximise their success (whatever their definition of success may be).
Skill #6 – Communication
When I was an entry-level, green engineer I used to hide behind email for as much communication as I possibly could. But email can be a difficult communication medium because it is so interpretive. It conveys no tone of voice and no facial expressions and so it is easy for the reader to read-in hostility or an issue where none exists. The reader's mood can easily turn a friendly email into an unfriendly one. On more than one occasion I was called to the managers' office to discuss "that email" I sent to so-and-so that was considered inappropriate. Email is convenient, fast, and sometimes curt but verbal and face-to-face communication leaves far less to be interpreted.
Skill #7 – Organisation
The ability to organise software and create beautiful architectures is important to an embedded software engineer, yet the real skill of organisation is undoubtedly just being able to find what you need when you need it. The problem with a messy desk and tools scattered everywhere is that things shift and get lost, and time gets wasted looking for them. A two-minute search for that paper, module, or probe can break a programmer's train of thought and cause a context shift that requires fifteen minutes before the developer is back in the groove. Disciplined organisation is a skill that is so essential yet so uncommon among many of the engineers I see and interact with.
Conclusion
There are any number of possible skills that can assist a firmware engineer in being successful. These seven are certainly essential although maybe not immediately obvious. What other skills might a developer need?
About the author
Jacob Beningo is principal consultant at Beningo Engineering, an embedded software consulting company. Jacob has experience developing, reviewing and critiquing drivers, frameworks and application code for companies requiring robust and scalable firmware. Jacob is actively involved in improving the general understanding of embedded software development through workshops, webinars and blogging.