Job Description
You will join our best-in-class software development environment for firmware development on mixed-signal, heterogeneous embedded devices. The goal is to give embedded software engineers the modern tools they need to solve problems efficiently, and effectively.
Key Responsibilities
1. Help ensure a meaningful developer experience in tooling, middleware, and technical documentation.
2. Collaborate with hardware IP owners to define requirements and models for various peripherals and system designs.
3. Stay up-to-date with the latest advancements in relevant programming languages, embedded tooling, and open source ecosystems.
4. Identify gaps in current developer tooling, middleware, and technical documentation and develop plans to fill them.
5. Share knowledge of software development tools and embedded software development within the company.
6. Manage multiple projects and oversee deliverables using project management methodologies.
7. Develop metrics and processes for monitoring tooling health and enabling continuous improvements.
8. Resolve issues encountered with existing applications.
9. Collaborate with stakeholders from different locations and adapt work hours based on time zones.
Requirements
1. 10+ years of experience in embedded software development in C, with understanding of differences between various C versions, standard library implementations, and GCC, IAR, and armclang compiler flags commonly used in embedded systems.
2. Experience engaging with and contributing to open source projects.
3. Skillful use of GDB, GCC, and GNU binutils, including ability to build them from source. LLVM and Clang are a strong plus.
4. Significant experience with cmake, make, ninja, and other build systems.
5. Experience with Static Analysis tools.
6. Able to interact with UI/UX designers on application design.
7. Strong fundamentals in data structures and algorithms.
8. Excellent written and communication skills in English.
9. Familiarity with testing methodologies like unit testing, functional testing, performance testing, and integration testing.
10. Good understanding of system monitoring, observability, metrics, and logging.
11. Demonstrated extensive experience with task and defect tracking tools (Jira, etc.).
12. Very strong grasp of version control systems – Git, GitHub, etc.
13. Ability to cross technical boundaries between embedded, desktop, mobile, and web/cloud.
Desirable Skills
1. Experience with Zephyr RTOS.
2. Experience using IAR and/or armclang.
3. Knowledge of Bluetooth Low Energy at the Host and/or Controller level.
4. Experience with audio codecs and audio processing.
5. Familiarity with Golang or Rust for command-line tooling.
6. Familiarity with Typescript or node.js.