Für jeden, der mit der Erstellung von Software zu tun hat, ist es hilfreich, sich ein grundlegendes Wissen über Konzepte der Softwarearchitektur anzueignen. Unabhängig davon, ob das Ziel ist, ein Softwarearchitekt zu werden, wird Basiswissen in diesem Bereich sehr geschätzt und ist daher ein wertvoller Bestandteil im Lebenslauf. Dies ist insbesondere für Freelancer und Consultants interessant, da diese regelmäßig Bewerbungszyklen durchlaufen.
Die Softwarearchitektur verhilft mit bedachten Entscheidungen, eine möglichst langlebige, stabile und sichere Software zu erstellen. Wie auch in der Architektur von Gebäuden braucht es mindestens eine Person, die den Gesamtüberblick behält. Diese Person kümmert sich darum, dass ein sicheres, stabiles Haus entsteht, dass an alle wichtigen Teile gedacht wird und diese am Ende auch zusammenpassen.
Wie an etlichen unterhaltsamen Bildern verschiedener Konstruktionsfehler zu erkennen ist, sind wir während des Doings oft blind gegenüber schlechten Lösungen. Die Fehler werden erst am Ende bemerkt. Diese Feuertreppe und weitere fragwürdige Bauwerke sind in einer Sammlung auf Steemit zu finden.
Wenn schlechte Entscheidungen getroffen werden oder auch nur falsch kommuniziert wird, dann sollte nicht blindlings diesen Anweisungen gefolgt werden. Deshalb ist ein Wissen über die Softwarearchitektur auf allen Ebenen wichtig. Auch der Softwareentwickler sollte grundlegende Entscheidungen verstehen, bewerten und diskutieren können.
Architektur nur für Architekten?
Die Softwarearchitektur befasst sich mit dem High Level Design, einer Softwarekomponente oder der ganzen Landschaft. Je nach Unternehmensstruktur können verschiedene Rollen in der Architektur Mitspracherecht haben. Der Architekt kann unabhängig agieren, aber auch Teil eines Scrum Teams sein. Es gibt jedoch auch weitere Rollen wie Technical Product Owner, Technical Lead, oder Lead Developer, die eine Architektur-Beteiligung haben können.
Für Einblicke in den Beruf des Softwarearchitekten und die verschiedenen Ausprägungen empfiehlt sich die Interview-Reihe von Eberhard Wolff: Beruf Software Architektur.
Ausprägungen des klassischen Architekts
Je nach Rolle und Einsatzgebiet ist die Architektur auf unterschiedlichen Flughöhen zu finden. Die Rolle des Systemarchitekts ist sehr codenah, da dieser sich auf eine einzelne Komponente fokussiert und sehr detailliert an der Erstellung mitwirkt. Dazu gehören die Umsetzung von verschiedenen Design Pattern, Code Reviews und die Weitergabe von Expertise an das Team. Es gibt jedoch auch Ausprägungen der Architekturarbeit, die auf einer so hohen Abstraktionsebene liegen, dass eventuell nur die Programmiersprache einer Komponente bekannt ist. Diese High Level Designs liegen meistens im Aufgabenbereich von Enterprise-Architekten. Hier werden oftmals organisationsweit Softwarekomponenten zusammengeführt.
Eine Mischung der beiden ist der Solution-Architekt, der über mehrere Teams agiert, aber auch sehr detailliert arbeiten kann. Es gibt in manchen Fällen dedizierte Architekten zu Technologien oder bestimmten Aspekten, wie zum Beispiel einen Security- oder Cloud-Architekten.
In dem Artikel Types of Architects von Nikolay Ashanin werden weitere Arten von Architekten und ihre Aufgaben erläutert. In der Berufswelt werden die Rollenbezeichnungen und Aufgabenbereiche nur sehr inkonsequent genutzt. Deshalb sollte bei einer Bewerbung immer erfragt werden, wie das Unternehmen diese Stelle, ihre Aufgaben und die zugehörige Verantwortung versteht.
Kernkompetenzen in der Softwarearchitektur
Durch die unterschiedlichen Ausprägungen der Architekten-Rolle fallen auch die Aufgabenbereiche unterschiedlich aus. Die Aufgaben lassen sich in die folgenden drei Kerngebiete unterteilen: Technologisches Können, Softskills, und Organisation.
Am naheliegendsten sind die technischen Aufgaben in der Softwarearchitektur. Hierbei gibt es eine Unzahl an Themen, die relevant werden können. Es sollte ein breites, grundlegendes Wissen vorhanden sein, was die gängigsten Architekturen und Technologien angeht. Diese technischen Konzepte müssen nicht bis ins kleinste Detail verstanden werden. Wichtig ist, zu wissen, wann sie relevant werden können und sich dann gezielt einzulesen. Wenn zum Beispiel das Unternehmen ein eigenes, großes Rechenzentrum besitzt, ist ein grobes Verständnis der Cloud trotzdem von Vorteil. Falls bei der Planung eines neuen Projekts eine hohe Verfügbarkeit weltweit gefordert ist, würde das Bewusstsein präsent sein, die Cloud dafür zu nutzen. In dem Fall können genauere Details ausgearbeitet und evaluiert werden.
Ergänzend zu den breit aufgestellten Grundlagen sollte eine tiefgehende Einarbeitung in relevante Themenbereiche stattfinden. Diese beinhalten zum Beispiel bereits verwendete Technologien im Unternehmen. Mit diesem Wissen können dann zum Beispiel für bestehende Projekte Risikoanalysen durchgeführt werden. Daraus abgeleitet können neue Sicherheitskonzepte entworfen werden. In diesem Kerngebiet empfiehlt es sich besonders, regelmäßig aktuelle Nachrichten und Updates zu konsumieren. Da es unzählig viele technische Konzepte gibt, befinden sich im nächsten Abschnitt ein paar erste Anlaufschritte, um einen passenden Einstiegspunkt zu finden.
Zunächst geht es jedoch um Softskills. Diese sind nicht zu vernachlässigen. Es ist sehr wichtig, dass die getroffenen Entscheidungen angemessen kommuniziert, begründet und diskutiert werden. Zusätzlich sollte eine offene Feedback-Kultur herrschen, denn sonst wird die Lösung nicht akzeptiert oder verstanden. Wenn das der Fall ist, sind Fauxpas wie deplatzierte Elemente auch in eine Softwarekomponente schnell eingebaut. Ein sehr großer Anteil der Arbeit beinhaltet Kommunikation. Nicht umsonst gibt es dedizierte Fortbildungen zum Thema Softskills für Softwarearchitekten. Egal, ob im Gespräch mit Stakeholdern, der Projektplanung oder den Teams, eine gute Kommunikation ist essentiell und gehört zu den alltäglichen Aufgaben.
Die Kategorie Organisation lässt sich zusätzlich unterteilen in die Handhabung von Arbeitsergebnissen und die Selbstorganisation. Alles, was entworfen und entschieden wird, muss dokumentiert werden. Hierfür wird meistens ein Wiki wie zum Beispiel Confluence verwendet. Dort sollten im besten Fall nicht nur die finalen Ergebnisse festgehalten werden, sondern auch der Weg dorthin. Weshalb ein scheinbar gleich gutes Konzept dann doch verworfen wurde, könnte später bei Umbauten doch wieder relevant werden.
Die Selbstorganisation spielt in der Softwarearchitektur ebenfalls eine große Rolle. Es empfiehlt sich, ein gutes, privates System auszuarbeiten, in dem Aufgaben strukturiert werden und Ideen, sowie Wissensstände, notiert werden können. Hierbei ist es egal, ob dies mit Hilfe eines physikalischen Notizbuchs oder einer Plattform wie Notion geschieht. Es sollte zusätzlich einen dedizierten Ort geben, um Notizen zu strukturieren, die erst später relevant werden. Für einen Braindump empfiehlt es sich, stets ein nicht öffentlich einsehbares Medium zu verwenden, damit es nicht zu Verwirrungen mit der tatsächlichen IST-Stand Dokumentation kommt.
Die ersten Schritte: Theoretisches Wissen aufbauen
Eine solide Grundlage an theoretischem Wissen ist für die Softwarearchitektur essentiell. Hierbei ist es, wie bereits erwähnt, nicht unbedingt nötig, jedes Konzept auswendig zu kennen. Oft reicht es, verschiedene Konzepte zu verstehen und zu wissen, wann sie zum Einsatz kommen. Wenn eine Lösung erforderlich ist, sollte dann gedanklich eine grobe Vorauswahl möglich sein. Auf Grundlage dessen kann dann recherchiert und eine gute Entscheidung getroffen werden.
Es stehen für jede präferierte Lernmethode sehr viele Quellen zur Verfügung. Ganz klassisch finden sich in der Technikabteilung eines gut bestückten Buchladens einige empfehlenswerte Werke, um sich ein sehr solides Wissen anzueignen. Der Vorteil an Büchern ist, dass hierbei Themengebiete ausführlich abgedeckt werden. Erstellt man sich selbst einen Lernplan, können Themen komplett untergehen. Außerdem hat man mit Büchern auch stets das passende Nachschlagewerk zur Hand. Empfehlenswert sind unter anderem Effektive Softwarearchitekturen von Gernot Starke und Architektur für Websysteme von Daniel Takai. Aufbauend darauf lohnen sich spezifische Bücher, wie zum Beispiel zu den Design Pattern, API-Design oder Sicherheitskonzepten.
Das Internet bietet selbstverständlich auch unzählige Möglichkeiten, sich weiterzubilden. Es gibt viele gute Online-Artikel, zum Beispiel auf Heise, Medium, Host Europe, oder einzelnen Blogs. Hier sind unter anderem der persönliche Blog von Martin Fowler und der Knigge für Softwarearchitekten sehr lesenswert.
Für visuelle Lerntypen eignen sich Konferenzvorträge und Kurse sehr gut. Hierbei kann jeder für sich entscheiden, ob der Lerneffekt vor Ort oder Online größer ist. Einige Konferenzen laden ihre Vorträge auch kostenfrei auf YouTube hoch. Die Plattform bietet generell sehr viele Videos zu technischen Themen. Vielleicht braucht es nur manchmal etwas, bis man ein Format findet, das informativ ist und gut produziert. Für unterhaltsam gestaltete Updates zu Technologien und Programmiersprachen ist Fireship sehr empfehlenswert. Kurze, informative Videos zum Thema Systemdesign bietet ByteByteGo.
Eine weitere Möglichkeit, sich Wissen anzueignen, sind Podcasts. Dafür benötigt man jedoch am meisten Disziplin, um beim Hören nicht abgelenkt zu werden oder nicht zu versuchen, Multitasking zu betreiben. Es kann auch schwierig sein, zu einem bestimmten Zeitpunkt gezielt Wissen wiederzufinden, ohne die ganze Folge erneut zu hören.
Von der Theorie zur Praxis
Wissen verfestigt sich am besten, wenn es einen direkten Anwendungsfall gibt. Hierbei ist egal, ob wir uns Theorie aneignen, um diese umzusetzen oder direkt von bestehenden Architekturentscheidungen zu lernen.
Als ersten Schritt bietet es sich an, eigene Projekte zu evaluieren. Dabei spielt es keine Rolle, ob es sich um private oder bezahlte Projekte handelt und ob diese neu oder alt sind. Zum Beispiel kann rückwirkend analysiert werden, was gut und was schlecht gelöst ist. Was sind Vor- und Nachteile von Alternativen? Wie sinnvoll sind die Lösungen in Bezug auf Ressourcen, Kosten und verfügbarer Zeit? Das Umfeld hat auch einen großen Einfluss auf die bisherigen Entscheidungen. Das Wissen um bestimmte Programmiersprachen oder Technologien im Team, aber auch die Kosten von verschiedener Software oder zum Beispiel Cloud Hosting schränken die Auswahlmöglichkeiten ein.
Da die Softwarearchitektur auf verschiedenen Flughöhen stattfindet, kann zum Evaluieren ein möglichst einfacher Einstieg gewählt werden. Ist bereits viel Programmierwissen vorhanden, ist es leichter, sich zu Beginn in Bibliotheken oder Programmier-Pattern einzuarbeiten. Bei Vorwissen aus dem Management fällt es zum Anfang ggf. leichter, Kosten und Risiken zu analysieren. Persönliche Interessen und Stärken helfen, einen guten Einstieg zu finden und von dort Wissen aufzubauen.
Viel praktische Erfahrung kann über technische Diskussionen und Refinements gesammelt werden. Verschiedene Vorschläge und Perspektiven helfen zum einen, sich Wissen anzueignen, aber auch an Softskills in diesem Bereich zu arbeiten. In den Diskussionen müssen die verschiedenen Lösungen abgewogen und gut kommuniziert werden. Hierbei geht es auch darum, miteinander eine Lösung zu finden. Der Stereotyp des Architekten im Elfenbeinturm, der fernab der Praxis seine Entscheidungen trifft, sorgt nicht dafür, dass Entscheidungen gemeinsam getragen werden. Der Blickwinkel und Erfahrungen von Kollegen können die eigene Berufserfahrung stark bereichern. Ein Austausch ist daher auch abseits des direkten Arbeitskreises sehr sinnvoll.
Wenn die Möglichkeit besteht, ist es sehr wertvoll, einen bestehenden Softwarearchitekten als Mentor zu suchen. Von diesem können die ersten kleinen Aufgaben in sicherem Umfeld übernommen werden. Nach und nach kann die Unterstützung dann erhöht werden. Dies sollte natürlich immer in Absprache mit dem Team passieren, sodass keine Arbeiten liegen bleiben. Je nach Bedarf in der Abteilung kann nach einiger Zeit zum Beispiel auf eine Architekturstelle in Teilzeit gewechselt werden.
Vieles an praxisnahem Wissen lässt sich aneignen, unabhängig von der aktiven Erstellung von Architekturen. Hierbei hilft es, verschiedene Projekte kennenzulernen. Das passiert automatisch beim Wechsel von Firmen, Abteilungen oder Projekten. Insbesondere im Consulting erlebt man die unterschiedlichsten Projekte und Strukturen.
Dieser Einblick in andere Welten kann auch über Gespräche, Vorträge und Interviews geschehen. Gerade bei Einblicken in andere Firmen können Konzepte wie Conway‘s Law sichtbar werden. Dieses besagt, dass das Systemdesign immer die Kommunikationsstrukturen des Unternehmens widerspiegelt. Gerade die Umgebung und die Ressourcen haben einen großen Einfluss auf dieselben Lösungen. Microservice ist nicht gleich Microservice und in vielen Fällen nicht mal besonders Micro. Aber nicht nur aus neuen Welten kann viel gelernt werden. Die Wartung eines alten Monolithen zeigt bei Änderungen schnell die Auswirkungen von Kopplung und Kohäsion.
Für die Zukunft: Den eigenen Lebenslauf anreichern
Im letzten Schritt geht es darum, das gesammelte Wissen repräsentativ in den Lebenslauf zu bringen. Da an der Softwarearchitektur viel Verantwortung hängt, sollte die bisherige Erfahrung sehr deutlich werden. Egal ob für ein Freelancing-Projekt oder für eine Festanstellung, zählt es, mit dem vorhandenen Wissen zu punkten. Aufgeführt werden sollte unter anderem, mit welchen Architekturen bereits gearbeitet wurde (das Stichwort Microservices ist hier immer sehr gern gesehen).
Wer etwas Geld in die Hand nehmen möchte, kann die CPSA-Zertifizierung des ISAQBs ablegen. Die Prüfung des Foundation Levels ist auch ohne das zugehörige Training möglich. Eine gute Vorbereitung ist für den Multiple Choice Test dennoch von Nöten, um die Nuancen der Formulierungen gut zu verstehen. Mit ungefähr €300 stehen die Prüfungskosten in sehr gutem Verhältnis zum Mehrwert im Lebenslauf.
Anders hingegen sieht es hier mit dem Advanced Level aus. Für dieses ist mehr Zeit- und Geldaufwand nötig. Für die Teilnahme an der Prüfung müssen in verschiedenen Modulen Punkte gesammelt werden. Die Module sind sehr breit gefächert, und der Inhalt ist über den ISAQB qualitätsgesichert. Die minimale Anzahl liegt bei drei Kursen, die jeweils ungefähr €2500 kosten. Die Prüfung gleicht einer akademischen Arbeit, die über Monate ausgearbeitet und abschließend verteidigt werden muss. Die Prüfungskosten sind hier zusätzliche €2500. Die Prüfungs- und Trainingskosten können natürlich von der Steuer abgesetzt werden, trotzdem bleibt es ein großes Investment, was Zeit und Geld betrifft. Ob dieses Investment im Lebenslauf letzten Endes aussagekräftig genug ist, ist schwer abzuschätzen.
Generell ist es jedoch hilfreich, anzugeben, wenn diese oder andere Trainings im Bereich der Softwarearchitektur besucht wurden. Hiermit kann eine Bewerbung Interesse und Willen zur Weiterbildung ausdrücken. Für Bewerbungen ist die praktische Erfahrung immer am aussagekräftigsten. Das heißt, insbesondere für Projektarbeit sollten die Details zur Architektur und den Technologien genauestens aufgezählt werden. Wenn verstärkt in technischen Diskussionen mitgewirkt wurde oder Architekturaufgaben übernommen wurden, sollte das unbedingt in den Tätigkeiten reflektiert werden.
Einstieg in die Softwarearchitektur – Fazit
Wer an der Erstellung von Software beteiligt ist, kann an den meisten Stellen von Wissen im Bereich der Softwarearchitektur profitieren. Die Softwarearchitektur befasst sich mit dem High Level Design, einer Softwarekomponente oder einer ganzen Landschaft. Abhängig von der an der Architektur beteiligten Rolle fallen unterschiedliche Aufgaben an.
Je nach Arbeitseinsatz sind unterschiedliche Fähigkeiten wertvoll. Abseits von Analysen, Dokumentationen und dem Erlernen von technischen Konzepten sind auch Softskills und Organisation ein großer Bestandteil im Arbeitsalltag.
Die Softwarearchitektur ist eine sinnvolle Bereicherung im Lebenslauf. Daher lohnt es sich, mit kleinen Architekturarbeiten anzufangen, von bestehenden Projekten zu lernen und vielleicht auch einen Blick auf die verschiedenen Trainings- und Zertifizierungsmöglichkeiten zu werfen.
In diesem Sinne: Happy Software Designing!
Titelmotiv: Bild von Innova Labs auf Pixabay
- Selbstorganisation im IT-Alltag mit Notion - 18. Oktober 2023
- Erste Schritte für den Einstieg in die Softwarearchitektur - 10. Juli 2023
- Vuex vs. Pinia: Ein direkter Vergleich - 16. November 2022