BLOG
Lost in Translation:
Mars Climate Orbiter Disintegration
- February 2, 2026
In September 1999, NASA’s Mars Climate Orbiter arrived at the red planet after a nearly ten-month journey through the dark voids of space. The ground control team held their breath, waiting for the spacecraft to fire its engines, enter orbit, and begin sending back data.
Instead, the orbiter entered the atmosphere at the wrong angle and immediately burned up into expensive space dust.
The investigation revealed that the mission didn’t fail because of a mechanical breakdown. It failed because of a missing boundary verification between two pieces of software.
Metric vs. Imperial: The Ultimate Showdown
The software system was built by two different teams. The engineers at Lockheed Martin built the ground station software using English imperial units (Force was calculated in pound-seconds). The engineers at NASA built the onboard navigation software using Metric units (Force was expected in newton-seconds).
One pound-second is roughly equal to 4.45 newtons.
Every time the ground software calculated a thruster adjustment, it sent the data over the fence. The onboard software took those numbers and plugged them straight into its calculations without verifying the unit boundaries. It assumed a “1” was a newton, when it was actually a pound.
Ground Software (Pound-Seconds) ---> [ No Translation / Validation ] ---> Onboard Software (Expected Newtons)
The Compound Effect
Because the numbers were off by a factor of 4.45, the orbiter’s thrusters fired far too powerfully over the course of the ten-month voyage. By the time it reached Mars, it was 100 kilometers lower than its minimum safety boundary.
The Lesson for Modern Web Devs
You might not be building Mars orbiters, but you are building APIs. This disaster is the exact reason why we test data contracts. When your frontend sends data to a backend, or your microservice talks to a third-party gateway, you must test what happens when data scales or formats mismatch.
If your API expects cents and someone sends dollars, or your system expects kilograms and gets pounds, does your code validate it? Or are you about to burn up your own project in production?