Follow my new blog

Freitag, 14. Dezember 2007

OOP 2008: Gesetze der Softwareentwicklung III

Abgesehen mal von der Frage, was eine gute, nein, eine optimale SOA ist, lohnt auch die Frage, wie denn ein Unternehmen überhaupt zu dieser SOA kommen kann? Ich glaube, zu ihrer Beantwortung können einige "Gesetze der Softwareentwicklung" beitragen.

Gesetz 1 sagt, dass optimale Strukturen, also auch optimale serviceorientierte Architekturen überhaupt nur für bekannte Anforderungen entworfen werden können. Das mögen Sie als trivial ansehen, dennoch ist es hilfreich, diese Basislinie zu haben. Und keine Sorge, Gesetz 2 macht die Sache schon spannender: Selbst wenn es für gegebene Anforderungen eine oder wenige gleichwertige optimale Strukturen geben sollte, dann lassen sich die nicht aus ihnen ableiten. Unser Verständnis bekannter Anforderungen ist einfach zu begrenzt. Ja, ich meine, dass wir selbst vorliegende Anforderungen allermeistens nur unzureichend verstehen; von den (noch) unbekannten Anforderungen, d.h. davon, dass Anforderungen immer im Fluss sind, also niemals vollständig bekannt, rede ich gar nicht erst.

Das glauben Sie nicht? Sie meinen, wasimmer Sie aus einem Kunden mit der Hebammenkunst des Requirements Engineering herausgekitzelt haben, verstehen Sie auch in seinen Implikationen und können deshalb eine optimale Struktur dafür entwerfen. Gut, dann unterliegt das Ergebnis der Implementation dieser optimalen Struktur immer noch

Gesetz 3: Optimale Strukturen werden nie verlustfrei implementiert

Sie kennen das Spiel: Am Anfang stehen gute Vorsätze, aber was aus ihnen wird, ist eine andere Sache. Wie Clausewitz schon sagte: Kein Plan überlebt den Kontakt mit dem Feind. Eine optimale Struktur ist aber ein Plan, ein Vorsatz für die Realisierung von Software. Und der Feind... der ist das Tagesgeschäft. Am Anfang einer Iteration/eines Release sind Motivation und Zuversicht groß. Am Ende, wenn es auf die Auslieferung zugeht, ist die Motivation hoffentlich immer noch groß, aber die Zuversicht hat Dämpfer bekommen. Meist werden Sie am Ende einer Timebox nicht die geplanten Features ausliefern. Sie werden (hoffentlich) immer noch Wert für den Kunden produziert haben, aber nicht den, den Sie anfänglich geplant hatten. Das betrifft nicht nur die Zahl der Features, sonder vor allem die interne Struktur ihrer Implementation.

Der Grund dafür ist einfach: Es existiert ein Wertekonflikt. Auf der einen Seite der Wert "Funktionalität für den Kunden" und auf der anderen Seite "Qualität der Implementationsstruktur". Und welcher dieser Werte wird, wenn die Zeit knapp ist, höher geschätzt? Sie wissen es aus eigener Erfahrung nur allzu genau. "Funktionalität für den Kunden" ist im Zweifelsfall immer der Gewinner. Wenn die Uhr merklich tickt, dann verfallen wir nicht nur in physischen Gefahrensituationen auf Verhaltensweisen, die sich seit der Steinzeit eingeschliffen haben, sondern auch wenns im Virtuellen brenzlig wird. Copy&Paste als Reflexhandlung, hier noch schnell etwas dazustricken, damit es läuft, dort mit "Ja, ich weiß, das ist jetzt nicht optimal und nicht so, wie wir´s geplant hatten, aber es funktioniert halt erstmal." entschuldigen. So funktioniert Softwareentwicklung in immer engen Zeitplänen auf der ganzen Welt. Nicht schön, aber is´ halt so.

Der Kunde ist König. Der Kunde sieht keine internen Strukturen. Also wird poliert, was der Kunde sieht und wünscht. Ob die langfristig optimalen Strukturen dabei erhalten bleiben, ist im Zweifelsfall egal. Zweifelsfälle, d.h. Entscheidungszwänge am Ende von Zeitplänen, sind allerdings die Regel. Also ist auch Suboptimalität die unvermeidliche Regel. Wider jeden besseren Willens.

In der Suboptimalität einrichten

Was bedeutet das für eine SOA? SOA, also Architektur im Großen, muss sich wie jede andere Softwarestruktur in der Suboptimalität und damit im Vorläufigen einrichten. Oder postmoderner ausgedrückt: Wer auf den SOA-Zug springt mit der Hoffnung, endlich der Wahrheit ein Stück näher zu kommen, der hechelt (wieder) einer Illusion hinterher. Es gibt sie nicht, die Wahrheit der Softwarearchitektur, die eine oder andere für das Unternehmen oder auch nur eine Applikation optimale Architektur.

Es gibt immer nur temporär angemessene Strukturen, die noch nicht einmal wie geplant implementiert werden können. Insofern ist jeder real existierender Code immer suboptimal in der einen oder anderen Hinsicht. Immer. Unausweichlich. Vor allem, solange man an ihm noch zu einem anderen Zweck als der Optimierung seiner Struktur in Bezug auf währenddessen konstante und durch langwierige Implementation inzwischen wohlbekannte Anforderungen hält.

Im Kern jeder SOA, d.h. der Manifestation der SOA-Prinzipien oder überhaupt irgendwelcher Architekturprinzipien muss daher Anpassungsfreundlichkeit stehen. Design for Change ist nie wichtiger gewesen. Design for Change ist quasi die Metaebene der Agilitätsgrundsätze.

Das bedeutet aber natürlich nicht, dass Sie keinen Plan haben sollten. Das bedeutet auch nicht, dass es keine guten oder weniger guten Architekturen für bekannte Anforderungen gibt. Es bedeutet nur, dass Sie kein Gefühl von Angekommen entwickeln sollten. Architektur ist die Kunst der Strukturierung und Ordnung des ewig Vorläufigen.

Egal, welche Technologie Sie heute einsetzen, egal, welcher Schule Sie folgen... das alles wird veralten und Ihre Implementationen sind zu erneuern.

Und was bedeutet das für schon existierende Strukturen? Dazu mehr bei Gesetz 4 der Softwareentwicklung.

Keine Kommentare: