Warum?
“Hogarama goes IoT” war ein internes Learning Friday Projekt. Wir haben auch technisch einiges gelernt, sei es Keycloak Integration in OpenShift und Angular (siehe Egors Keycloak Artikel) oder DB-Schemaverwaltung mit Flyway und JBoss. Alles in Allem war in unserem Fall das Scheitern bezüglich der Projektziele nicht schlimm. So ein Projektverlauf ist aber keine Seltenheit in der IT und es ist interessant zu hinterfragen wie es dazu kommt.
Frederick P. Brooks hat in seinem Klassiker “The Mythical Man Month” einem Phänomen ein Kapitel gewidmet, das zu unserem Scheitern beigetragen hat:
The Second System Effect
Bei der ersten Generation von Hogarama wussten wir nicht wie es geht, was auf uns zukommt. Wir haben es Stück für Stück entwickelt und getestet. Bei der zweiten Generation wollten wir alles richtig und besser machen. Und das sofort. Wir haben gedacht, jetzt wüssten wir, wie es geht. Alle Teile wurden neu designed. Over Engineering statt KISS (Keep It Simple and Stupid) Prinzip.
Kopplung und Kompatibilität
Besonders schädlich hat sich ausgewirkt, dass wir für “Hogarama goes IoT” gleich zu Beginn die Schnittstelle zwischen Sensor/Pumpe Komponente (Raspberry, Arduino) und Serverteil geändert haben. Dadurch war ein Test der einen Komponente nicht ohne die andere Komponente möglich oder in Produktion zu setzen. Die neuen Komponenten wurden unmittelbar eng gekoppelt, anstatt sich zu überlegen, ob es nicht möglich wäre vorübergehend kompatibel mit der originalen Lösung zu bleiben.
Dieses Verhalten sehe ich in vielen Projekten. Ist es Bequemlichkeit, Unwissenheit, Ignoranz oder vermeintliche Kostenersparnis? Will man sich nicht mehr mit “altem Schrott” auseinandersetzen? Projekt- oder Produktentwickler und -entwicklerinnen überlegen sich nicht ob oder wie es möglich wäre eine neue Version einer Software kompatibel mit der alten zu halten. Die mittelfristigen Auswirkungen werden nicht berücksichtigt oder als “unvermeidlich” hingenommen:
- Automatische Tests brechen und müssen angepasst werden
- Komponenten müssen gleichzeitig entwickelt werden
- Komponenten müssen beim Deployment gleichzeitig migriert bzw. installiert werden
Lose Kopplung beschränkt sich nicht auf die Architektur der Komponenten, sondern umfasst auch den Entwicklungsprozess.
Work in Progress
Mit dem Thema Kopplung hängt auch zusammen an wie vielen Aufgaben das Team gleichzeitig arbeiten muss. Eine hohe Anzahl an unfertigen Teilen schadet dem Projekt. Es wird instabil und die Implementierungsgeschwindigkeit sinkt. Einzelne Aufgaben sollen möglichst schnell abgeschlossen werden. Unter “Abgeschlossen” verstehe ich “In Produktion”, siehe Artikel Professionelle Softwareentwicklung: Basics. Wenn sich daher die Architektur nicht um lose Kopplung kümmert und nicht auf Kompatibilität achtet, kommt das Projekt auch durch hohe “Work in Progress” ins Schwimmen.