Anforderungen und Organisation
Software hat einzig den Zweck geschäftliche Anforderungen wirtschaftlich umzusetzen. Diesem Zweck entsprechend sollte die Zeit von der Erhebung einer wertschöpfenden Anforderung bis zu ihrer Nutzung minimiert werden. Es gilt also, den Gesamtprozess zu optimieren, den die Anforderung durchläuft:
Anforderung mit IT-Experten kommunizieren, damit diese sie verstehen und so korrekt und zügig umsetzen können.
Anforderung umsetzen, als Software programmieren
Umsetzung überprüfen (Unit-Test)
Neue erstellte Software mit existierender Software integrieren
Die fehlerfreie Integration überprüfen (Integrationstest)
Das neue Stüdk Software in Betrieb nehmen, der Nutzung zuführen
- Was ein Softwareentwickler verdient, ...
... hängt nicht nur von Qualifikation und Berufserfahrung ab. Entscheidend ist auch, in welcher Branche er arbeitet und in welcher Region der Arbeitgeber angesiedelt ist. Das ergab eine aktuelle Gehaltsanalyse von Personalmarkt, die knapp 4200 Entwicklerdaten auswertete. - ... verdienen Softwareentwickler im Durchschnitt in Deutschland.
Damit liegen sie deutlich über Systemadministratoren. Im Vergleich zu Beratern verdienen Entwickler aber schlechter. - In Banken verdienen Entwickler ...
... mit knapp 65.000 Euro im Jahr mit Abstand am besten. - Auch Versicherungen ...
... vergüten ihre Softwareentwickler mit durchschnittlich 60.763 Euro im Jahr noch überdurchschnittlich. - In der Medizintechnik erwarten Entwickler ...
... mit einem Jahresverdienst von 60.588 Euro auch sehr gute Verdienstperspektiven. - Im Versandhandel ...
... müssen Entwickler sich dagegen mit gut 46.000 Euro im Jahr begnügen. - Genauso schlecht sind die Gehaltsperspektiven ...
... von Entwicklern in Forschungsinstitutionen ( 45.753 Euro) ... - ... und in Bildungsinstitutionen.
Hier können Softwareentwickler mit 45.000 Euro im Jahr rechnen. - Die hippe Werbebranche ist in Sachen Bezahlung gar nicht hip.
In Werbe- und PR-Agenturen bekommen Entwickler nur knapp 43. 000 Euro im jahr und damit 21.000 Euro weniger als ihre Kollegen, die in einer Bank arbeiten. - ... erhalten Softwareentwickler, die Personalverantwortung haben.
Damit zeigt sich: Führung zahlt sich aus. Leitende Entwickler verdienen fast doppelt soviel wie Entwickler ohne Personalverantwortung. - ... erhalten Softwareentwickler ...
... in mittelständischen Firmen, die zwischen 101 und 1000 Mitarbeiter beschäftigen. - ... verdienen Softwareentwickler ...
... dagegen in großen Unternehmen, die mehr als 1000 Mitarbeiter beschäftigen. Auch für andere IT-Berufe gilt: Je größer das Unternehmen, desto höher ist die Vergütung. - ... bekommen Softwareentwickler ...
... nach sechs bis neun Jahren Berufserfahrung. Einsteiger beginnen bei gut 41.000 Euro im Jahr. - ... verdienen erfahrene Softwareentwickler, ...
... die schon neun Jahre und länger in ihrem Beruf tätig sind. - Aber auch der Firmensitz beeinflusst die Gehälter der Entwickler.
Die besten Verdienstaussichten eröffnet Hessen beziehungsweise die Bankenmetropole Frankfurt: Hier können sie mit 61.000 Euro rechnen. - Auch in Baden-Württemberg, hier im Bild Stuttgart, ...
... werden Softwareentwickler überdurchschnittlich mit einem Jahresgehalt von knapp 59.000 Euro bezahlt. - In München und Bayern ...
... bekommen Entwickler mit 57.300 Euro auch noch mehr als im Rest der Republik. - Berliner Entwickler ...
... können im Durchschnitt mit knapp 52.000 Euro rechnen und liegen damit genau im Mittelfeld. - In Magdeburg und Sachsen-Anhalt ...
... sind die Verdienstchancen dagegen deutlich schlechter: Entwickler müssen sich mit knapp 42.000 Euro begnügen und verdienen damit 20.000 Euro weniger als ihre Kollegen in Hessen. - Auch in Erfurt und Thüringen ...
... erhalten Entwickler mit 41.300 Euro knapp 20.000 Euro weniger als im benachbarten Hessen. - Rostock und Mecklenburg-Vorpommern bilden das Schlusslicht ...
... in Sachen Entwickler-Vergütung: Hier erhalten Programmierer 40.000 Euro.
Eine Anforderung kann grundsätzlich eine oder mehrere Schichten der Architektur aus Abbildung 1 betreffen. Die Änderung des Verhaltens eines Eingabefeldes kann beispielsweise lediglich die Benutzeroberfläche, die Änderung einer Gültigkeitsregel für ein Datenbankfeld lediglich die Datenhaltungsschicht betreffen.
Häufig betreffen Anforderungen allerdings sämtliche Schichten, wie zum Beispiel die Hinzunahme eines neuen Feldes "email" für die Beschreibung von Personen. Dieses Feld wird vermutlich auf der Benutzeroberfläche angezeigt, vielleicht ist sogar die Möglichkeit der Veränderung des E-Mail-Eintrags vorgesehen, die Erlaubnis für die Veränderung ist vielleicht durch fachliche und organisatorische Regelungen bestimmt, betrifft also auch die Schicht der Geschäftslogik.
Im Falle von Anforderungen, die sämtliche Schichten betreffen, müssen die Experten der jeweiligen Schichten miteinander kommunizieren, sich abstimmen darüber, wann und wie der die jeweilige Schicht betreffende Teil der Anforderung umgesetzt wird (vgl. Abbildung 2). Natürlich bearbeiten die Teams auch nicht eine Anforderung zur Zeit, sondern mehrere Anforderungen gleichzeitig. Da die Organisation der Teams nach architektonischen Schichten und technischen Kompetenzen erfolgt, entsteht hoher Aufwand durch diese Abstimmungen.
Wie effizient der Prozess der Umsetzung von Anforderungen durchlaufen werden kann, hängt von der Komplexität der Anforderung ab, aber folglich auch davon, wie gut die Architektur einer Software die Umsetzung neuer Anforderungen unterstützt. Mit der Veränderung von Anforderungen, ihrem Wegfall (frühe Anforderungen) und neu aufkommenden (späten) Anforderungen umzugehen, erhebt selbst Anforderungen an die Softwarearchitektur:
Eine Softwarearchitektur, die Agilität unterstützt, muss ebenfalls agil sein.
Eine Softwarearchitektur unterstützt Agilität, wenn Veränderungen, die im Laufe der Entwicklung auftreten, möglichst agil begegnet werden können. Veränderungen können dabei fachliche Modelle und Prozesse, als auch die Umorganisation der sie umsetzenden Personen (Teams) bis hin zu der Verkleinerung und Vergrößerung von Teams betreffen.
Vertikalisierung
Die Strukturierungskonstrukte von Programmiersprachen lassen sich unterschiedlich nutzen. Es ist die Frage der Modellierung, wie sie die Realität abbilden. Zum Beispiel könnte eine Strukturierung entlang von Prozessen, von Organisationseinheiten, von fachlichen Domänen oder entlang von Architekturschichten erfolgen.
Alternativ zu der Architektur-orientierten Organisation können die an einer Software beteiligten Personen auch entlang fachlicher Kriterien, also vertikal organisiert werden (vgl. Abbildung 3).
Ein Team bündelt nun nicht mehr technische Kompetenzen, sondern orientiert sich entlang einer Fachlichkeit, zum Beispiel der Anforderung, Kundendaten bearbeiten zu können oder Produkte in einem Warenkorb sammeln zu können oder die Zahlungsabwicklung für einen gewissen Geldbetrag initiieren zu können. Abstimmungsaufwände können sich durch diese Organisationform reduzieren, wenn die Abgrenzung der Teams sauber, also anhand längerfristig gültiger, eindeutiger Merkmale erfolgt. Dann kann ein Großteil von Anforderungen innerhalb von nur einem Team vollständig abgearbeitet werden.
Für eine solche, vertikale Organisation ist die Definition der Grenzen und Verantwortlichkeiten allerdings ungleich schwieriger als bei der horizontalen Organisation, die nach technisch begründeten - gefühlt in Stein gemeißelten - Grenzen, folgt.
Technologische Vertikalisierung
Die technischen Grenzen zwischen Architekturebenen bleiben bei der reinen Vertikalisierung der Organisation erhalten und wirken sich aus. Veränderungen an Benutzerschnittstelle, Geschäftslogik und Datenhaltung erfolgen weiterhin gleichzeitig. Auch wenn Teams vertikal organisiert sind ist es einfach, Programmteile, die von Mitgliedern anderer Teams entwickelt und für ein anderes fachliches Ziel entwickelt wurden, zu nutzen und auch zu verändern. Dadurch häufen sich technische Schulden an, die schließlich zu erhöhtem Abstimmungs- und Kommunikationsaufwand zwischen den Teams führen und die Weiterentwicklung und Wartung der Software erheblich erschweren.
Damit die Vorteile der vertikalen Organisation nicht bei der Umsetzung, also der Programmierung, des Testens und der Inbetriebnahme durch eine Team-übergreifende 3-Schichten-Architektur eingebremst werden, ist es technisch möglich, diese Organisationsform auch architektonisch und technologisch zu manifestieren. Das Resultat dieser Architektur sind technisch entkoppelte Komponenten, die durch die Entkopplung unabhängig von anderen Komponenten entwickelt, getestet und sogar in den produktiven Einsatz überführt werden können. Jede dieser Komponenten setzt für sich die notwendigen architektonischen Schichten um (vgl. Abbildung 4). Die vertikalen werden in der Architektur daher auch als Microservices bezeichnet.
Unter den Begriffen Bounded Context und Domain Driven Design finden sich Konzepte, die sich mit der Modellierung solcher fachlich orientierter Komponenten befassen. Prinzipien und Theorien, die bereits vor Jahrzehnten für die Modularisierung von Programmcode erforscht wurden, wie die des Information Hiding, enthalten weitere relevante Hilfestellungen.
Agilität und Vertikalisierung
Wie in Abbildung 5 dargestellt, ermöglicht die Kombination einer vertikalisierten Organisation und Architektur eine fein-granulare Inbetriebnahme. Durch die starke Entkopplung sowohl der Teams als auch der Softwarekomponenten, für die sie verantwortlich sind, kann ein Team neu umgesetzte Anforderungen in den produktiven Betrieb bringen und zwar sobald es fertig ist, beziehungsweise nicht erst dann, wenn alle an einer gemeinsamen Code-Basis arbeitenden Teams fertig sind. Wartezeiten und Komplexitäten, die durch die gemeinsame Arbeit mehrerer Teams an einer großen Software entstehen, entfallen - zumindest für Anforderungen, die nicht fachübergreifend sind und damit auf mehrere Komponenten Auswirkungen haben.
Komplexität Verteilter Systeme
Die Autarkie der Teams und ihrer Softwarekomponenten bedeutet, dass das Gesamtsoftwaresystem, welches die Teams entwickeln und erweitern, ein verteiltes System ist. Anders als bei monolithischer Software, einer Software, die in einem Stück ausgeliefert wird und durch einen Prozess repräsentiert wird, kommunizieren die Komponenten über Netzwerk-Schnittstellen. Es gibt keine Verfügbarkeitsgarantie für eine Netzwerkverbindung, dieser Tatsache muss Rechnung getragen werden.
Die Komponenten müssen sich auch finden können, es werden zusätzliche Komponenten benötigt, die vorhalten, welche Komponenten unter welcher Adresse mit welchen Schnittstellen verfügbar sind. Auch die Überwachung der Anwendung wird komplexer da mehrere, über das Netzwerk verteilte, Komponenten überwacht werden müssen. Die Prozesse, die beim Starten und Anhalten des Gesamtsystems ablaufen sind komplexer. Es kann Abhängigkeiten in der Startreihenfolge geben oder Bedingungen, die für das Anhalten und Starten beachtet werden müssen.
Diese Aspekte zu behandeln bedeutet Mehraufwand, andererseits wird das Gesamtsystem dadurch aber auch robuster. Fehler in Teilkomponenten haben weniger Einfluss auf das Gesamtsystem. Zusätzlich wird die Microservice-Architektur heute durch fertige Frameworks und Bibliotheken unterstützt, so dass viele der zusätzlich benötigten Funktionen und Werkzeuge bereits zur Verfügung stehen und sich vertikale Architekturen dadurch immer schneller und günstiger umsetzen lassen.
Um Agilität durch Microservice-Architekturen weiter zu befeuern, bedarf es dabei auch eines hohen Automatisierungsgrades für Entwicklungs- und Inbetriebnahmeprozesse.
Fazit
Die Architektur einer Software kann, da sie Einfluss auf die Organisation und Methodik nimmt, agile Vorgehensweisen signifikant treiben oder aber verhindern.
Die Vertikalisierung kann eine Teilantwort auf die neuen Herausforderungen der Digitalisierung geben. Sie bietet Möglichkeiten für große Projekte, horizontal in der Organisation zu skalieren und Projektgeschwindigkeiten zu halten. Neue Anforderungen können beispielsweise durch neue vertikale Komponenten mit dafür verantwortlichen Personen hinzugefügt werden. Die Vergrößerung von Entwicklungsteams kann dadurch zu geringem Abstimmungsaufwand und mit geringer Erhöhung des Projekt-Overhead erfolgen.
Grundsätzlich ist die Architektur einer Software im Zusammenklang mit agilen Vorgehensweisen, fachlichen Gegebenheiten, Organisationsformen und Reifegraden - sowohl methodisch, kulturell, als auch technisch - zu entwickeln. Vertikalisierung ist heute eine Ergänzung des architektonischen Lösungsraums die sich aktuell in unterschiedlichen Branchen und für unterschiedliche Anwendungsfälle bewährt hat. Sie ist nicht mehr nur ein Phänomen von IT-Startups, deren Geschäftsmodelle IT-Innovationen voraussetzen. (bw)