Software Engineer - Test Systems & Automation
Ouster · San Francisco, CA · 2 wk ago
On-siteEducationFull-time
Key Responsibilities
- Develop Hardware Abstraction Layers: Implement and scale Python-based software wrappers to cleanly separate test sequence logic from lower-level instrument drivers (e.g., power supplies, digital multimeters, spectrometers).
- Apply Modular Design: Utilize modern software design patterns (e.g., Factory, Strategy, Wrapper) to ensure test code remains flexible, future-proofed, and easy to maintain as instrumentation evolves.
- Maintain Code Quality: Write clean, readable, and type-hinted Python code. Actively participate in peer code reviews and maintain structured Git-based development workflows.
- Data Pipelines & Station Reliability: Optimize Data Flow: Implement and debug high-volume data pipelines that package and stream local parametric test data securely into centralized manufacturing databases and execution systems.
- Build Fault-Tolerant Code: Write defensive software routines, including intelligent retry logic, exception handling, and local data buffering to prevent station downtime during intermittent network or server disruptions.
- Triage & Troubleshooting: Analyze test station execution logs to systematically diagnose whether a failure on the line stems from a software bug, instrument communication dropout, or a genuine product defect.
- Automation & Test Rigor: Automate Test Sequences: Develop multi-instrument automated test workflows using concurrent or multi-threaded Python concepts to minimize station cycle times.
- Software Validation: Write unit tests and implement software mocking frameworks to validate the stability of your test code before deploying updates to a live production line.
Required Skills & Qualifications
- Education: Bachelor’s degree in Computer Science, Computer Engineering, Software Engineering, or a related technical discipline with a strong programming foundation.
- Professional Experience: 3+ years of experience writing production-grade software (ideally Python) interacting with hardware or processing data streams.
- Strong Python Foundation: Solid proficiency in core Python, including a clear understanding of decorators, higher-order functions, custom exceptions, and context managers.
- Instrument Interfacing: Direct experience communicating with hardware instruments using standard protocols like SCPI, PyVISA, Serial (RS-232/485), TCP/IP sockets, or Modbus.
- DevOps & Infrastructure: Solid day-to-day comfort operating in Linux/Unix environments, utilizing Git for version control, and working with Docker containers.
- Data Competency: Practical experience writing and optimizing SQL queries (e.g., PostgreSQL, SQLite, or MariaDB) to handle high-frequency logging.
Preferred Qualifications
- Familiarity with Test-Driven Development (TDD) or building software simulations/digital twins for hardware components.
- Basic understanding of optical components, cameras, laser safety, or computer vision libraries (OpenCV).
- Experience supporting manufacturing lines or hardware prototyping cycles in electronics, automotive, or robotics industries.