Terraform is automating on-site construction with robotics and software. Our mission is to make construction primarily software-defined and work towards a future where beautiful, bespoke buildings are built within a single day with minimal labor.
We're in the first days of building the company and we are recruiting for the early engineering team. This is a unique opportunity to be one of the first ten employees at a startup be immersed in a high-growth, high ambition startup environment, and to work with an experienced founding team surrounded by top-tier investors from day 1.
About this role
You’ll help us write software for the various microcontrollers and subsystems that we use to drive our robotics. Example things you’ll be working on:
Define the software and communication architecture in a distributed system with multiple robots while reasoning through various trade-offs.
Write embedded software that takes commands from our planning and control systems and drives actuators to actually move in the right way.
Write code that collects high-frequency, real-time sensor data from multiple microcontrollers and stores them on a centralized machine for later analysis and debugging.
Eliminate or minimize all the friction around dealing with lots of small distributed subsystems. Writing scripts to automate common and repeated tasks should come to you naturally.
What you'll be responsible for
Writing code to enable quick prototyping and evaluation of new hardware and designs for the rest of the team.
Writing, debugging and owning the code running on our microcontrollers such as ESP32s, Arduino’s and uSteppers.
Developing low-level drivers for interfaces like CAN, LIN, I2C, SPI, Ethernet, and Bluetooth.
Troubleshooting and performing root cause analysis of system crashes and other failures.
What we’re looking for
Experience in embedded/real-time software engineering in software systems that interface with hardware systems. You should be comfortable with embedded systems development, microcontrollers, or firmware programming.
Software engineering skills and best practices. You use git for version control, know how to do unit tests or how to automate deployment of your code.
Expertise in embedded C or C++ programming and preferably in Rust.
A solid understanding of embedded computer systems architecture. You’re familiar with RTOS, embedded Linux distro’s and going beyond user space when necessary.
Strong familiarity with Linux systems engineering and conventions. E.g., you’re comfortable around theand directories and know how to get stuff done there.
Knowledge of both high- and low-level communication protocols, from I2C and SPI to CAN and TCP/IP Protocols.
Experience developing comprehensive testing - from unit tests to hardware-in-the-loop tests.
Basic knowledge of electrical engineering fundamentals to support low-level debugging. Ability to read electrical engineering schematics and component datasheets.
B.Sc. in Computer Science or equivalent.