Senior Embedded Software Engineer
About You and The Role
As a senior embedded software engineer at Zipline, you will be responsible for building the infrastructure that enables a highly maneuverable aircraft to safely deliver life saving supplies, while staying clear of other aircraft and dodging obstacles not on any map. You will work closely with a range of other disciplines to ensure each aircraft seamlessly transitions from our manufacturing lines to being a participant in the largest drone delivery network in the world.
We are hiring for this role across both our Avionics and Ground Systems embedded software teams. We are migrating from a purely microcontroller-based system to one that blends powerful Linux edge computing (with GPU capabilities), in order to support more advanced perception and autonomy. Depending on your interests and expertise, you may operate as a firmware or Linux expert, or as an embedded generalist floating between on the boundary.
You will help us bridge the gap from proven prototypes to robust, reliable, scaled up systems. Our aircraft are deployed to locations around the world, many not easily accessible, even over a network. You will help build re-usable firmware and software infrastructure that will level up our systems’ observability and reliability, without requiring an equal scaling of our engineering team.
What You'll Do
- Design and build the software architecture necessary to run everything from critical flight software to inter-connected ground-based hardware on embedded Linux systems
- Develop kernel and userspace drivers for production and prototype sensors, and refine sensor data APIs for perception, navigation and other autonomy software engineers
- Design and build the software necessary to run critical flight and safety processes on a network of microcontrollers, from bootloaders to network drivers to embedded applications
- Analyze the runtime characteristics of our avionics software in flight to build confidence in its performance, focusing on re-usable, maintainable software and optimizing where required
- Understand and improve the reliability of the flight software system as a whole, working with hardware and systems engineers to develop comprehensive fault management strategies and hardware-in-the-loop tests
- Develop metrics, monitoring and troubleshooting capabilities to prepare the system for field deployment at scale
- Design and build data collection and testing tools to support early stage evaluation of new sensors, communications systems, and edge compute platforms
What You'll Bring
- Strong software engineering skills, with proficiency in at least one strongly typed language. We use Rust, C++ and Python.
- Curiosity and a willingness to learn and work in a variety of software environments, from kernel module development to lightweight web services and hardware test frameworks. We use Yocto to build our in-house Linux distribution, and FreeRTOS on our microcontrollers.
- Experience building and maintaining real-world deployed embedded systems, and handling the long tail of edge cases to ensure consistently high performance and reliability
- A systems mindset and intuition for debugging; when anything could be wrong, you know how to narrow down the possibilities.
- For firmware specialists, a fluency in implementing peripheral drivers based on electrical schematics and datasheets, and debugging at this boundary in order to support prototype hardware evaluation
- For Linux-level specialists, familiarity with running Linux in resource-constrained environments with real-time requirements; we have an audacious goal of running dense stereo vision algorithms for obstacle detection on our aircraft without compromising the maximum payload size or delivery range.
Our team uses a hybrid in-office and distributed work environment, centered around our headquarters in South San Francisco, CA. You must be able to work from the office on a regular basis.