What does an embedded developer do?

Embedded - a term that many have heard in connection with software development. But what does it actually mean? What does an embedded developer do and what does he work with? And how does a good embedded developer distinguish himself? We answer these questions in this article.

Definition: What is an embedded developer?

An embedded developer (or embedded engineer or embedded systems engineer) develops software that is embedded in hardware to make it functional. 

In your modern everyday life, you will come across many products in which an embedded developer has played a part. When you operate the coffee machine in the morning, for example, a small program ensures that the coffee flows at the push of a button or that you are shown whether the water level is sufficient for another coffee. This program was programmed by an embedded developer. When you get into your car, you are surrounded by a large number of embedded programs. For example, the operation of the windshield wiper. Who tells the car to wipe the windshield? And at what intensity? With which lever? The embedded developer does that. The same goes for every single button you can find in the car. And when your car automatically detects that it's raining, how far away you are from another parked car, or you set the cruise control, you realize the complexity and vastness of embedded development.

Embedded: integration into software development

Due to the special use of software in hardware, embedded development or embedded software development represents a cosmos of its own in the Software development ing. Embedded development is particularly about physical limits that set the playing field. Therefore, performance, efficiency and control are the decisive factors. In reality, this manifests itself in the fact that, for example, only limited memory is available and/or the computing power of the processor is significantly lower than in a desktop computer or PC or smartphone, for example. This proximity to hardware is one of the reasons why developers in embedded development often have a background in electrical or mechanical engineering.

Dealing with limited resources, optimal power consumption, high performance and architecture requirements make embedded development very challenging. Embedded development therefore requires a lot of knowledge around hardware and software topics. 

What tech stack do embedded developers use?

Due to the high demands on performance and efficiency, low-level languages such as C++, C or Assembly are mainly used in embedded development. Low-level languages are characterized by the fact that they work very close to the machine. This means that they have direct access to the hardware and do not require a special environment for the software to run. This makes them significantly faster than, for example, high-level languages such as JavaScript, Python or Java. Nevertheless, languages such as Java and Python are also used in embedded development when, for example, the requirements for performance and memory are not particularly high, as in the control of the washing programs of a washing machine.

Simplified, this means: if performance, memory space and efficiency are important, then low-level languages such as C++ or C are used in particular. If performance, memory space and efficiency are less crucial, then languages such as Java and Python can be used because they have a higher fault tolerance and can therefore increase the developer's productivity.

Nevertheless, programming languages are only part of the tech stack used by embedded developers. Due to the proximity to hardware, tools for hardware as well as for software are used.

Real-time operating systems (RTOS)

The programming of microcontrollers or microprocessors (hardware) is often a matter of milliseconds and nanoseconds, as they are used in critical environments such as cars, aircraft or medical devices. Real-time operating systems (RTOS) are used here, which are responsible for ensuring that certain tasks of a piece of software are executed in a precisely timed and/or simultaneous manner. A pacemaker, for example, has to make the heart beat at exactly the right time - all the time. This also explains why the choice of programming language is crucial.

These RTOS include FreeRTOS, VxWorks, QNX, Micrium uC/OS or ThreadX.

Development environment (IDE)

Since embedded development has special requirements, embedded developers use a development environment designed for this purpose, such as Eclipse, IAR Embedded Workbench or Keil µVision, to make their work easier.

Debugger

Since errors can always occur during the development of software, embedded developers resort to specially developed debuggers, i.e. "error correction software", so to speak. These help the embedded developer to understand the timing of a program or software or to measure the performance or efficiency of the embedded software. These debuggers include GDB, IAR C-SPY, Arm DS-5 Debugger or Lauterbach TRACE32.

Compiler

Every programming language is an interface so that humans can communicate with machines, i.e. microprocessors, computers and co. Programming languages therefore enable us to give instructions to the machine in a language that we can understand. But these instructions have to be translated for the machine so that they can actually be executed. This is achieved via so-called compilers, which translate the source code (e.g. C, C++, Python or Java) into executable machine code (usually binary code). Again, there are different compilers that are used depending on the environment, programming language or performance requirements. These include the open source compilers of the GNU Compiler Collection (GCC) (e.g. gcc, g++ or gfortran) but also commercial compilers such as IAR C/C++, ARM Compiler or Green Hills Compiler.

In summary, an embedded developer's tech stack is oriented around the performance, efficiency and control requirements of embedded software. As a final note, embedded development mostly uses the Linux operating system as a counterpart to Microsoft's Windows or Apple's iOS or macOS.

What makes a good embedded developer?

Since embedded software is used in hardware, solid knowledge of both software and hardware is essential. Depending on the field of application, this means a good knowledge of microcontrollers (MCU), sensors or even displays and memory on the hardware side.

The requirements for the embedded software also result in the requirements for the embedded developer.

If the focus is on performance and timely execution, knowledge of low-level languages, RTOS and compilers is relevant. If, on the other hand, the focus is less on isolated performance and more on interaction with other devices via Bluetooth or WiFi (WLAN), as is often the case in the Internet-of-Things (e.g., smart washing machines or coffee machines), high-level languages are usually used and the developer should be familiar above all with the necessary communication standards and protocols.

Linux is the most commonly used operating system in embedded development, which is why Linux knowledge can be mentioned as a basic requirement.

The requirements for purely technical prerequisites are supplemented by soft skills such as problem-solving competence, troubleshooting and good documentation. Since embedded systems often have to be fast and safe, it is important that good embedded developers test their developed software sufficiently, document it well and take special cases into account during development.

What should you look for as a tech recruiter?

Embedded development covers diverse activities in different industries. The composition of hardware, software, firmware, PCB design, etc. gives developers some freedom to specialize. As in any other subject, there is always an area where someone can play to their strengths and interests more than others. So one person might be stronger in hardware, another stronger in software. Clear communication with your department in advance about what skills are being sought is therefore essential. 

Another factor is the developer's project history. What systems has he worked with? And in which area? Washing machines and coffee machines have different requirements than cars and airplanes. Is it more about security or speed (real-time) or performance, or should the software work well with other software? Each area requires its own know-how, which the developer has to acquire over a long period of time.

A classification to the performance requirements or efficiency of the software already results from the choice of the programming language (low-level vs. high-level). Further requirements should be discussed by the exchange with the specialist area:

  • What role does security play? Is a specific environment or communication standard/protocol (e.g. Bluetooth or MQTT) used here?
  • What is the relevance of compilers? Does the developer need to know more about them?
  • What is the decisive factor in development? Performance, efficiency, control or safety? How is this expressed in the requirements?
  • Is specific expertise required, e.g. in data compression?
  • Does the software or hardware interact with other devices? How does this exchange take place? Are certain standards or protocols used?

Through the exchange with the department, you will learn what the special requirements for the embedded developer are and can weight them. The department should help you best with this, so that you understand which knowledge and skills are decisive and which are negligible.

You can then mirror these requirements and their weighting in your interview with potential candidates by asking about their experience and knowledge.


What does an embedded developer do?

FAQ

What do you do as an embedded developer?

An embedded developer (or embedded engineer or embedded systems engineer) develops software that is embedded in hardware to make it functional. 

How much does an embedded developer earn?

An embedded developer earns an average of €70,000 per year.

Which programming languages are used in Embedded?

In embedded development, low-level languages such as C++ or C are used, but also high-level languages such as Python or Java.