Researches, designs, develops, tests, debugs and modifies software that is embedded within products such as consumer electronics, computer peripherals and mobile telephones to enable the products to function. Consult with other engineers regarding the interface between hardware and software, development of PC applications to control the sensors, and debugging and troubleshooting of hardware and software such as printed circuit board assembly (PCBA) during board bring up, application programming interface (API), and software development kit (SDK). Document requirements, firmware architecture and communication interfaces. Develops and executes test plans and scripts to ensure new firmware meets specifications, functionalities, and performance requirements. Interfaces with users and potential customers to define system requirements and support integration of products into customer systems. Familiar with machine language, assembly language, and other programming languages (e.g. C, C++, etc.). May participate in all aspects from detailed programming to high-level system design.