-
Own assigned firmware features or components from requirements analysis through design, implementation, integration, verification, and defect resolution.
-
Independently learn existing code, hardware interfaces, development tools, and system behavior; identify the right technical resources and ask focused questions when needed.
-
Develop maintainable embedded software in modern C++ using sound object-oriented design, clear interfaces, and appropriate error handling.
-
Collaborate with systems, hardware, FPGA, software, and architecture teams to clarify requirements, evaluate tradeoffs, and resolve cross-functional issues.
-
Use debuggers, emulators, analyzers, logs, and other diagnostic methods to isolate complex software and hardware interaction problems.
-
Create unit and integration tests, contribute to automated testing, and support continuous integration to improve software quality and regression coverage.
-
Participate in design and code reviews; provide constructive feedback and incorporate review input promptly.
-
Estimate, plan, and track work through user stories; communicate status, risks, dependencies, and technical blockers early and clearly.
-
Follow applicable quality processes and produce clear technical documentation that supports design traceability, testing, and long-term maintenance.
-
Work effectively with globally distributed teams and contribute to consistent design and architectural improvements across MR platforms.
-
Bachelor's degree, or equivalent practical experience, in Computer Engineering, Electrical Engineering, Computer Science, or a related field.
-
5+ years of professional experience developing embedded or firmware software.
-
Strong C++ programming skills, including object-oriented design, memory management, concurrency fundamentals, debugging, and writing maintainable production code.
-
Hands-on experience developing software that interacts with hardware, real-time systems, device interfaces, or resource-constrained embedded platforms.
-
Proven ability to learn unfamiliar technologies and codebases independently, break down ambiguous problems, and deliver results with minimal guidance.
-
Experience with embedded development and diagnostic tools such as debuggers, emulators, protocol or logic analyzers, and system logs.
-
Experience with Linux-based development environments, source control such as Git, and build or container-based workflows.
-
Experience with continuous integration, automated testing, and disciplined software review practices.
-
Clear written and verbal communication skills, including the ability to explain technical decisions, raise risks, and collaborate across functions.