Software-Architektur
Freitag, 01.06.2018
Auch in der Software-Entwicklung gibt es eine Architektur, ähnlich wie beim Bau eines Hauses. Die Architektur wird durch besonders geschulte und erfahrene Software-Entwickler festgelegt, die auch Software-Architekten genannt werden. Als potentieller Auftraggeber oder als Agentur müssen Sie in der Lage sein, zu erkennen, ob ein Softwarehaus über Architekten verfügt oder nicht. Dazu kann dieser Artikel hilfreich sein.
Die Architektur umfasst alle essentiellen Entscheidungen über
- die Organisation eines Software-Systems
- die Auswahl der Elemente, aus denen es besteht
- ihre Schnittstellen zueinander
- die Komposition der Elemente zu komplexeren Subsystemen
- den Stil, in dem das System organisiert ist (z.B. durch die Verwendung von bestimmten Software-Patterns)
Der Architekt
- beschreibt, wie die verschiedenen Elemente eines Systems sich zueinander verhalten
- schlägt konkrete Plattformen für die bislang abstrakt gehaltenen Anforderungen vor
- kennt die Technologien und Tools, die man für die Aufgabe einsetzen kann
- fällt strategische Entscheidungen
- ist visionär, sprich: Seine Entscheidungen gehen über den gegenwärtigen Bedarf des Projekts hinaus
In modernen Architekturen werden Aussagen zu verschiedensten Themenbereichen getroffen, wie zum Beispiel:
- Verteilung
- Konkurrenz (Multithreading, Multiprocessing)
- Skalierbarkeit
- Transparenz
- Sicherheit
- Integration von Systemen
- Automatische Konfiguration
- etc.
Software-Architekten benötigen einerseits ein sehr breit gefächertes technologisches Wissen, andererseits sehr tiefe Kenntnisse der einzelnen Bereiche, über die Entscheidungen getroffen werden. Ein Architekt muss wissen, wie sich bestimmte Konzepte und Technologien in der Praxis verhalten.
Es liegt auf der Hand, dass beim heutigen Fachkräftemangel ein besonders großer Mangel an gut ausgebildeten und erfahrenen Software-Entwicklern herrscht, die die Rolle des Architekten eines Software-Systems übernehmen können. Die Situation wird dadurch verschlimmert, dass die Firmen immer weniger in die Personalentwicklung in diesem Bereich investieren. Die sinnvollste Maßnahme in dem Bereich ist nämlich relativ teuer: Entwicklern zu gestatten, einen Teil ihrer bezahlten Arbeitszeit für "freie Projekte" zu verwenden.
In diesen freien Projekten werden Skills ausgebildet, die dem Unternehmen später wieder weiterhelfen können. Zum Beispiel können die Entwickler verschiedene Technologien testen und kommen dadurch in die Lage, über den Einsatz der Technologien qualifiziert zu entscheiden. Dadurch werden aus Entwicklern Architekten.
Firmen, die sich freie Projekte leisten, können hochqualitative Software-Entwickler halten, selbst wenn Sie nicht unbedingt Spitzengehälter zahlen. Hier zählt der Spaß an der Arbeit als wesentlicher Faktor der Lebensqualität.
Projektentwicklung im Blindflug
Die anderen – und das ist leider die Mehrzahl – stürzen sich quasi im Blindflug in ihre Projekte. Dabei werden meist die Projektaufwände unterschätzt. Um dann das Projekt dennoch fertigzustellen, wird hinter der schönen Kulisse gefrickelt und geflickt. Das erzeugt immense Folgekosten. Das System ist zwar irgendwie fertiggestellt, aber es ist fragil. Wehe, wenn Sie eine Änderung daran vornehmen wollen. Dann fällt das Kartenhaus in sich zusammen und es kostet einen hohen Aufwand, wieder etwas Lauffähiges daraus zu produzieren.
Es ist also nicht damit getan, immer den günstigsten Anbieter für ein System zu wählen, oder denjenigen, der schnell und flexibel neue Anforderungen umsetzen kann. Es kommt darauf an, zu prüfen, ob ein Anbieter eine Idee hat, wie er das System flexibel, erweiterbar und wartbar gestalten will. Diese Idee sollten Sie im Vorfeld abklopfen, und wenn Sie nur die drei Begriffe als Echo hören, sollten Sie von einem solchen Auftragnehmer absehen.
Überspezifizierung
Wir haben regelmäßig mit Unternehmen zu tun, die ihre Systeme überspezifizieren. Sie wollen ein zusätzliches Datenfeld im Export der ERP-Daten? Schreiben Sie ein Software-Design-Dokument und einen Testplan, reichen Sie die Änderungsanforderung ein und auf der Sitzung des Entwicklungsteams in vier Wochen wird über Ihre Änderung diskutiert. Leider entstehen Rückfragen, sodass Sie die Dokumente überarbeiten müssen und auf die nächste Sitzung warten müssen...
Hier stellt sich natürlich die Frage, wozu der ganze Aufwand gut sein soll. Es ist simpel das Anfügen einer weiteren Information im Export-Code. Das sollte in 15 Minuten ohne Seiteneffekte machbar sein.
Hieran sieht man, dass Architektur manchmal bedeutet, dass weniger mehr ist. Und es braucht Leute mit Erfahrung und Entscheidungskompetenz, die abgrenzen können, wann das der Fall ist und wann nicht. Oder um es mit den Worten von Martin Fowler zu sagen, einem bekannten Autor im Bereich der Software-Architektur:
Ich denke, dass eine der wichtigsten Aufgaben eines Architekten darin besteht, die Architektur zu entfernen, indem man Wege findet, die Unumkehrbarkeit in Software-Designs zu beseitigen.
Unumkehrbarkeit
Das ist eine Aufforderung, Entscheidungen zu vermeiden, die zu starren, unabänderlichen Systemen führen. Hier ist ebenfalls Erfahrung gefragt, zu erkennen, wenn Entscheidungen nach Starrheit und Unabänderlichkeit "riechen".
Gerade im ERP-Bereich fällt mir auf, dass die Systeme häufig so konfiguriert sind, dass spätere Erweiterungen und Änderungen verbaut sind. Beispiel: Es gibt eine Tabelle ohne Primärschlüssel (das begegnet uns immer wieder). Sie können deshalb Datensätze nicht eindeutig identifizieren. Sie wollen, dass ein Primärschlüssel angelegt wird? Vergessen Sie es! Niemand wird das Risiko auf sich nehmen, eine solche Änderung vorzunehmen, weil niemand weiß, was dann passiert.
Hier füllen Ordner mit Software-Design-Dokumenten ganze Wandschränke, aber es hilft nichts, weil im Fall des Falles niemand abschätzen kann, wie sich eine Komponente verhält, wenn eine Änderung vorgenommen wird.
Wir hoffen, dass Sie als potentieller Auftraggeber oder als Agentur, die einen Partner für die Programmierung sucht, anhand dieses Artikels ein paar Stichworte an die Hand bekommen, die Ihnen helfen, den Unterschied zwischen verschiedenen Anbietern zu erkennen – solchen mit und ohne Software-Architekten.