Entwicklung & Code
Softwareentwicklung: Lern bloß nicht programmieren!
Ich weiß: Der Titel ist provokant (dazu am Ende mehr), und Sie werden bei den ersten Sätzen vielleicht denken:
„Nicht schon wieder ein Artikel zum Thema KI!“
Aber darum geht es gar nicht – vertrauen Sie mir: Künstliche Intelligenz wird in diesem Beitrag nur am Rande behandelt, sie dient lediglich als Aufhänger. Denn tatsächlich geht es hier um etwas sehr viel Grundsätzlicheres.
Golo Roden ist Gründer und CTO von the native web GmbH. Er beschäftigt sich mit der Konzeption und Entwicklung von Web- und Cloud-Anwendungen sowie -APIs, mit einem Schwerpunkt auf Event-getriebenen und Service-basierten verteilten Architekturen. Sein Leitsatz lautet, dass Softwareentwicklung kein Selbstzweck ist, sondern immer einer zugrundeliegenden Fachlichkeit folgen muss.
Was bedeutet es, programmieren zu können?
In letzter Zeit hört man immer wieder den Satz:
„In Zukunft wird niemand mehr programmieren müssen. Das übernimmt dann alles die KI.“
Vielleicht haben auch Sie diesen Satz bereits ausgesprochen oder zumindest darüber nachgedacht – oder Sie haben sich gefragt, was er für Sie persönlich eigentlich bedeutet. Denn dieser Satz kann sehr unterschiedliche Reaktionen auslösen: Für manche klingt er wie ein Versprechen, für andere wie eine Bedrohung – und für wieder andere wie die Eintrittskarte in eine neue Welt. Aber unabhängig davon, wie man ihn bewertet, lohnt es sich, ihn genauer zu betrachten. Nicht nur unter dem Aspekt, ob er inhaltlich zutrifft, sondern vor allem auch mit Blick auf die Frage, was mit „Programmieren“ in diesem Zusammenhang überhaupt gemeint ist.
Empfohlener redaktioneller Inhalt
Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.
Lern bloß nicht programmieren // deutsch
Denn genau hier liegt ein wesentlicher Knackpunkt. Wenn man unter „Programmieren“ das Schreiben von Code versteht (also Funktionen formulieren, Bedingungen ausdrücken, Datenstrukturen anlegen), dann gilt: Ja, diese Tätigkeit kann eine KI schon heute in weiten Teilen übernehmen. Und dieser Trend wird sich weiter verstärken. Wenn man jedoch unter „Programmieren“ versteht, Software zu entwickeln, also Probleme zu analysieren, zu strukturieren, zu modellieren und am Ende eine Lösung zu schaffen, die diesen Namen auch verdient, dann wird schnell klar: Das ist etwas ganz anderes. Und das lässt sich nicht ohne Weiteres automatisieren.
Genau darüber möchte ich heute schreiben. Nicht über den Hype oder über die Panik. Sondern über die Frage: Was bedeutet es eigentlich, programmieren zu können? Und wofür brauchen wir diese Fähigkeit?
Das große Missverständnis
Denn das Missverständnis beginnt bereits ganz am Anfang. Und wenn wir es nicht auflösen, dann treffen wir am Ende schlechte Entscheidungen – im Beruf, in der Ausbildung und in der persönlichen Orientierung. Es geht also um nichts weniger als die Frage: Was zeichnet gute Softwareentwicklung heute eigentlich aus? Und vor diesem Hintergrund ist der Satz
„Lern bloß nicht programmieren!“
vielleicht das Beste, was Sie heute lesen werden.
Ich hatte eingangs versprochen, dass es in diesem Text nur am Rand um KI gehen wird – und deshalb lassen wir sie jetzt auch erst einmal beiseite. Beginnen wir stattdessen mit dem Einstieg in die Welt der Softwareentwicklung. Wenn ich mit Menschen spreche, die überlegen, in diese Branche einzusteigen, dann fällt mir auf, dass fast alle mit der gleichen Frage beginnen:
„Welche Programmiersprache soll ich denn lernen?“
Und ich verstehe diese Frage. Sie wirkt konkret, sie vermittelt Orientierung und sie suggeriert, dass man weiß, was zu tun ist: Man wählt Python oder JavaScript oder Go oder eine andere Sprache, lernt die Grundlagen, macht ein paar Tutorials, schreibt ein erstes Projekt – und ist damit auf dem Weg zur Softwareentwicklerin oder zum Softwareentwickler. Tatsächlich gibt es dazu eine beeindruckende Vielzahl an Ressourcen: Bücher, Crashkurse, Bootcamps, YouTube-Serien, alles speziell für Einsteigerinnen und Einsteiger, alles technisch orientiert, und alles mit dem impliziten Versprechen:
„Wenn du erst einmal die Programmiersprache beherrschst, dann bist du ein Developer.“
Softwareentwicklung ist kein Selbstzweck
Aber genau hier beginnt das Problem. Denn was diese Angebote nicht vermitteln, ist, dass eine Programmiersprache lediglich ein Werkzeug ist – und zwar ein vergleichsweise kleines. Ich ziehe hierzu gerne die Analogie zum Schreiben: Natürlich muss man die Sprache beherrschen, in der man schreiben möchte. Man muss Grammatik und Rechtschreibung können. Man muss einen Satz zu Ende bringen können. Aber all das macht einen noch nicht zur Autorin oder zum Autor eines guten Buches. Oder eines klaren Berichts. Oder einer überzeugenden Analyse.
Genauso verhält es sich mit dem Programmieren: Sie beherrschen die Syntax, Sie wissen, was Schleifen sind, Sie können Bedingungen formulieren. Vielleicht haben Sie sogar schon kleinere Projekte umgesetzt – eine Notiz-App, einen Taschenrechner, eine einfache Webseite. Und trotzdem fühlen Sie sich unsicher. Sie wissen nicht, wie Sie größere Probleme angehen sollen. Sie sind überfordert, wenn Ihnen jemand ein echtes fachliches Anliegen beschreibt. Sie haben das Gefühl, dass Ihnen etwas fehlt – und können nicht genau sagen, was es ist.
Dieses Gefühl ist berechtigt. Denn was Ihnen fehlt, ist nicht das Programmieren – sondern das, was davor kommt.
Programmieren lernen in 21 Tagen
Damit kommen wir zu einem Punkt, der mir persönlich sehr wichtig ist, weil ich ihn für problematisch halte: In den letzten Jahren sind zahlreiche Bootcamps und Schnellkurse entstanden, die versprechen, aus Ihnen in drei Monaten eine Fullstack-Entwicklerin oder einen Data Scientist zu machen, oder in zwölf Wochen einen KI-Engineer. Auf dem Papier klingt das attraktiv. Sie investieren einige Wochen oder Monate, absolvieren eine intensive Ausbildung, und anschließend (so das Versprechen) sind Sie bereit für den Arbeitsmarkt.
Und ja: Technisch gesehen ist das nicht völlig falsch. Sie werden nach drei Monaten vermutlich in der Lage sein, einfache Webanwendungen zu bauen. Sie werden eine Sprache beherrschen, vielleicht zwei. Sie werden Tools bedienen können. Sie wissen, wie man mit Git arbeitet, wie man die Kommandozeile benutzt, wie man eine React-App aufsetzt.
Aber was Sie in dieser Zeit nicht lernen, ist das, was den Unterschied macht zwischen jemandem, der Code schreibt, und jemandem, der Software entwickelt. Sie lernen nicht, wie man mit Kundinnen und Stakeholdern spricht. Sie lernen nicht, wie man Anforderungen hinterfragt. Sie lernen nicht, wie man ein Problem so abstrahiert, dass es im Code wiedererkennbar wird. Sie lernen nicht, wie man modelliert. Und Sie lernen auch nicht, wie man mit Komplexität umgeht, mit Widersprüchen, mit Veränderungen.
Genau das ist der Punkt, der mich stört: Diese Ausbildungsprogramme erzeugen oft eine verzerrte Vorstellung davon, was Softwareentwicklung eigentlich ist. Sie verkaufen das Werkzeug und tun so, als sei man damit bereits Handwerker. Aber niemand wird Chirurgin, weil sie ein Skalpell halten kann. Und niemand wird Komponist, weil er eine Noten-App bedienen kann. Und in der Softwareentwicklung ist das nicht anders.
Ganz wichtig: Es geht mir hier nicht darum, pauschal gegen alle Bootcamps oder Schulungsprogramme zu argumentieren. Es gibt sicherlich auch Formate, die bemüht sind, Substanz zu vermitteln, den Beruf differenziert zu erklären und die Teilnehmerinnen und Teilnehmer nicht bloß durch eine Technologieschleife zu treiben. Aber: Es gibt eben auch viele Programme, bei denen das nicht der Fall ist – und bei denen man (zumindest mit etwas Erfahrung) deutlich merkt, dass es in erster Linie darum geht, mit der Hoffnung von Menschen, die vielleicht einen Neuanfang suchen, Geld zu verdienen. Und ich finde, genau das muss man benennen dürfen.
Code schreiben ist nur die Spitze des Eisbergs
Wenn Sie Software entwickeln wollen, dann müssen Sie verstehen, dass der wichtigste Teil Ihrer Arbeit unsichtbar ist. Er passiert vor dem Code. Vor dem Editor. Vor dem ersten Commit. Er beginnt mit einem Problem – und mit einem Menschen, der dieses Problem hat. Oder mit einer Organisation, einer Abteilung, einem Prozess. Ihre erste Aufgabe ist, zuzuhören. Nicht zu kommentieren oder eine Lösung vorzuschlagen. Sondern wirklich zuzuhören. Zu verstehen, worum es geht. Was dahinter liegt. Welche Perspektiven es gibt. Welche Abhängigkeiten. Welche Zwänge. Welche Wünsche.
Dann folgt der nächste Schritt: Strukturieren. Sie müssen beginnen, das Gehörte in Gedankenmodelle zu überführen. Was sind Begriffe, die immer wieder vorkommen? Was sind Zustände, was sind Übergänge, was sind Regeln? Was sind relevante Zusammenhänge – und welche sind es nicht? Und dann: Reduktion. Sie müssen entscheiden, was wirklich zählt. Sie müssen abstrahieren, verdichten, weglassen. Sie müssen aus der unendlichen Vielfalt der Realität ein Modell bauen, das gerade gut genug ist, um das Problem zu lösen – aber nicht mehr.
Und erst danach kommt das, was viele für den eigentlichen Job halten: der Code. Aber zu diesem Zeitpunkt wissen Sie längst, was Sie ausdrücken wollen. Sie haben die Struktur, Sie haben die Begriffe, Sie kennen die Regeln. Der Code ist dann nur noch das Werkzeug – nicht mehr das Denken.
Ich erinnere mich noch gut an eine Aussage eines Professors während meines Studiums. Sinngemäß sagte er:
„Das eigentliche Programmieren – das Schreiben von Code – sind nur die letzten zehn Prozent der Softwareentwicklung.“
Ich war damals irritiert. Ich dachte:
„Was soll ich denn mit den anderen 90 Prozent der Zeit anfangen?“
Heute, mit 25 Jahren mehr Erfahrung, weiß ich genau, was er damals meinte: Es ist die Zeit, die man braucht, um zu verstehen, worum es wirklich geht. Um herauszufinden, welches Problem gelöst werden soll. Um Klarheit zu schaffen, Prioritäten zu setzen, Strukturen zu entwerfen. Natürlich ist Code wichtig – keine Frage. Aber er ist eben nur der letzte Schritt. Und wenn man die neunzig Prozent davor nicht beherrscht, wird auch der Code nicht gut. Selbst dann nicht, wenn er formal korrekt ist – weil er wahrscheinlich am eigentlichen Problem vorbeigeht.
Software bildet nicht ab, was der Kunde braucht
An genau diesem Punkt kommt die KI ins Spiel. Viele Menschen machen sich derzeit Sorgen, dass ihre Fähigkeiten bald nicht mehr gebraucht werden. Dass ihr Job ersetzt wird. Dass das, was sie mit Mühe und Leidenschaft gelernt haben, plötzlich wertlos ist. Und ja: Wenn man seine Rolle so versteht, dass man Code schreibt, Anforderungen umsetzt, Dinge nach Anleitung erledigt – dann ist diese Sorge nicht unbegründet.
Denn genau diese Art von Arbeit kann eine KI heute schon gut simulieren. Sie kann Code generieren, Testfälle schreiben, Schnittstellen definieren. Sie kann sogar ganze UI-Komponenten bauen, vorausgesetzt, man beschreibt präzise, was sie tun sollen. Aber genau das ist das Problem: Sie weiß nicht, ob das, was sie umsetzt, auch sinnvoll ist. Sie hat kein Urteilsvermögen, kein Verständnis für fachliche Zusammenhänge. Keine Intuition für Ambivalenz. Keine Empathie für Unsicherheit.
Alberto Brandolini hat es einmal sehr treffend formuliert:
„The biggest problem in software development is that software is not intended to match what the customer wanted, but what the developer thought the customer wanted.“
Sinngemäß übersetzt: Software bildet nicht das ab, was der Kunde braucht, sondern das, was Entwicklerinnen und Entwickler glauben, verstanden zu haben. Dieses Missverständnis ist der Kern. Gute Software entsteht nicht dadurch, dass jemand schnell Code schreibt, sondern dadurch, dass jemand richtig versteht, was gebraucht wird, und dieses Verstehen mit Technik verbindet. Genau das ist der Teil, den KI nicht leisten kann. Zumindest nicht in absehbarer Zeit.
Sie kann Vorschläge machen, ja. Sie kann Bekanntes wiederholen. Aber sie kann nicht in einem Gespräch zwischen Fachbereich und Entwicklungsteam heraushören, was zwischen den Zeilen gesagt wurde. Sie kann keine fehlenden Fragen stellen. Keine impliziten Annahmen entlarven. Keine Missverständnisse auflösen. Dafür braucht es Menschen.
Die Relevanz von Sprache
Wenn Sie gute Software bauen wollen – langlebige, robuste, fachlich saubere Systeme –, dann müssen Sie Sprache ernst nehmen. Und damit ist nicht die Programmiersprache gemeint, sondern die natürliche Sprache. Denn Sprache ist das Medium, durch das wir Komplexität greifbar machen. Sie ist die Brücke zwischen dem, was Menschen sagen, und dem, was Maschinen tun.
Deshalb ist etwa Domain-Driven Design (DDD) ein so wertvoller Ansatz. DDD stellt die gemeinsame Sprache zwischen Entwicklungsteam und Fachabteilung ins Zentrum. Es geht nicht um Technologien, Frameworks oder Tools – sondern um Begriffe, Bedeutungen, Modelle. Sie entwickeln gemeinsam ein tiefes Verständnis dafür, wie die Welt der Anwenderinnen und Anwender funktioniert. Welche Konzepte es gibt, welche Regeln gelten, was typisch ist – und was nicht.
Aus diesem gemeinsamen Verständnis entsteht das Modell der Software. Keine Tabellen. Keine Klassen. Keine Funktionen. Sondern ein fachliches Modell, das Sie in einem letzten Schritt in Code übersetzen.
Wenn Sie wissen möchten, wie man solche Modelle haltbar macht – wie man Systeme so aufbaut, dass die Fachlichkeit sichtbar bleibt, dass Entscheidungen nachvollziehbar sind, dass die Sprache erhalten bleibt –, dann lohnt sich ein Blick auf Domain-Driven Design und auch auf Event-Sourcing. Es sind zwei Ansätze, die wir sehr intensiv verfolgen – und zu denen wir bereits zahlreiche Videos und auch Artikel veröffentlicht haben.
Weniger Code, mehr Software
Zum Schluss möchte ich kurz schildern, wie sich mein eigenes Verständnis von Softwareentwicklung im Laufe der Zeit verändert hat. Als ich anfing, wollte ich möglichst viel Code schreiben. Ich wollte effizient sein, clever, schnell. Ich wollte neue Frameworks ausprobieren, neue Patterns anwenden, spannende Architekturen bauen. Und ganz ehrlich: Ich dachte lange, dass das der eigentliche Job sei.
Aber mit den Jahren habe ich gemerkt: Die spannendsten und wichtigsten Aspekte meiner Arbeit haben gar nichts mit Code zu tun. Es sind die Gespräche, die Diskussionen, die Versuche, etwas wirklich zu verstehen. Die Momente, in denen jemand sagt:
„Ach das ist gemeint!“
Und plötzlich wird etwas klar. Oder die Momente, in denen ich erkenne, dass eine Anforderung gar keine Lösung ist, sondern ein Workaround für ein ganz anderes, tieferliegendes Problem.
Heute schreibe ich deutlich weniger Code als früher – aber ich entwickle mehr Software. Weil ich mich auf das konzentriere, was zwischen den Menschen passiert: auf Sprache, auf Verstehen, auf Struktur. Und ich bin überzeugt: Genau das ist es, was Entwicklerinnen und Entwickler unersetzlich macht. Nicht, dass sie JavaScript oder Go oder TypeScript beherrschen. Sondern, dass sie Menschen verstehen können – und aus einem Problem eine Lösung entwickeln, die nicht nur funktioniert, sondern langfristig trägt.
Was man eigentlich lernen sollte
Also: Lernen Sie bloß nicht programmieren – wenn Sie glauben, dass das genügt. Wenn Sie glauben, dass Sie durch das Erlernen einer Programmiersprache zur Entwicklerin oder zum Entwickler werden, dann begehen Sie denselben Denkfehler wie viele andere vor Ihnen. Lernen Sie stattdessen, zu verstehen. Lernen Sie zuzuhören. Lernen Sie zu abstrahieren. Lernen Sie, ein Problem in ein Modell zu überführen – und daraus ein System zu entwickeln. Und dann, ganz zum Schluss, lernen Sie, wie Sie das in Code ausdrücken.
Dann brauchen Sie keine Bootcamp-Versprechen – und auch keine Angst vor der KI. Denn dann sind Sie kein Coder. Dann sind Sie Softwareentwicklerin oder Softwareentwickler. Und die werden auch in Zukunft gebraucht – vielleicht mehr denn je.
Vielleicht haben Sie sich beim Lesen dieses Beitrags gefragt, warum ich ihn so provokant betitelt habe: „Lern bloß nicht programmieren!“
Und ja – der Titel ist bewusst zugespitzt. Er soll irritieren. Vielleicht auch kurz aufregen. Aber er verfolgt einen klaren Zweck: Ich wollte Ihre Aufmerksamkeit auf genau jenes Missverständnis lenken, das ich im Text herausgearbeitet habe. Denn viel zu viele Menschen glauben, dass das Lernen einer Programmiersprache gleichbedeutend damit sei, Softwareentwicklerin oder Softwareentwickler zu sein. Und mit diesem Beitrag wollte ich einen Kontrapunkt setzen – und zeigen, worauf es wirklich ankommt: Auf das Verstehen. Auf die Fähigkeit, Komplexität zu erfassen, Sprache ernst zu nehmen, Modelle zu entwickeln. Und erst dann – ganz am Ende – kommt der Code.
In diesem Sinne: Lernen Sie programmieren. Aber lernen Sie es als Werkzeug – nicht als Ziel.
(rme)
Entwicklung & Code
KI-Überblick 4: Deep Learning – warum Tiefe den Unterschied macht
Die bisherigen Beiträge dieser Serie haben gezeigt, dass neuronale Netze aus einfachen Bausteinen bestehen. Erst die Kombination vieler dieser Bausteine in mehreren Schichten ermöglicht jedoch die Durchbrüche, die moderne KI-Systeme prägen. Genau hier setzt das Konzept „Deep Learning“ an: Es beschreibt maschinelles Lernen mit tiefen, also mehrschichtigen, neuronalen Netzen.
Golo Roden ist Gründer und CTO von the native web GmbH. Er beschäftigt sich mit der Konzeption und Entwicklung von Web- und Cloud-Anwendungen sowie -APIs, mit einem Schwerpunkt auf Event-getriebenen und Service-basierten verteilten Architekturen. Sein Leitsatz lautet, dass Softwareentwicklung kein Selbstzweck ist, sondern immer einer zugrundeliegenden Fachlichkeit folgen muss.
Deser Beitrag klärt, was „tief“ im Kontext neuronaler Netze bedeutet, warum zusätzliche Schichten die Leistungsfähigkeit erhöhen und welche typischen Architekturen in der Praxis verwendet werden.
Was „deep“ wirklich heißt
Von Deep Learning spricht man, wenn ein neuronales Netz mehrere verborgene Schichten enthält – in der Regel deutlich mehr als zwei oder drei. Jede Schicht abstrahiert die Ausgaben der vorherigen Schicht und ermöglicht so, komplexe Funktionen zu modellieren. Während einfache Netze vor allem lineare und leicht nichtlineare Zusammenhänge erfassen, können tiefe Netze hochdimensionale Strukturen und Muster erkennen.
Die Entwicklung hin zu tieferen Netzen wurde erst durch drei Faktoren möglich:
- Stärkere Rechenleistung – insbesondere durch Grafikkarten (GPUs) und später spezialisierte Hardware wie TPUs.
- Größere Datenmengen, die zum Training genutzt werden können.
- Verbesserte Trainingsverfahren, darunter die Initialisierung von Gewichten, Regularisierungstechniken und optimierte Aktivierungsfunktionen.
Hierarchisches Lernen von Merkmalen
Ein Kernprinzip des Deep Learning ist die hierarchische Merkmalsextraktion. Jede Schicht eines tiefen Netzes lernt, auf einer höheren Abstraktionsebene zu arbeiten:
- Frühe Schichten erkennen einfache Strukturen, zum Beispiel Kanten in einem Bild.
- Mittlere Schichten kombinieren diese zu komplexeren Mustern, etwa Ecken oder Kurven.
- Späte Schichten identifizieren daraus ganze Objekte wie Gesichter, Autos oder Schriftzeichen.
Diese Hierarchiebildung entsteht automatisch aus den Trainingsdaten und macht Deep Learning besonders mächtig: Systeme können relevante Merkmale selbst entdecken, ohne dass Menschen sie mühsam vordefinieren müssen.
Typische Architekturen
Im Deep Learning haben sich verschiedene Architekturen etabliert, die für bestimmte Datenarten optimiert sind.
Convolutional Neural Networks (CNNs) sind spezialisiert auf Bild- und Videodaten. Sie verwenden Faltungsschichten („Convolutional Layers“), die lokale Bildbereiche analysieren und so translationinvariante Merkmale lernen. Ein CNN erkennt beispielsweise, dass ein Auge im Bild ein Auge bleibt, egal wo es sich befindet. CNNs sind der Standard in der Bildklassifikation und Objekterkennung.
Recurrent Neural Networks (RNNs) wurden entwickelt, um Sequenzen wie Text, Sprache oder Zeitreihen zu verarbeiten. Sie besitzen Rückkopplungen, durch die Informationen aus früheren Schritten in spätere einfließen. Damit können sie Zusammenhänge über mehrere Zeitschritte hinweg modellieren. Varianten wie LSTMs (Long Short-Term Memory) und GRUs (Gated Recurrent Units) beheben typische Probleme wie das Vergessen relevanter Informationen.
Autoencoder sind Netze, die Eingaben komprimieren und anschließend wieder rekonstruieren. Sie lernen dabei implizit eine verdichtete Repräsentation der Daten und werden etwa für Anomalieerkennung oder zur Vorverarbeitung genutzt. Erweiterte Varianten wie Variational Autoencoders (VAE) erlauben auch generative Anwendungen.
Diese Architekturen bilden die Grundlage vieler moderner KI-Anwendungen. Sie sind jedoch noch nicht der Endpunkt: In den letzten Jahren haben Transformer klassische RNNs in vielen Bereichen abgelöst, insbesondere in der Sprachverarbeitung. Darum wird es in einer späteren Folge dieser Serie gehen.
Herausforderungen des Deep Learning
Tiefe Netze sind leistungsfähig, bringen aber neue Herausforderungen mit sich:
- Großer Datenhunger: Ohne ausreichend Trainingsdaten tendieren tiefe Modelle zum Überfitting.
- Rechenintensiv: Training und Inferenz erfordern spezialisierte Hardware und hohe Energieaufwände.
- Schwer erklärbar: Mit wachsender Tiefe nimmt die Nachvollziehbarkeit weiter ab, was für viele Anwendungsbereiche problematisch ist.
Trotzdem hat sich Deep Learning als Schlüsseltechnologie für die meisten aktuellen KI-Durchbrüche etabliert.
Ausblick
Die nächste Folge widmet sich den Transformern – der Architektur, die Large Language Models und viele andere moderne Systeme ermöglicht. Sie erläutert, warum klassische RNNs an ihre Grenzen stießen und wie Self-Attention die Verarbeitung von Sprache revolutionierte.
(rme)
Entwicklung & Code
Die Produktwerker: Sprintziele etablieren, die wirklich helfen
Sprintziele gehören zu den stärksten Werkzeugen im Scrum-Framework. In dieser Folge diskutieren Dominique Winter und Oliver Winter, wie es Teams gelingt, Sprintziele so zu etablieren, dass sie Orientierung geben, Wirkung entfalten und Vertrauen schaffen. Ein Sprintziel ist schließlich mehr als eine Pflichtübung im Sprint Planning. Richtig eingesetzt, schafft es Klarheit über das „Warum“ der nächsten Iteration und verbindet die tägliche Arbeit mit der Produktvision.
Schwierigkeiten mit Sprintzielen
Vielen Teams fällt die Nutzung von Sprintzielen jedoch schwer. Häufig gibt es gar kein Ziel oder es bleibt auf der Ebene von Aufgabenlisten stecken. Statt echter Wirkung wird dann nur Output gemessen. Die Folge: wenig Fokus, kaum Begeisterung bei Stakeholdern und sinkendes Vertrauen in den Wert von Sprintzielen.
(Bild: deagreez/123rf.com)
So geht Produktmanagement: Auf der Online-Konferenz Product Owner Day von dpunkt.verlag und iX am 13. November 2025 können Product Owner, Produktmanagerinnen und Service Request Manager ihren Methodenkoffer erweitern, sich vernetzen und von den Good Practices anderer Unternehmen inspirieren lassen.
Gute Sprintziele: Outcome-orientiert und im Alltag präsent
Doch gerade hier liegt der Hebel. Ein gut formuliertes Sprintziel richtet die Arbeit am Outcome aus. Es beantwortet die Frage, welchen Mehrwert das Team in den kommenden zwei Wochen schaffen will, und gibt damit eine klare Orientierung für Entscheidungen im Sprint. Statt einer Sammlung von Backlog-Items entsteht ein gemeinsamer Fokus. Im Daily oder im Review lässt sich damit jederzeit prüfen, ob die Arbeit noch auf das eigentliche Ziel einzahlt.
Dominique Winter und Oliver Winter machen aber auch deutlich, dass Sprintziele eben nicht im stillen Kämmerlein entstehen sollten. Entscheidend ist die gemeinsame Gestaltung mit den Developern. Wer das Ziel aktiv mitformuliert, wird es auch eher als eigenes Commitment ansehen. So entsteht nicht nur mehr Akzeptanz, sondern auch die Bereitschaft, externe Einflüsse auszuhalten und das Ziel zu verteidigen. Product Owner bringen dabei den strategischen Rahmen ein – etwa Vision, Roadmap oder Product Goal – und öffnen einen Raum, in dem das Team das nächste sinnvolle Ziel bestimmen kann.
Ein gutes Sprintziel ist aber auch sichtbar und im Alltag präsent: in Dailys, in Gesprächen mit Stakeholdern und sogar in der spontanen Antwort auf die Frage „Woran arbeitet ihr gerade?“. Nur so werden sie zu einem lebendigen Orientierungspunkt statt zu einem Protokolleintrag. Wenn ein Team das gemeinsam vereinbarte Sprintziel erreicht, gilt es, diesen Erfolg sichtbar zu feiern; nicht die Anzahl der erledigten Backlog-Items, sondern den erzielten Mehrwert. Gerade im Sprint Review eröffnet das die Chance, Stakeholder zu begeistern und ihnen zu zeigen, warum sich die investierte Arbeit gelohnt hat. So wird das Konzept Sprintziele gestärkt und gewinnt wieder Vertrauen.
Zusammengefasst helfen Sprintziele Teams dabei, sich auf das Wesentliche zu konzentrieren, Entscheidungen leichter zu treffen und Stakeholder einzubeziehen. Wer sie konsequent auf Outcome ausrichtet, gemeinsam gestaltet und sichtbar macht, etabliert ein Instrument, das weit mehr ist als eine Formalität. Es ist ein Kompass, der Produktteams eine gemeinsame, wertvolle Richtung gibt.
Die aktuelle Ausgabe des Podcasts steht auch im Blog der Produktwerker bereit: „So etablierst du Sprintziele, die wirklich helfen„.
(mai)
Entwicklung & Code
Flexibel und pflegeleicht: Testing ohne Mocks
Robuste, automatisierte Tests sind feste Bestandteile der agilen Softwareentwicklung. Da Anforderungen und Rahmenbedingungen sich stetig ändern, müssen Entwicklerinnen und Entwickler kontinuierlich in der Lage sein, ihre Architektur anzupassen. Ihr Code muss wachsen und sich weiterentwickeln können. Sie müssen laufend bestehende Features erweitern, anpassen, umsortieren, zusammenführen oder aufteilen. Dazu benötigen sie die Unterstützung einer schnellen, verlässlichen und robusten Testsuite, die bestehende Funktionen der Software nicht beeinträchtigt.
Martin Grandrath ist Software-Developer und entwickelt seit über 15 Jahren Applikationen mit Web-Technologien. Seine Schwerpunkte sind neben Frontend-Architektur vor allem Software-Craftsmanship und testgetriebene Entwicklung. Seit 2023 arbeitet er als Senior IT-Consultant bei codecentric.
Auf Mocks basierende Tests verursachen häufig zusätzlichen Pflegeaufwand beim Refaktorieren, also Änderungen an der Codestruktur, die die Arbeit mit dem Code insgesamt vereinfachen, das Verhalten des Systems aber nicht verändern. Die Art und Weise, wie Mocks in der Praxis meist zum Einsatz kommen, führt zu einer Kopplung von Tests und Implementierungsdetails. Änderungen an diesen Details erfordern Anpassungen der Tests, was zulasten der Entwicklungsgeschwindigkeit geht.
Dieser Artikel zeigt auf, welche Kompromisse mit auf Mocks basierenden Tests verbunden sind und stellt mit dem Nullable-Entwurfsmuster von James Shore eine Alternative vor.
Isolierte, interaktionsbasierte Tests
Mock-Objekte oder kurz Mocks (englisch für „Attrappe“) sind eine Unterkategorie der Test-Doubles, die in Unit Tests als Platzhalter für Produktionsobjekte dienen. Der Begriff Test-Double ist angelehnt an das Stunt-Double in Filmen. Weitere Arten von Test-Doubles sind Stubs, Spies oder Fakes.
Mocks zeichnen während eines Testlaufs auf, wie die Software mit ihnen interagiert: Welche ihrer Methoden ruft die Anwendung in welcher Reihenfolge und mit welchen Argumenten auf? Anschließend verifiziert der Unit-Test, ob die beobachteten Interaktionen mit den erwarteten übereinstimmen. Auf diese Weise werden die Interaktionen zwischen den Objekten zu einem integralen Bestandteil der Implementierung und der Tests. Diese Art von Tests wird als Interaction-based bezeichnet.
Gleichzeitig isolieren Mocks das zu testende Objekt von seinen Abhängigkeiten. Während des Tests wird also nur der Code eines einzelnen Objekts ausgeführt, während alle Interaktionspartner durch Mocks ersetzt werden. Tests, die Objekte in Isolation testen, nennt man solitary.
Auch wenn Solitary Interaction-based Tests ihre Vorzüge haben und sich im Laufe der Zeit zum Standard entwickelt haben, sind sie nicht frei von Nachteilen. Dass Tests an die Interaktionen zwischen Objekten gekoppelt sind, erschwert Refaktorierungen. Diese sind jedoch ein unverzichtbares Werkzeug, um die Qualität der Codebasis dauerhaft aufrechtzuerhalten.
Refaktorierungen, die die Interaktionen zwischen Objekten verändern, können zu False Positives führen: Tests schlagen fehl, obwohl das Programm als Ganzes keine Fehler enthält. Lediglich die Objektinteraktionen weichen von den Erwartungen der Tests ab. Eine Suite aus Interaction-based Tests macht die Codebasis dadurch insgesamt weniger flexibel, da die Tests die Implementierungsdetails fixieren.
Zudem kann es vorkommen, dass Solitary Tests Fehler nicht erkennen, wenn zwar alle Objekte in Isolation erwartungsgemäß arbeiten, es aber im Zusammenspiel der Objekte zu unerwünschtem Verhalten kommt. Um dem vorzubeugen, sind neben den Unit Tests zusätzliche Integrationstests erforderlich, die gezielt das Zusammenspiel mehrerer Objekte testen.
Eine Alternative stellen Sociable, State-based Tests dar.
Echte Abhängigkeiten und sichtbares Verhalten
In Sociable Tests interagiert das zu testende Objekt nicht mit Test-Doubles, sondern mit den echten Abhängigkeiten, die auch im Produktivbetrieb existieren. Fehler, die durch die Interaktion zwischen den Objekten entstehen, fallen im Test sofort auf. Separate Integrationstests sind nicht erforderlich.
State-based Tests verifizieren das sichtbare Verhalten von Objekten und ignorieren die darunter liegenden Interaktionen. Diese Tests reagieren daher sehr viel robuster gegenüber Refactorings, da sie sich nur für das Endergebnis interessieren und nicht für die Implementierungsdetails.
Der Elefant im Raum
Die echten Produktionsobjekte in den Tests zu verwenden, statt sie durch Mocks zu ersetzen, führt zunächst zu einem Problem: Der zu testende Code muss mit APIs, Datenbanken oder dem Dateisystem kommunizieren. Diese Nebenwirkungen (Side Effects) würden zu nicht deterministischen Tests führen, da sie vom globalen Zustand abhängig sind, unter anderem von Drittsystemen. So könnte etwa ein Test fehlschlagen, weil eine Fremd-API mit anderen Daten antwortet, als es der Test erwartet.
Ein weiteres Problem sind die Auswirkungen, die API-Aufrufe haben können. Dass jede Ausführung der Warenkorbtests eine Kreditkarte belastet, ist nicht wünschenswert. Darüber hinaus muss es möglich sein, zu testen, wie sich ein Programm verhält, wenn eine Dritt-API mit unterschiedlichen Formaten, mit Fehlern oder gar nicht antwortet. Und schließlich verlangsamt die API-Anbindung die Tests.
Integrationstests sind zwar für den Übergang des zu implementierenden Systems mit der Außenwelt notwendig, aber die Nebenwirkungen sind für die Tests innerhalb des Systems unerwünscht.
-
Datenschutz & Sicherheitvor 3 Monaten
Geschichten aus dem DSC-Beirat: Einreisebeschränkungen und Zugriffsschranken
-
UX/UI & Webdesignvor 3 Wochen
Der ultimative Guide für eine unvergessliche Customer Experience
-
Apps & Mobile Entwicklungvor 3 Monaten
Metal Gear Solid Δ: Snake Eater: Ein Multiplayer-Modus für Fans von Versteckenspielen
-
UX/UI & Webdesignvor 1 Woche
Adobe Firefly Boards › PAGE online
-
Online Marketing & SEOvor 3 Monaten
TikTok trackt CO₂ von Ads – und Mitarbeitende intern mit Ratings
-
Social Mediavor 3 Wochen
Relatable, relevant, viral? Wer heute auf Social Media zum Vorbild wird – und warum das für Marken (k)eine gute Nachricht ist
-
Entwicklung & Codevor 3 Wochen
Posit stellt Positron vor: Neue IDE für Data Science mit Python und R
-
Entwicklung & Codevor 5 Tagen
EventSourcingDB 1.1 bietet flexiblere Konsistenzsteuerung und signierte Events