Having the right tools for the job is critical to success but in the hands of the improperly skilled, the result can be disastrous. Firmware engineers require seven essential skills to succeed in todays rapid paced development environment.
Skill #1 – Defect Management (Formerly “Debugging”)
According to the UBM Embedded Marketing Studies, debugging an embedded system was the largest 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 the temptation to focus only on skills that directly relate to developing software and completely ignore the hardware. Many companies today push their engineers into a nice little box of skills and job responsibilities so why not just focus on your primary area of expertise? At some point during every project, all the little niches need to come together to integrate and debug the system. Firmware engineers who can hold their own in software and hardware will be better adept to function and lead the 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 Skepticism
Healthy skepticism 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. For all of us human engineers out there, at some point in our careers, we will select a component, a library or make a decision that will come back to bite us. From that point forward, any component, library, etc is suddenly treated like the plague and the response is blown way out of proportion. Practicing healthy skepticism, 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, analyze and form an opinion based on engineering data rather than a personal, past experience. Healthy skepticism 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-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 but also need to gain marketing skills if they are to maximize 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. Email can be a difficult communication medium because it is so interpretive. Email has no tone of voice, no facial expressions and it is easy to read hostility or an issue where none exists. The readers’ 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 so convenient, fast and sometimes curt but verbal and face-to-face communication leaves far less to be interpreted.
Skill #7 – Organization
The ability to organize software and create beautiful architectures is so important to an embedded software engineer, yet the real skill of organization 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 they shift, get lost and time gets wasted looking for them. A two minutes’ search for that paper, module or probe can break a programmers’ train of thought and cause a context shift that requires fifteen minutes before the developer is back in the groove. Disciplined organization is a skill that is so essential yet so uncommon among many of the engineers I see and interact with.
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?