Software Engineer, On Device
Utilidata · Ann Arbor, MI · 1 mo ago
RemoteRemoteEducationFull-time
Responsibilities
- Design, propose, plan, implement, and test resource-constrained, edge software in Python (and possibly lower-level languages, e.g., Rust) including the implementation of precision telemetry collection, real-time control interfaces, and robust system observability
- Create and maintain CI/CD processes as necessary to support development and deployment with a focus on reproducibility, regression testing for embedded systems, and deployment in real-world, intermittently connected environments
- Contribute to internal and external technical documentation
- Collaborate with a cross-functional team of software, hardware, quality assurance (QA), and power systems engineers; data scientists; and leadership
- Provide high-quality, in-depth code and architecture reviews, implement new features, and provide technical leadership while coordinating with project management, QA, and other internal teams
- Continually advocate for and implement process improvement and automation
- Foster a culture of open communication, innovation, and continual improvement
- Mentor other engineers using paired programming, code review, and collaborative test scenario design
Requirements
- 5+ years of professional experience including 3+ years of experience developing production software and systems, or a combination of educational and professional experience commensurate with this level of experience
- Demonstrated ability to design and implement distributed systems utilizing microservices in a resource-constrained environment (edge devices with limited memory, CPUs, GPU capacity, etc.)
- Extensive experience using Python, C/C++, Rust, and the Linux operating system
- Experience with device layered security, i.e. encryption (PKI), disk partitioning, secure boot, os kernel libraries, device drivers, os processes/daemons
- Data compression and schema management for device time series data
- Experience implementing and maintaining CI/CD workflows (e.g., GitHub Actions or Jenkins)
- Strong understanding of synchronous and asynchronous network communication, including REST APIs, gRPC, binary protocols, and distributed publish/subscribe messaging systems and protocols like MQTT and ZeroMQ
- Strong written and oral communication skills, with a proven track record of working effectively both individually and as part of a team
- Experience designing, building and deploying applications and reusable libraries based on the NVIDIA ML software stack on the Jetson Platform
- Experience with system integration testing including HIL and SIL
- Understanding of SQL/NoSQL Database implementations (SQLite, Redis, Postgres, etc)
- Well-versed in Docker/containerization
- Hands-on knowledge of cloud platforms and services focused on IoT device management, security and OTA updates (AWS, Azure) preferably in the scale of million devices including managing release/versioning strategies and monitoring fleet-wide performance metrics
- Experience with control systems applications (e.g. industrial processes, manufacturing, commercial buildings, SCADA) and/or power systems
- Experience working with software and systems deployed in modern data center environments, including telemetry ingestion, rack-level integration, and coordination with orchestration platforms
- Experience with Shell scripting, helm charts, ansible, and prometheus tools
Qualifications
We've received your resume. Click here to update it.