Embedded Software Engineer (General)
The job description
Tech stack. C/C++, RTOS or bare-metal, microcontroller peripherals, I2C/SPI/UART drivers, debugging with JTAG/SWD, oscilloscopes, low-power design, version control, static analysis
About the role
You will write the software that runs directly on hardware in connected devices, working where every byte of RAM and every microamp of current matters. Embedded software engineers here own firmware from board bring-up through production: peripheral drivers, application logic, communication stacks, and the power management that determines real battery life. You will debug with oscilloscopes as often as software debuggers, read schematics alongside source code, and develop an intuition for what the hardware is actually doing beneath your abstractions. It is demanding, concrete engineering where your code has physical consequences you can measure with instruments.
What you will achieve
- Deliver production firmware for connected devices: peripheral drivers, application logic, and communication stacks, all validated on real hardware
- Bring up new boards efficiently: clock configuration, peripheral initialization, and debug interfaces working within days of hardware arrival
- Achieve aggressive power targets through sleep mode architecture, peripheral gating, and careful firmware design validated with current measurements
- Debug hardware-software issues spanning both domains: correlating scope captures with code execution to find root causes quickly
- Build reusable driver libraries and board support packages with clean APIs and documentation that accelerate every future product on the platform
What you will bring
Must-haves
- 2 to 5 years writing embedded software in C or C++ with code running on real shipping hardware in customers' hands
- Experience with microcontroller peripherals: GPIO, timers, ADCs, DMA controllers, and interrupt-driven software architectures
- Familiarity with communication protocols: I2C, SPI, and UART implementation plus debugging with logic analyzers
- Ability to read schematics and datasheets carefully to write correct drivers for unfamiliar hardware
- Debugging skills with JTAG/SWD probes, plus comfort correlating firmware behavior with oscilloscope measurements
- Understanding of memory-constrained design: static allocation strategies, fragmentation avoidance, and fitting within small flash and RAM footprints
- BS in Electrical Engineering, Computer Engineering, or Computer Science
Nice-to-haves
- RTOS experience: FreeRTOS, Zephyr, or ThreadX, including task design and inter-task communication patterns
- Familiarity with wireless stacks: Bluetooth LE, WiFi, or LoRa integration on resource-constrained devices
- Knowledge of bootloaders and secure firmware update mechanisms for field-deployed devices
- Experience with low-power wireless sensor applications and system-level energy budgeting
Google
Meta
Apple
Microsoft
Amazon
Oracle
Netflix
NVIDIA