Software Engineer
Role details
Job location
Tech stack
Job description
Monumental are automating on-site construction with robotics and software. Atrium, our operating system for construction, lets us do everything from building walls with our robots, to designing buildings, managing our robot fleet, analyzing data, and much more. Our stack is broad by necessity: we use Rust for many things from robot middleware to back-end services, TypeScript across our web app and internal tools, and NixOS to manage our servers as well as the computers in our robots.
As we're deploying more robots and software, we're always running into new challenges. The problems are often not straightforward: poor connectivity on a construction site because of interference, a memory leak that only becomes an issue after hours of runtime, a robot behaving differently than the simulation. This means a lot of creative problem solving is involved. One of our engineers even traced down a problem to a memory leak in Chrome, which got fixed soon after he submitted a bug report.
Additionally, because we're scaling our operations, the scope of our software also keeps growing. We're now building internal apps for scheduling robot operators, planning site logistics and maintenance, and improving manufacturing. To make these applications possible, we need well-architected software and reliable software infrastructure.
To help us build, improve, and maintain our platform, we're looking for a strong generalist software engineer. Full stack at Monumental is really full stack, from the firmware for our robot's actuators to our in-house document database. You'll get a lot of autonomy and the chance to build software that builds actual robots and houses. You'll also get the chance to collaborate with other engineering disciplines (e.g. electrical, mechanical) to support new robot features or debug issues. For more on how we think about the role, read Bouke's post on his experience joining Monumental as a software engineer.
What you'll do
- Shipping features across the full stack from robot firmware and Rust services up through the web UI, touching multiple layers.
- Hardening production systems by tracking down subtle bugs like memory leaks, network backpressure issues, or race conditions that only show up in real deployments.
- Owning our infrastructure end-to-end (bare-metal servers, NixOS configs, deploy tooling, …) so that shipping changes to a robot on-site or a service is fast and reliable.
- Building observability across our entire fleet so when something goes wrong on a robot or a service, the team immediately knows where to look and why.
- Building tools that multiply the whole team's effectiveness such as debugging tools, data visualization tools, or a platform that allows non-technical people to create their own apps.
- Improving our data infrastructure, from our in-house typed document database to ClickHouse.
Requirements
- Industry experience building and deploying production systems in multiple languages (Rust experience is valuable but not required)
- A strong sense of ownership and motivation. You're able to drive problems and projects start-to-finish without someone project managing you, and can thrive in a chaotic environment.
- Familiarity with Linux systems and conventions. E.g., you're comfortable SSH'ing into other machines to figure out why something isn't working.
- Knowledge of common communication protocols, e.g. UDP, TCP and WebSockets
- Strong CS or mathematics foundation. Understanding basic linear algebra and 3D transformations is a strong plus.
- A high percentage of our software team have been a technical founder, CTO, or founding engineer before. If that's your background, you'll likely fit in. But we also get excited by people with a demonstrated background of shipping impressive work at any type of company.