Software Engineer

Berkeley, California
Platform /
Full-time /
On-site
Atomic Machines is on Earth to radically advance humanity’s command over matter.  Our mission is real-time bits-to-atoms manufacturing of anything at any scale, and to that end, we’re developing an entirely new digital micro-device manufacturing platform that is going to redefine how things are made, and do so while simultaneously enabling the rapid creation at any scale of new classes of machines – think medical micro-robotics, true lab-on-chip microfluidics, tunable antennas, ultrafast high-power and high-frequency RF switching devices and many more.  The first device we are building with our platform has exceptional large-scale product/market fit and commercial traction, and we are pushing hard to share it with the world.

Our offices are in Berkeley and Santa Clara, California.

About the Role:

We are seeking a seasoned software engineer who will architect, design, and build any and all code above the embedded level in the software stack, i.e. from the operating system up.

What You’ll Do:

    • Design and build the distributed software system that controls the AMP manufacturing platform: a truly novel fabrication system for micro-devices and components.  Your software will orchestrate all of the activities of the fab, from high-level workflow planning to the code that operates individual robotic nodes and automated material transport.
    • Architect and design complex systems that must scale to very large numbers (e.g. production quantities per unit time), be highly robust (meaning fault tolerant, designed to uptime requirements), high performance and both monitorable and controllable.
    • Work at multiple levels of the software stack, and must be “fluent” at all levels:  operating system (including real-time OS), device drivers, and otherwise communicating with low-level code controlling hardware, network (building distributed systems with complex communication patterns), structured APIs, databases and associated architectures and algorithms.
    • Code in a variety of languages, as needed for the situation.  This role will involve a prolific amount of coding - we’re not looking for an ivory-tower architect type, but a real builder. 
    • Thrive within the Scrum methodology (which means we’re looking for at least excitement from the candidate about the principles, but ideally significant experience building complex software systems in Scrum and an understanding of its benefits).
    • Partner productively with other peer software engineers in team projects.

What You’ll Need:

    • Multi-language fluency
    • Ability to code fluently in multiple languages, at multiple levels of the stack. At Atomic Machines, we primarily use C, C++, Go, and Python. Should have experience with:
    • A high-performance systems language like C, C++, or Rust
    • A compiled, garbage-collected language like Go or Java
    • A scripting language like Python or JavaScript
    • Knowledge of Computer Systems
    • Understanding of how computers work. Our work involves a variety of processors and computing environments – Linux, FreeRTOS, and bare metal. Strong fundamentals help build system context and enable broad contribution. Undergraduate-level knowledge of:
    • Operating systems
    • Networks
    • Concurrency & execution models
    • Computer architecture
    • Experience with system design
    • Experience designing, building, and shipping complex distributed software systems that control hardware in sophisticated ways, as part of a team.
    • Experience with running production software
    • Experience with instrumenting software for observability and debugging.
    • Experience with version control, Infrastructure-as-Code, and DevOps workflows.
    • Bonus points for
    • Familiarity with the fundamentals of robotic systems, such as feedback control systems, motion planning, and computer vision.
    • Familiarity with CAD and CAM software, focusing on geometry engines, toolpath generation, and machining strategies
    • Familiarity with embedded systems programming, particularly for ARM architectures and real-time operating systems (RTOS)
    • Bachelor of Science in Computer Science or a related field. Bonus points for an advanced degree.

Our Technology Stack:

    • Here are some of the tools and technologies we use.
    • These are subject to change - but give some sense of what we work on here.
    • Languages:
    •  C / C++: For embedded, real-time, and performance-critical systems
    •  Go: For concurrent, networked application software
    •  Python: For robotics, computer vision, AI / ML, and scientific computing
    • Deployment Targets:
    •  Dockerized, general-purpose Linux application services (Cloud or On-Prem)
    •  Application software for embedded Linux systems (AMD Xilinx Kria KR260)
    • Realtime on control on STM32s peripheral boards
    • Realtime control on KR260 Cortex-R5s
    • Proprietary real-time networking on KR260 Cortex-R5s
    • Other tools
    •   Ansible: Infrastructure-as-code, configuration management, application deployment
    •   Protocol Buffers / gRPC: Interface definition language & serialization format for networked software
    •   Grafana, Prometheus, Loki: Observability platform 
    •   Xilinx and Lattice FPGAs: Proprietary realtime communication bus
$150,000 - $220,000 a year
The compensation for this position includes equity and benefits.