Margaret Hamilton

Margaret Hamilton is an American computer scientist, systems engineer, and business owner; and a former director of the MIT Instrumentation Laboratory which developed on-board flight software for NASA's Apollo programme.

She is credited with the name "software engineering".

Apollo space programme

It quickly became clear that nothing and no one could be expected to be perfect.

In the run up to Apollo 8 Margaret's daughter, Lauren, joined her one evening or weekend. While "playing astronaut", she crashed the simulation by selecting the pre-launch (P01) program during flight. When she raised this possibility with the NASA and MIT staff, she was told "well, it's never going to happen because the astronauts are so well trained; it's just not going to happen". It happened the very next flight.

When there were no answers to be found, at times we just had to make it up, and we had to design things to work the first time.

On Apollo 11, just before landing on the moon, onboard software identified that the CPU was approaching overload and wouldn't have enough time to perform landing functions, causing the system to clear out its running process queue and allow only the highest priority processes to run until the landing was completed. A checklist document instructed astronauts to place the rendezvous radar switch in the wrong position, consuming available resources.

On Apollo 12, lightning struck the spacecraft twice whilst it was on the pad prior to launch, causing power failures. The software restarted the mission functions, enabling the launch to proceed.

After separating from the command module in lunar orbit, Apollo 14's LM began receiving an ABORT signal from a faulty switch, as if a piece of solder had become dislodged and wedged between the switch contacts. To prevent the ascent and descent stages from separating, the hard-wired software had to be worked around by fooling the system into believing an abort had already happened. The workaround was in place mere minutes before ignition.


USL is a modelling language influenced by an ongoing evaluation of the Apollo project. It aimed to be preventive rather than curative: completing the interface design, factoring in aspects such as function, object and timing into System-Oriented Object definitions.