There has never been a more exciting time to be a part of the embedded software community and become an embedded software developer.
IoT devices are now part of our everyday lives, and the general pace of technological change and innovation continues to gather speed.
To satisfy this largely consumer-driven demand for advanced and intelligent technology, there is a need for qualified, experienced embedded software developers.
Embedded software development is known for being a niche discipline within electronic engineering, more so than say desktop development, yet it remains highly competitive at all levels.
Ian and I have been embedded software developers for more than 20 years, and we can honestly say we still have the same passion as when we started out.
In this article, we look at what a career in embedded development entails today, why we believe it holds so much appeal as a career choice, and share some advice from our experience for breaking into the field.
What is an embedded software developer?
Embedded software developers are responsible for designing, developing, optimising and implementing the software that is programmed into devices built around a microprocessor.
We write code to solve problems and implement systems that make a physical hardware device work through software.
We take the concept right through to delivery; from the briefing, writing, testing and fixing stages to final release.
In general terms, our aim is to ensure embedded software accomplishes desired goals, exploiting the full potential of the hardware for the benefit of the user.
Becoming an embedded software developer
Embedded development is a vocation. You need a genuine passion and interest for technology and troubleshooting technical problems.
A degree in computer engineering or a related field will provide a solid, theoretical foundation. Other essential technical development skills include:
- Expertise in C/C++ programming
- Low level optimisation in assembly language
- Device driver development and hardware/software interfacing
- Software configuration management (using tools such as Perforce, Git or SVN)
- Specialised techniques for embedded programming
- Ability to read electronics schematics and troubleshoot problems
- Project management and software development life cycle
In addition, embedded developers need knowledge of:
- Communication protocols
- Real Time Operating Sytems
- Design patterns
- Microprocessor and microcontroller fundamentals
- Basic electronics
- Build environments
- Concurrent/parallel programming
To stand out from the competition, aspiring and junior developers need experience in addition to qualifications. To enhance your prospects of gaining paid employment or commissions, you should build a portfolio to demonstrate your knowledge and application. This means taking the initiative; design, build and test your own projects, contribute to open source projects, join in hackathons, blog.
What other skills do you need to become an embedded software developer?
In addition to technical skills, to undertake commercial development work there are a number of ‘softer’ skills you will need to hone.
Project management for example is crucial. Client deadlines and budgets are often non-negotiable. You have to stay on track in terms of time and spend, and keep relevant parties informed at critical stages.
Another skill is collaboration. Working with clients means taking and understanding the brief, devising and proposing solutions, and keeping them informed as the project progresses.
In terms of delivering the project, embedded developers can work individually, or as part of a team. Either way, you are likely to come across some element of collaboration as you take on projects, either with fellow developers or engineers from other disciplines.
You also need to keep on top of emerging trends and technological developments. This means an ongoing commitment to learning and understanding best practice, to ensure your knowledge is up to date and relevant.
For example, we believe a key area of change will be the emerging need for embedded developers who can undertake hardware/software co-design and co-verification, requiring skills that span the hardware/software stack.
Why we enjoy embedded software development
Since setting up Pebble Bay Consulting in 2005, we have worked on projects in a number of sectors, from industrial automation and military and aerospace through to telecommunications. The variety of client brief and project type is a key draw for us and keeps us challenged and motivated to deliver exceptional final products.
Some of our most memorable projects have included working with various companies who wanted to move large and complex code bases to new CPU hardware or operating systems, or both. These projects required a good understanding of software construction, real-time operating systems, and processor architecture and board design. In other words, they provided the toughest and most interesting technical challenges.
However, they also provided project management and logistical challenges too because they required working with the client’s engineering teams in the UK and across the world.
A highlight was working with Siemens Mobility to develop a new control unit used in the rail and oil and gas industries. The new unit was going to replace an existing unit and had to run the existing application software, which had been developed over many years, and talk to the same external equipment. A mistake in the new hardware or software would have had a major impact on the client’s business.
We worked closely with them and our hardware development partner at every stage to ensure that the processor and hardware we selected would do the job. We built prototypes and started the operating system and device driver development work using reference boards to build confidence in our solution before the custom hardware was available. This resulted in a smooth integration when the new hardware was ready and eventually a successful deployment of the new equipment. You can’t do better than that!
What makes a good embedded software developer?
In our opinion, the best embedded software developers need to bring a whole system perspective.
They need to understand the low level concepts of how the software talks to the underlying hardware. And they need to know the hardware they are working on, including the different peripherals connected to the system.
A large part of embedded software development is problem solving. Embedded developers have to be able to identify and solve problems, while incurring minimal drain on time and cost.
In embedded software the complexity usually isn’t in the lines of code. It comes from client demands and practical challenges that arise during development. For example, we often fix problems that hardware engineers aren’t aware of or are unable to resolve. This is particularly the case for new hardware, which can be expecnsive or time-consuming to fix. Other common problems include:
- Limited memory and CPU resources, due to business constraints or the packaging/environment into which they must be deployed
- Reliability, safety, and correctness concerns
- Real-time constraints
- Optimising for low power requirements, minimal processing/storage resources and minimal manufacturing cost
Embedded software development demands patience and attention to detail. For embedded software developers, submitting a software patch is usually difficult or not an option at all. There are no re-releases once it leaves your charge. You have to get it right.
This translates into long and thorough release and testing cycles because often there are no second chances. Patience and focus therefore are essential virtues. But the satisfaction at the end of the project is immense. Having something tangible, operable and functional directly resulting from your own creativity and hard work is a rewarding experience.