Principal Software Engineer - Embedded Developer Tooling
Analog Devices (NASDAQ: ADI) designs and manufactures semiconductor products and solutions. We enable our customers to interpret the world around us by intelligently bridging the physical and digital world with unmatched technologies that sense, measure, and connect.
What is the opportunity?
ADI’s Software and Security Group is expanding and we are looking for a highly skilled Principal Software Engineer to help us solve one of the major challenges facing embedded software developpers today: how do we deal with the pressure of solving increasingly complex technical problems, on increasingly complex devices, in decreasing development timeframes?
ADI is trying to address this problem by creating a modern, best-in-class software development environment for firmware development on mixed-signal, heterogeneous embedded devices. Our goal is to give embedded software engineers the modern tools they need to solve problems efficiently, and effectively, and you can be a key part of shaping what that is and what it looks like.
Drawing upon your demonstrable expertise in embedded software development, you’ll help us by providing technical leadership across a wide variety of domains, including debug, profiling, middleware integration, system config, command-line tooling, toolchain integration, and other related fields.
You’ll join an existing cross-functional team of embedded, front-end and back-end engineers, UI/UX designers, and test engineers, with an aim to significantly move the bar on the embedded software development experience. This is a chance to put in place the kinds of tools and development environment you wish you’d had yourself over your embedded development career, with the resources and remit to build them the way they deserve.
Who are we looking for?
We’re looking for a highly-motived, multi-disciplinary individual with an uncommon mixture of talents who can work well with other team members to co-define and deliver a best-in-class embedded software development environment.
You’ll need significant experience designing, developing, debugging, maintaining complex, real-time heterogenuous embedded software solutions in C, C++, and/or assembly (Arm, RISC-V, etc.).
You’ll need to be familiar with, and able to clearly articulate the value of modern embedded software development best pratices. This includes source management, good code and commit hygiene, build infrastructure management, effective use of embedded testing frameworks, integration of debug and performance monitoring solutions in a CI pipeline, and maintaining high-quality, up-to-date system documentation.
You’ll be familiar with available open source and commercial debug and instrumentation tools, and have defensible positions on their pros, cons and gaps. You need to be able to clearly articulate what features would bring them from usable to useful to good to domain-leading, and articulate steps to get there.
You should care deeply not just that things work well, but that they’re also easy to use and understand. How things look and feel should matter to you, striving to find the right balance between discovery, ease-of-use and exposing necessary complexity. You should appreciate a good data model, and be able to represent complex systems elegantly without sacrificing the nuance and complexity in said systems.
You’ll be curious and technically ambi-dextrous: willing to step across various technical boundaries, and get your hands dirty in a wide variety of areas, helped by the technical expertise and know-how in the rest of the team.
You’ll sometimes be stretched to deliver the best results possible on time, but you’ll also have access to some of the best embedded engineering talent in this field at ADI.
Most importantly, you’ll have mandate to co-define and deliver the tools you’ve always wished you had in your embedded career, and genuinely improve the embedded software development experience for future and current software engineers. If you find all of that exciting, you may be the kind of person we’re looking for.
Key Responsibilities
1. Help ensure ADI delivers a meaningfully differented experience in developer and debug tooling, middleware and technical documentation.
2. Collaborate with other business units, development teams and product managers to evaluate current tooling ecosystems and ensure efficient development and debug on ADI mixed-signal parts, prioritising development resources to fill the right gaps.
3. Collaborate with hardware IP owners in ADI to define requirements and models for various peripherals and system designs.
4. Keep up with the latest advancements in relevant programming languages, embedded tooling, and open source ecosystems (Zephyr, Yocto, etc.)
5. Help identify gaps and define a plan to fill them in current developer tooling, middleware and technical documentation
6. Disseminate your in-depth knowledge of software development tools, and embedded software development within the company.
7. Handle multiple projects and oversee the deliverables using appropriate project management methodologies.
8. Establish metrics and processes for monitoring tooling health, and allowing for continuous improvements.
9. Proactively resolve any issues encountered with existing applications.
10. Work with multiple stakeholders from different locations (EMEA, US East and West) that includes flexing work hours based on time zones
Skills Required
11. 10+ years of embedded software development experience in C, with the ability to understand differences between various C versions, standard library implementations, and GCC, IAR and armclang compiler flags commonly used in embedded systems.
12. Experience effectively engaging with and contributing to open source projects
13. Significant experience with GDB, GCC and GNU binutils, including the ability to build them from source. LLVM and Clang would be a strong plus. Must be comfortable patching and building these types of projects from source.
14. Significant experience with cmake, make, ninja and other build systems
15. Experience with Static Analysis tools
16. Ability to meaningfully interact with UI/UX designers on application design.
17. Strong fundamentals in data structures and algorithms
18. Comfortable with collaboration, open communication, and reaching across functional borders
19. Excellent analytical skills.
20. Excellent written and communication skills in English
21. Good understanding of testing methodologies like unit testing, functional testing, performance testing and Integration testing
22. Good understanding on system monitoring, observability, metrics and logging
23. Familiarity with best practices for the full software development process
24. Demonstrated extensive experience with task and defect tracking tools (Jira, etc.)
25. Very strong grasp of version control systems – Git, Github, etc.
26. Willingness to step outside you comfort zone and cross technical boundaries between embedded, desktop, mobile and web/cloud.
27. Detail and quality oriented. Customers expect technical excellence from us, and this extends from chip design all the way up to the tooling we provide them.
Good to have (but not mandatory):
28. Experience with Zephyr RTOS
29. Experience using IAR and/or armclang
30. Knowledge of Bluetooth Low Energy at the Host and/or Controller level
31. Experience with audio codecs and audio processing
32. Familiarity with Golang or Rust for command-line tooling
33. Familiarity with Typescript or node.js
Required Travel: Yes, 10% of the time
Shift Type: 1st Shift/Days
#LI-CO1
Job Req Type: ExperiencedRequired Travel: Yes, 10% of the timeShift Type: 1st Shift/Days