the Mars Climate Orbiter
loreprogrammingops culture
The 1999 Mars probe lost because one team's software spoke pound-force seconds and the other expected newton seconds.
On September 23, 1999 the orbiter hit the Martian atmosphere far too low and was destroyed: ground software from Lockheed Martin reported thruster impulse in imperial pound-force seconds while JPL's navigation expected metric newton seconds, and months of tiny trajectory errors compounded silently. NASA's mishap board turned it into the definitive parable of interface contracts. Units are part of the type; the universe does not do implicit conversion.
The Mars Climate Orbiter was lost on 23 September 1999 because one team supplied thruster impulse figures in pound-seconds while the receiving software expected newton-seconds. The spacecraft approached far lower than intended and did not survive the atmosphere.
The interesting failure is not the units. It is that this was a well-known category of error with a well-known defence, and the defence was not applied at the interface between two organizations. Within each team the units were consistent and correct; the mismatch lived in the handoff, which is precisely where nobody's checklist ran and everybody assumed the other side had been explicit.
That pattern generalizes well beyond spacecraft. Interfaces between teams are where specifications go unstated, because inside a team the shared context makes them invisible, and the cost of writing them down feels higher than the cost of assuming. Typed quantities that carry their units, explicit contract tests at boundaries, and review that focuses on handoffs rather than on components are the responses, and they are all unglamorous work that nobody schedules until something is lost.