Wer iterativ entwickeln will, hat ein grundsätzliches Problem: Er weiß nicht, ob er in der Zukunft eine Anforderung erhält, die es notwendig machen wird, Grundannahmen umzuwerfen. Das kann im extremsten Fall dazu führen, dass große Teile des Produkts nachträglich verändert werden müssen. Dieses Wissen treibt viele Softwareentwickler zu der Überlegung: Man müsste ein Framework entwickeln, das möglichst robust ist, sodass man möglichst flexibel auf zukünftige Wünsche eingehen kann.Dieser Ansatz wird immer wieder versucht, immer wieder entstehen neue Frameworks, immer wieder wird zu Anfang eines Projekts in der Produktentwicklung versucht vorherzusehen, was möglicherweise in der Zukunft auf uns zukommen könnte.Gehen wir das Thema doch mal von einem anderen Standpunkt aus an. Stellen wir uns einfach mal vor, wir müssten heute eine Applikation anpassen. Eine Applikation, die wir nicht selbst geschrieben haben, die wir überhaupt erst zum ersten Mal sehen. Wir wissen nur, dass wir etwas Grundsätzliches an der Applikation ändern müssen, da der Kunde ein vollkommen neue Anforderung hat. Was würde uns in dieser Situation als Entwickler helfen, die Veränderungen an der Software schnell und sicher, zufriedenstellend für alle, durchzuführen?
Nun - wir müssten die Applikation, mit der wir es zu tun haben, verstehen. Richtig? Wir steigen also in den Keller unserer Applikation, in die Eingeweide und versuchen zu ergründen, was diese Software tut, wie die Dinge zusammenhängen. Grob: Wir wollen die Frage beantworten, wie dieser "Organismus" Applikation im Detail funktioniert.Vergleichbar ist das mit der Arbeit von Archäologen. Wenn diese zu ergründen suchen, wie vergangene Kulturen gelebt und gearbeitet haben, können sie die Menschen von damals nicht direkt fragen. Wir wollen genauso wie die Archäologen herausfinden, was die Softwareentwickler vor uns getan haben.Uns als Software-Archäologen würde es
Bei dem Vortrag, den ich vor einigen Tagen vor 80 Softwarearchitekten gehalten habe, fragte ich diese Gruppe, wie ein solcher Zustand in unseren Applikationen zu erreichen sei. Sie gaben mir eine Liste von 5 Punkten:
Ich stelle mir vor, ich wäre Software-Archäologe und würde diese Situation in der mir anvertrauten Applikation vorfinden. Das wäre doch toll. Ich hätte die Chance sehr schnell zu verstehen, um was es geht. Die Zusammenhänge innerhalb der Software wären leichter erkennbar oder durch Wegweiser ausgewiesen. Ich könnte mich in Baby-Steps durch die Applikation hindurch bewegen. Und wenn ich etwas falsch mache, würde das sofort auffallen, weil ich den Testcode habe.So und nun schauen wir nicht mehr als Software-Archäologe auf die Situation, sondern von meiner heutigen Situation in die Zukunft. Ich selbst bin es, der möglicherweise die Applikation in der Zukunft verändern muss. Also wieso mache ich es mir nicht selbst einfach in der Zukunft etwas zu ändern. Ja, ich muss dafür möglicherweise heute etwas sorgfältiger und klarer und deutlicher arbeiten, aber das macht sich doch in der Zukunft mehr als bezahlt.Agile Architektur bedeutet nicht, die besten robustesten Patterns zu benutzen oder alles vorherzusehen. Ihr Wesen liegt darin, dass man die Applikation so leicht und schnell wie möglich ändern kann.