In order to complete the abovementioned tasks, the following skills and experience are required: Experience with at least one of C++/RUST/GOlang; Experience with image processing (CMOS sensor interfaces, ISP pipeline, video encoding); Experience with embedded software development using primarily C for real-time operating systems (RTOS) and multi-threaded Linux environments; Experience working on preemptive, multitasking real-time operating systems or multi-service, multi-threaded Embedded Linux systems; Experience using data structures, algorithms, and design patterns common to embedded (resource-constrained) systems development, object-oriented design principles; Experience with Microcontroller Design and utilization; Experience with underlying electronics to the point where it influences firmware development and debugging; Experience with basic communication protocols common in embedded systems (e.g., UART, SPI, I2C, CAN); Experience with reading schematics and data sheets for components; Experience working with commonly used embedded architectures (ARM, RISC-V), and SoCs (STM32, NXP, Renesas); Experience with one or more scripting languages (Bash, Python) and test frameworks (Pytest, Robot Framework) with experience in SQL; Experience with Git; Experience with CI/CD methods and build systems to manage and evolve products throughout their lifecycle; Experience with Google Suite for business (Sheets, Docs, Slides); Experience working in Scrum/Agile development environment; Experience solving open ended design problems, analyze large datasets and provide strong analysis and details to support evidence-based decision making; and Experience with translating research inputs and open-ended requirements to product features in an incremental and agile way. Senior Embedded Developer (Geotab USA, Inc.) (Madison Heights, MI): Develop an in-depth understanding of the company's IoT devices (such as telematics devices, extendibility products, asset trackers, Video products) firmware and how various modules work; Participate in and advocate for modular, reusable, hardware independent software/firmware development practices and adhere to test driven development principles; Listen and contribute to design discussions, make detailed notes / documentation of requirements and technical design.