Architekten und Entwickler
Rainer Eschen beschreibt in einem aktuellen Blog Artikel die Probleme in der Kommunikation zwischen Architekten und Entwicklern:
The architect tries to limit project risks. So, she uses future-proofed designs containing abstractions. This can help to reduce maintenance efforts. But, when presenting such designs to developers, you may be surprised by bad attitude: “This is too complex to implement”.
Ganz richtig stellt er fest, dass Kritik von Entwicklern an einem Architekturentwurf auf Fehler in der Architektur hindeuten können, und dass es zu den Aufgaben des Architekten gehört auf die Entwickler zuzugehen, für die Architektur zu werben und sie z.B. mit Hilfe von Beispielen zu erläutern. Ebenfalls richtig: Entwickler lernen abstrakte Entwürfe zu verstehen und in Code zu gießen:
Architects may have to separate the design into different and simpler views. To present concrete examples, that describe all the abstractions, can help here. There are two aspects in it: the current requirements and their concrete realization – to find examples for this is easy – and examples that show how the future can be, to give an idea of reusability. For this you’ve to read between the lines of your customers and may use requirements experiences from the past to get realistic examples.
Aber bei all dem fehlt ein wesentlicher Punkt, eine wesentliche Aufgabe des Architekten: Eine Architektur zu entwerfen, die den Fähigkeiten der Entwickler entspricht. Was hilft eine wunderbares Design? Das elegant all die technischen Probleme löst, die das Projekt zu bewältigen hat, erweiterbar und zukunftssicher ist? Wenn die Entwickler nicht in der Lage sind es zu implementieren? Jeder Architekt, der immer wieder auf Unverständnis bei den Entwicklern stößt sollte sich dringenst fragen, ob das Design nicht vereinfacht werden kann. Ob nicht ein einfacheres Design bis auf weiteres ausreichend ist. Gegebenenfalls um es später durch Refactorings zu verbessern, wenn die Entwickler ihre Erfahrungen gesammelt haben und selbst erkennen können, wie ein abstrakteres Design ihnen helfen könnte.
Und jeder der im Jahre 2008 ein Team mit Entwicklern und Architekten hat, sollte sich dringend fragen, ob er nicht wichtige Entwicklungen in der Branche verpasst hat. Wieso implementiert der Architekt seinen Entwurf nicht zusammen mit einem Entwickler. Wer könnte es schneller und zuverlässiger implementieren, als derjenige, der es im wesentlichen erdacht hat? Wie ließe sich das Verständnis für die Architektur besser schulen, als bei ihrer Umsetzung beteiligt zu sein?
In meiner Erfahrung eine der ‘Lehren’ aus agilen Prozessen, die wirklich Früchte tragen, wenn sie gelebt werden: Einerseits Pairprogramming als Mittel den Code zu verbessern und Teammitglieder zu coachen und andererseits das Verständnis, dass es nicht um ‘meine Aufgabe / deine Aufgabe’ im Projekt geht, sondern darum Probleme zu lösen. Wenn Architekten und Designer getrennt sind von der Gruppe der Entwickler führt dies fast immer zu mehr oder weniger starker Abgrenzung. Nur zu schnell wird eine kleine Schwäche im Design, egal ob real oder eingebildet, als Zeichen der Unfähigkeit des Architekten erkannt, wenn man die Frau nur vom Telefon kennt. Ganz anders, wenn man gemeinsam vor dem Rechner gesessen hat und gegenseitig gesehen hat, was der andere kann.
Also erzeugt keine Gruppen in eurem Projektteam wenn ihr nicht müsst. Es gibt keinen Grund Architekten und Entwickler personell oder womöglich sogar räumlich zu trennen. Die Kollegen, die schneller, bessere Designs liefern werden sich auch ohne formalle Trennung um eben dies kümmern können, aber werden dabei nicht durch vermeidbare Kommunikationsprobleme behindert. Davon gibt es genügend, die nicht oder nicht so einfach zu vermeiden sind.
Hi Jens,
ich bin nicht der Meinung, daß die Architektur für Entwickler erdacht wird, sondern um die Anforderungen des Kunden zu erfüllen. Entwickler müssen genauso Bereitschaft zur Weiterbildung zeigen, wie alle anderen im Team auch
. Über Deinen Refactoring-Ansatz kann man sicher diskutieren, um einige Schwächen im Team auszugleichen. Leider sind die Projekte nur selten so aufgestellt, daß ich Zeit für ein solches Refaktoring bekomme. Deshalb setze ich hier auch lieber auf Erfahrung und mache die Architektur lieber gleich “richtig”.
Ich bin tatsächlich jemand, der selbst mit implementiert (auch paarweise). Wer aber den Job des Architekten ernst nimmt, der wird feststellen, daß neben der Entwicklung von Entwürfen und Koordinierung der Entwickler, Besuchen bei Kunden und Abstimmung mit dem Management, nicht wirklich ausreichend Zeit bleibt für’s Entwickeln. Es bedarf deshalb der Hilfe der Entwickler. Ein Architekt, der ein Haus baut, mauerst schließlich auch nicht selbst.
Die enge Zusammenarbeit aller im Team und eine entsprechende Kommunikation ist natürlich Voraussetzung für den Erfolg. Wobei nicht alle im selben Gebäude sitzen müssen
.
Gruß Rainer
Guten Morgen Rainer,
vielen Dank für deine Antwort.
Es ist natürlich richtig, dass die Architektur dazu dient die Anforderungen des Kunden zufriedenzustellen. Wenn die Entwickler sie aber nicht umsetzen können, hilft dies dem Kunden auch nicht.
Wenn man dies dadurch erreicht, das die Entwickler lernen – Wunderbar. Es geht kaum besser. Wenn es aber zu den Aufgaben des Architekten gehört, die Entwickler aufzuschlauen, halte ich die gemeinsame Arbeit an der Architektur und ihrer Umsetzung für eins der, wenn nicht das beste Mittel.
Was ich allerdings massiv hinkt, ist der Vergleich mit dem Bauhandwerk. Der ist wirklich noch einen ganz eigenen Artikel wert.