Engineering decisions that changed — and ended — lives

Aviation Failures

Boeing 737 MAX: How a Software Bug Killed 346 People

May 18, 2026·8 min read
Boeing 737 MAX: How a Software Bug Killed 346 People

SounderBruce / Wikimedia Commons / CC BY-SA 4.0

On October 29, 2018, 189 people boarded Lion Air Flight 610 in Jakarta. Families. Business travellers. A child. They were in the air for eleven minutes before the plane hit the Java Sea at full speed.

There were no survivors.

Five months later, 157 people boarded Ethiopian Airlines Flight 302 in Addis Ababa. Six minutes after takeoff, the same thing happened.

346 people. Two crashes. One cause. And Boeing knew.

This is not a story about an unforeseeable accident. It is a story about a software decision made under financial pressure, hidden from the pilots who depended on it, and left unfixed after the first crash killed 189 people.


The Business Decision That Started Everything

In 2011, Airbus launched the A320neo — a more fuel-efficient aircraft that airlines immediately wanted. Boeing needed to respond fast or lose billions in contracts.

The answer was the 737 MAX: an update to their most profitable aircraft. But there was a physics problem nobody wanted to talk about.

The new engines were larger. To fit them on the existing airframe, Boeing had to reposition them — forward and higher on the wing. This changed how the plane flew. At certain speeds, the nose pitched up more aggressively than it should. Left uncorrected, this could cause a stall.

Boeing had two options:

  1. Redesign the airframe. Years of work. Billions of dollars. New pilot certification requirements that airlines would have to pay for.
  2. Write a software fix. Cheaper. Faster. And — critically — it could be classified as a minor system change, meaning pilots wouldn't need expensive new training.

Boeing chose option 2. They called it MCAS: Maneuvering Characteristics Augmentation System.

The business logic was clear. The engineering consequences were catastrophic.


What MCAS Did — and What It Was Supposed to Do

MCAS monitored the plane's angle of attack (AoA) — the angle between the wing and the oncoming air. If that angle got dangerously high, MCAS would automatically push the nose down to prevent a stall.

The logic:

Sensor detects high AoA → MCAS activates → pushes nose down → pilot stays safe

On paper, reasonable. In practice, three design decisions turned a safety system into a death trap.


The Three Decisions That Killed 346 People

Decision 1: One sensor. No backup.

MCAS read from a single angle of attack sensor. Not two. Not three. One.

Every engineer who has built systems where failure matters knows this is wrong. Redundancy isn't a nice-to-have — it's the foundation of safe system design. If the one sensor fails, the entire system acts on false data with nothing to catch it.

Boeing knew there were two AoA sensors on the plane. They chose not to use both. The Senate investigation later found this decision was driven by the desire to avoid additional certification requirements — requirements that would have delayed the programme and cost money.

In the payment systems I've worked on, even non-critical operations have dual validation. A sensor that controls whether a plane crashes was given less redundancy than a routine financial transaction.

Decision 2: Pilots weren't told MCAS existed.

Boeing classified MCAS as a minor system — too minor to mention in the pilot manual. Pilots flying the 737 MAX were not told the system existed.

This wasn't an oversight. Disclosing a new automated system that could override manual flight controls would have triggered a requirement for full simulator training — at enormous cost to Boeing's airline customers.

So when MCAS activated incorrectly, pilots had no context. They were fighting a system they had never been told about, with no documented procedure for handling it, in a situation that had never been disclosed as possible.

Decision 3: MCAS could override pilots repeatedly — and they couldn't stop it.

When a pilot applied nose-up pressure to counteract MCAS, the system paused — then activated again five seconds later. And again. And again. Each time with full authority.

The pilots were in a tug-of-war against software that never tired, never doubted itself, and had access to controls they didn't know existed. At high speed, the aerodynamic forces eventually became too great to overcome manually.


The Crashes

Lion Air Flight 610 — October 29, 2018

The AoA sensor on the aircraft had been misreading for several previous flights. Maintenance crews had replaced a part but hadn't resolved the underlying fault. The error was noted in the aircraft log. The plane flew anyway.

Within minutes of takeoff, MCAS activated on false data. The crew experienced what felt like a runaway stabilizer — a known emergency with a known procedure. But the procedure didn't work, because the cause wasn't what they thought it was.

For eleven minutes, they fought the controls. At 6:31 AM, the aircraft struck the Java Sea. 189 people died.

Boeing's response: an operational bulletin describing the symptoms — without mentioning MCAS. Airlines and pilots were not told what had actually happened or why.

Ethiopian Airlines Flight 302 — March 10, 2019

Five months later. The Ethiopian Airlines crew had read Boeing's bulletin. They were experienced. When MCAS activated, they followed the prescribed procedure exactly — cutting electric trim and attempting manual control.

But MCAS had already deflected the stabilizer to near maximum. At their speed, the aerodynamic forces made manual recovery impossible. They re-engaged electric trim. MCAS activated again.

Six minutes after takeoff, the aircraft entered a near-vertical dive and crashed into a field 62 kilometres from Addis Ababa. 157 people died.

Boeing knew the first crash had happened. They knew the cause. They did not ground the aircraft.


What the Investigations Found

The U.S. House Committee, the Senate Commerce Committee, and multiple international bodies all investigated. Their conclusions were consistent.

This was not bad luck. It was a predictable outcome of specific decisions:

The Senate report described a culture where "the pressure for profit and schedule subordinated safety systematically."

Boeing paid $2.5 billion in settlements. No executive faced criminal charges. The families of 346 people received compensation payments.


What This Means for Anyone Who Builds Software

I've spent years building systems where a single error can fail a payment for hundreds of thousands of people. The failure modes in the 737 MAX are not exotic — they're the mistakes engineers make when moving fast under pressure.

Never build a safety-critical system on a single sensor. Redundancy is not optional when failure is catastrophic.

Never hide automated behaviour from the people who depend on it. Hidden complexity doesn't disappear — it becomes a failure mode waiting for the wrong moment.

The cheap fix is sometimes the most expensive decision you'll ever make. Boeing saved money on airframe redesign and pilot training. The cost was $2.5 billion in settlements, the grounding of their most profitable aircraft for 20 months, and 346 lives.

Regulatory capture kills. When the entity being certified controls its own certification, you don't have safety oversight. You have documentation.


Go Deeper

If this story affected you, these are the resources worth your time:

To understand what went wrong:

To build systems that don't fail this way:

To understand the broader pattern:


Next: The Ariane 5 — how reusing 10 lines of code from the wrong rocket destroyed $500 million in 37 seconds.


Sources:

← Back to all articles