Eine der größten Herausforderungen, die sich bei der Entwicklung des AGC ergaben, war die Softwareentwicklung. Die Ingenieure, die beauftragt wurden, den Navigationscomputer zu entwickeln, waren auch damit beauftragt, die nötigen Programme zu erstellen. Es gab jedoch weder Spezifikationen noch konkrete Vorstellungen darüber, was diese Programme zu leisten hatten. Da aber eben diesen Programmen das Leben von Menschen anvertraut werden sollte, mussten zuverlässige Lösungen her. Die Probleme nahmen zu. 1966 wurde klar, dass das MIT es nicht schaffen würde, einen derart leistungsfähigen und zuverlässigen Rechner zu bauen, wie es sich Charles Draper vorgestellt hatte, einen Computer, der die gesamte Navigation übernehmen konnte und dennoch in die Raumkapsel passte. Daher wurde nun die Entscheidung getroffen, die Hauptnavigation vom Boden aus durchzuführen. Der AGC sollte nun nur noch als Backup dienen. Allerdings musste er trotzdem noch die Möglichkeit haben, die Navigation selbstständig durchzuführen: In der Zeit, in der sich das Apollo-Raumschiff hinter dem Mond befand, konnten es die Navigationsinformationen von der Erde nicht erreichen. Außerdem sollte der AGC eben auch dann übernehmen können, wenn die Funkverbindung zur Erde aus irgendwelchen anderen Gründen abbrach. Interviews mit den Entwicklern bezüglich der Software-Thematik und den damit verbundenen Entscheidungen sind in der Dokumentation „Moon Machines” zu finden, und zwar in der Folge „The Navigation Computer”. Diese gegenüber den ursprünglichen Wünschen reduzierten Anforderungen wurden nun mit großem Engagement umgesetzt. Dabei bestand weiterhin das Problem, dass zahlreiche unterstützende Techniken des Software-Engineering noch gar nicht existierten. Zahleiche Aspekte wurden während der Entwicklung angegangen und führten zu neuen Lösungen, wie sich Margaret Hamilton, eine der Software-Entwickler des AGC, erinnert. Margaret Hamilton entwickelte später die Universal Systems Language, USL. Dabei handelt es sich um eine Systemmodellierungssprache mit Parallelen zu UML oder SysML. USL basiert auf den Erfahrungen, die während der Arbeit an der AGC-Software gemacht wurden. Hamilton entwickelte zusammen mit William R. Hackler auch eine integrierte Entwicklungsumgebung, die „001 Tool Suite”, die auf USL basiert und Tools zur Modellierung, Analyse, Simulation und Codegenerierung beinhaltet
[HH2007]
Es ist nachzuvollziehen, dass Hamilton einem solchen ganzheitlichen Ansatz folgte, da während dar Entwicklung der AGC-Software die Arbeit nicht in spezielle Abschnitte wie z.B. Planen, Modellieren oder Implementieren eingeteilt war; die Aufgabe des Entwicklerteams war es eben, die Programme für den Navigationscomputer zu liefern. Diese wenig spezifische Aufgabenstellung gab den Entwicklern aber auch viel Freiheit, die Entwickler wechselten daher häufig ihre Rollen. Auch durch Erfahrungen, die während der Arbeit gemacht wurden, änderte sich die Art der Entwicklungsarbeiten. Hamilton kam aufgrund dieses gesamtheitlichen Ansatzes zu dem Schluss, das ein System ein System ist, egal ob es auf Algorithmen-Ebene, auf Software-Ebene oder auf Ebene des Systems betrachtet wird, welches es ausführt („…a system is a system, whether in the form of higher-level algorithms, software that implements the algorithms, or systems that execute them.”)
[HH2008]. Das Beispiel USL zeigt damit bereits, dass die Erfahrungen, die während Apollo gemacht wurden, sich auch auf dem Gebiet des Software-Engineerings weit über Apollo hinaus ausgewirkt haben. Die Software für den AGC wurde auch in der Phase der bemannten Flüge des Apollo-Programms weiterentwickelt. Die grundlegenden Programme zur Verwaltung von Systemressourcen blieben zwar nahezu unverändert, jedoch hatten die einzelnen Missionen des Apollo-Programms jeweils spezielle Aufgaben bzw. Missionsziele zu erfüllen. Auch war der Umfang der späteren Missionen gegenüber den früheren stark erweitert. So führten z.B. die letzten drei Apollo-Missionen jeweils ein Lunar Roving Vehicle mit sich. Aus solchen Erweiterungen der Missionsziele und den speziellen Aufgaben in den einzelnen Missionen ergab sich der Bedarf an neuer bzw. geänderter Missionssoftware. Die in den bemannten Missionen eingesetzten Versionen sind die folgenden Versionen:
Software
Name
Datum
Einsatz
Colossus 1, build 249
Oktober 1968
Command Module, Apollo 8 und 9
Colossus 2 11
Quellenlage nicht eindeutig
1969
Command Module, Apollo 10
Colossus 2A (Comanche 055)
Juli 1969
Command Module, Apollo 11
Colossus 2C
nach Juli 1969
Command Module, Apollo 12
Colossus 2 (Comanche 072)
nach Juli 1969
Command Module, Apollo 13
Colossus 2E
1970
Command Module, Apollo 14
Colossus 3
Februar 1971
Command Module, Apollo 15-17
Luminary 1, revision 069
Dezember 1968
Lunar Module, Apollo 9 und 10
Luminary 1A, revision 099
Juli 1969
Lunar Module, Apollo 11
Luminary 1B, revision 116
nach Juli 1969
Lunar Module, Apollo 12
Luminary 1C, revision 131
Dezember 1969
Lunar Module, Apollo 13-14
Luminary 1E/G
22
Quellenlage nicht eindeutig
Mai 1971
Lunar Module, Apollo 15-17