Advocate for best practices for firmware development, including source code control, continuous integration, coding standards, and unit testing. Define internal processes and standards.
- understand behavior of legacy code in order to troubleshoot bugs or extend features.
- define requirements for development and testing tools. Define new ways to use existing tools in order to improve development processes.
- select algorithms and design patterns considering embedded system constraints.
- break down user and technical stories into smaller tasks. Provide accurate estimates for task completion time. Assist others in breaking down stories and improving their estimation.
- work with product management to define user and technical requirements.
- review and implement protocols for interacting with backend and mobile software.
- read schematics and component datasheets to understand requirements for hardware driver implementation. Provide recommendations to hardware engineers for component selection based on firmware needs.
- use hardware tools such as multimeters and oscilloscopes to bring up firmware on new boards.