Embedded Software Engineer - Systems & Architecture
Who we're looking for?
We are seeking an Embedded Software Engineer with a strong foundation in Python, Embedded Systems, and Application Development. You will work on real-time, hardware-integrated systems that power our assistive technology products.
This role is ideal for someone who enjoys working close to hardware, building reliable concurrent systems, and solving complex real-world problems in accessibility and education.
What you will be doing?
As an Embedded Software Engineer, you'll be contributing to a multidisciplinary team developing innovative solutions for accessible education. Your roles will include:
- System Architecture & Ownership
- Own and evolve the overall software architecture across firmware, embedded Linux, and application layers.
- Understand, maintain, and improve an existing embedded codebase for a production device.
- Design modular, scalable systems that support long-lived hardware products.
- Document system design, data flows, and architectural decisions to ensure continuity and maintainability.
- Embedded & Firmware Development
- Design and implement bare-metal and RTOS-based firmware for microcontrollers.
- Build and maintain hybrid systems combining RTOS-based firmware with embedded Linux.
- Manage boot flows including U-Boot, kernel startup, and device initialization.
- Implement and maintain OTA update mechanisms for field-deployed devices.
- Embedded Linux & Platform Engineering
- Customize, build, and maintain embedded Linux images using Yocto.
- Optimize system performance, boot time, and resource usage on constrained hardware.
- Debug system-level issues using serial logs, kernel logs, GDB, strace, and protocol analyzers.
- Application & Concurrency
- Develop Python-based embedded applications interacting with real-time hardware.
- Design multiprocessing and concurrent architectures for:
- Sensor acquisition
- Actuator control (Braille cells, haptics, etc.)
- Audio and speech feedback
- Network and cloud communication
- Hardware & Communication
- Integrate and maintain communication with peripherals using I2C, SPI, UART, USB, and BLE.
- Design reliable BLE communication layers for pairing, control, and data exchange.
- Implement IoT communication using HTTP/MQTT for device-cloud synchronization.
- Collaboration
- Work closely with Product, Hardware, QA, and Content teams to translate user needs into technical solutions.
- Support accessibility-driven design decisions for visually impaired users.
- Mentor junior engineers and contribute to technical best practices within the team.
What you'll need to bring to the table?
- Strong proficiency in C/C++ for bare-metal and RTOS-based development.
- Strong proficiency in Python for embedded and system-level applications.
- Hands-on experience with embedded platforms such as Raspberry Pi, ESP32, STM8 or similar.
- Solid experience with RTOS (e.g., FreeRTOS) and hybrid Linux + RTOS architectures.
- Strong experience with Yocto Project and custom embedded Linux builds.
- Good understanding of bootloaders (U-Boot) and system startup flows.
- Experience implementing or maintaining OTA update systems.
- Hands-on experience with BLE, including pairing and data exchange.
- Experience integrating hardware using I2C, SPI, UART, USB.
- Strong debugging skills in embedded and Linux environments.
Good to have:
- Strong system design and architecture experience for embedded or hardware-integrated products.
- Prior ownership of an embedded product or subsystem in production.
- Experience designing end-to-end systems spanning device firmware, OS, application layer, and cloud sync.
- Experience working with databases such as MySQL, PostgreSQL, or SQLite.
- Familiarity with data modeling, logging, and synchronization in embedded or IoT systems.
- Experience with assistive technologies or accessibility-focused products.