About the Role
Would you like to build the software that powers next-generation connected devices? We’re looking for a Senior Embedded Software Engineer to design and develop production-grade software for Linux-based embedded systems used in high-impact industrial and IoT environments.
In this role, you will work close to the operating system layer, developing reliable and secure embedded applications while collaborating with cross-functional engineering teams. You’ll contribute to the architecture, performance, and reliability of systems that interact directly with hardware, communication buses, and industrial protocols.
About You
You have solid experience developing embedded software for Linux-based systems.
You are comfortable working close to the operating system layer, including kernel configuration, system services, and debugging tools.
You enjoy building reliable and high-performance software using modern C++ and Python.
You collaborate effectively with firmware, hardware, and platform engineering teams.
You communicate clearly across technical stakeholders and contribute actively to architecture discussions.
You are passionate about building robust systems that run in real-world industrial environments.
What You’ll Be Doing
Design and develop embedded software running on Linux-based systems.
Customize and maintain embedded Linux distributions using the Yocto build system.
Configure and debug Linux kernels, system services, and process management.
Develop high-performance applications using modern C++.
Build automation tools and development utilities using Python.
Implement and debug industrial communication protocols such as Modbus (RTU/TCP) and CAN.
Design and maintain secure over-the-air (OTA) update workflows with rollback mechanisms.
Troubleshoot field issues related to networking, timing, hardware communication, and system updates.
Contribute to system architecture decisions and embedded platform design.
Write unit and integration tests to ensure reliability and maintainability.
Participate in code reviews and maintain high engineering standards.
Collaborate in Agile development environments and contribute to sprint planning and delivery.
What We’re Looking For
A proactive and solution-oriented mindset when addressing complex embedded systems challenges.
Strong analytical and debugging skills in hardware-adjacent software environments.
Ability to prioritize tasks and deliver features in sprint-based development cycles.
Curiosity and willingness to continuously learn new tools and technologies.
Strong communication and collaboration skills across multidisciplinary teams.
Technical Requirements
Must-Haves
6+ years of experience in embedded software development.
Strong proficiency in C++ and Python.
Hands-on experience with Embedded Linux environments.
Experience with the Yocto build system for embedded distributions.
Experience with RAUC or similar OTA update frameworks.
Familiarity with system debugging tools such as gdb, strace, and tcpdump.
Experience implementing Modbus (RTU/TCP) and CAN / CAN Bus communication protocols.
Understanding of multithreading, concurrency, and inter-process communication (IPC).
Solid knowledge of networking fundamentals.
Experience with Git workflows and CI/CD pipelines.
Familiarity with containerized development environments such as Docker or Docker Compose.
Nice-to-Haves
Experience with Boost.Asio or asynchronous C++ programming patterns.
Experience with messaging systems such as ZeroMQ or MQTT.
Familiarity with time synchronization systems such as NTP or RTC handling.
Experience implementing A/B partitioning strategies and secure boot chains.
Familiarity with Trunk-Based Development workflows.
Experience with unit testing frameworks such as Google Test.
Experience working with cross-compilation toolchains.
Domain knowledge in electric vehicles (EV), energy systems, industrial automation, or IoT platforms.