9 Gesetze

9 Gesetze, die jeder SW-Entwickler kennen sollte

vg

In der Software-Entwicklung gibt es zahlreiche Richtlinien und Beobachtungen, die als Gesetze oder Prinzipien bezeichnet werden. Dies sind zwar keine strengen Formeln, die in allen Situationen universell gelten, aber sie bieten wichtige Rahmenbedingungen, die den Entwicklungsprozess beeinflussen. Diese Prinzipien können sich erheblich auf die Produktivität von Organisationen, Teams und Einzelpersonen auswirken. Es ist wertvoll für jeden, der mit Software zu tun hat, sich mit diesen 9 Gesetze vertraut zu machen.

  • Das Brookssche Gesetz sagt uns, dass mehr Leute im Team nicht immer mehr Spaß bringen – im Gegenteil, man kann schnell in einer Verzögerungsfalle landen.
  • Goodharts Gesetz ist wie das Spiel „Ich sehe was, was du nicht siehst“ – irgendwann wird eine Metrik so manipuliert, dass das ursprüngliche Ziel in den Hintergrund gerät.
  • Hyrums Gesetz zeigt uns, dass API-Benutzer genauso stur sein können wie Katze, die den Wassertropfen auf dem Boden ignoriert, obwohl der Entwickler sie ihm nicht beigebracht hat.
  • Conway’sches Gesetz bringt uns dazu, uns selbst zu hinterfragen: Spiegeln die Kommunikationsstrukturen in unserem Team die Architektur wider oder haben wir uns in ein Code-Labyrinth verirrt?
  • Linus’sches Gesetz ist wie der „Crowdsourcing-Heldenmodus“ – je mehr Augen auf den Code schauen, desto wahrscheinlicher ist es, dass jemand den Fehler findet, bevor der Chef es tut.
  • Hofstadter’sches Gesetz mahnt uns daran, immer etwas mehr Zeit einzuplanen – alles dauert länger, selbst wenn wir es schon wissen.
  • Kernighans Gesetz macht uns klar, dass komplexer Code wie ein ungeschicktes Puzzle ist, bei dem wir nie wissen, wie viele Teile fehlen – es ist besser, es gleich einfach zu halten.
  • Das Peter-Prinzip ist der Klassiker, der uns erinnert: Der beste Entwickler ist nicht immer der beste Teamleiter. Und hey, das geht allen so – sogar beim Pizza-Bestellen!
  • Das Pareto-Prinzip schließlich – es erklärt, warum wir nach 10 Meetings trotzdem nur 20 % der Aufgaben erledigt haben. Aber keine Sorge, 80 % der Resultate kommen eh von nur 20 % der Anstrengung, oder? 😅

Das Brookssche Gesetz

„Wenn man [Personal] zu einem späten Softwareprojekt hinzufügt, wird es später.“

Fred Brooks

Dieses Gesetz, formuliert von Fred Brooks, bezieht sich auf die Herausforderungen und Unwägbarkeiten, die auftreten, wenn zusätzliches Personal zu einem bereits fortgeschrittenen oder verzögerten Softwareprojekt hinzugefügt wird. In vielen Fällen führt eine Erweiterung des Teams nicht zu einer schnelleren Fertigstellung des Projekts, sondern verzögert es eher noch weiter. Der Grund dafür liegt in den zusätzlichen Koordinationskosten, die entstehen, wenn mehr Menschen in das Projekt eingebunden werden. Es erfordert Zeit und Ressourcen, neue Teammitglieder einzuarbeiten, sie mit dem bestehenden Code vertraut zu machen und ihnen zu helfen, sich in die Arbeitsabläufe einzufügen.

Dieses Gesetz unterstreicht die Risiken, die damit verbunden sind, ohne eine angemessene Planung und Struktur „mehr Leute in ein verzögertes Projekt zu werfen“. Die Annahme, dass zusätzliches Personal eine Verzögerung kompensieren kann, ist oft eine Fehleinschätzung. Stattdessen kann es zu einem Teufelskreis aus ineffizienter Kommunikation, erhöhtem Aufwand für Koordination und zusätzlichen Fehlerquellen führen, was die Situation weiter verschärft.

Darüber hinaus zeigt das Brookssche Gesetz auf, wie wichtig es ist, ein angemessenes Gleichgewicht zwischen der Teamgröße und der jeweiligen Komplexität des Projekts zu finden. Ein Team, das zu groß ist, kann leicht an Kommunikationsproblemen und Ineffizienzen leiden, während ein zu kleines Team überlastet und unter Druck gesetzt wird. In der Praxis kann es sinnvoll sein, ein Team aus Mitgliedern zu bilden, die mehrere Rollen übernehmen und die nötige Flexibilität aufweisen. Diese Mitglieder müssen in der Lage sein, unterschiedliche Aufgaben zu erledigen, ohne die Qualität des Projekts zu gefährden. Die Kunst liegt darin, die richtige Balance zu finden, sodass das Team in der Lage ist, effizient und produktiv zu arbeiten, ohne die negativen Auswirkungen einer Überbesetzung oder Unterbesetzung zu erleben.

Goodharts Gesetz

„Wenn eine Maßnahme zu einem Ziel wird, hört sie auf, eine gute Maßnahme zu sein.“

Charles Goodhart

Dieses Gesetz beschreibt ein fundamentales Problem in der Welt der Messung und der Zielverwirklichung: Wenn eine spezifische Metrik zu einem Ziel erhoben wird, verlieren wir oft den Blick auf das ursprüngliche Ziel und konzentrieren uns nur noch auf die Metrik selbst. Das bedeutet, dass, sobald eine bestimmte Kennzahl oder Messgröße als Indikator für den Erfolg betrachtet wird, die Menschen beginnen, ihr Verhalten so anzupassen, dass sie diese Metrik maximieren – oft auf Kosten des eigentlichen Ziels, das diese Metrik ursprünglich abbilden sollte.

Das Problem entsteht häufig, wenn wir versuchen, komplexe und oft schwer quantifizierbare Ergebnisse zu messen. Anstatt uns auf die Erreichung eines umfassenderen Ziels zu konzentrieren, verlassen wir uns auf eine einzelne Metrik, die uns in eine Richtung lenkt, die nicht unbedingt mit unseren langfristigen oder übergeordneten Zielen übereinstimmt. Zum Beispiel könnte man die Produktivität eines Teams anhand der Anzahl der geschriebenen Codezeilen messen. Doch während diese Zahl möglicherweise wächst, kann sie uns wenig über die tatsächliche Qualität des Codes oder den Fortschritt des Projekts sagen. Ebenso könnte das Zählen abgeschlossener Story Points pro Sprint als Maß für die Teamgeschwindigkeit verwendet werden. Dabei könnte es zu einer Situation führen, in der das Team eher darauf fokussiert ist, die Story Points zu erfüllen, als wirklich wertvolle und funktionierende Lösungen zu liefern. Auch die Codeabdeckung als Kennzahl zur Messung der Testqualität kann dazu führen, dass Entwickler Tests schreiben, die die Metrik verbessern, ohne jedoch wirklich die Stabilität oder Sicherheit des Codes zu gewährleisten.

Um dieser Falle zu entkommen, ist es wichtig, den datengesteuerten Ansatz nicht komplett abzulehnen, sondern ihn mit Bedacht und kontinuierlicher Reflexion zu verwenden. Es ist entscheidend, nicht nur quantitative Metriken zu überwachen, sondern auch qualitative Ansätze zu berücksichtigen, um ein ganzheitliches Bild der tatsächlichen Fortschritte und der Qualität zu erhalten. Metriken sollten regelmäßig verfeinert und neu bewertet werden, um sicherzustellen, dass sie tatsächlich die gewünschten Ergebnisse fördern und nicht nur das Verhalten in eine unerwünschte Richtung lenken. Ein ausgewogenes Verhältnis zwischen quantitativen und qualitativen Metriken sowie eine regelmäßige Überprüfung der zugrunde liegenden Ziele ist notwendig, um sicherzustellen, dass das ursprüngliche Ziel nicht aus den Augen verloren wird. Schließlich ist es nicht nur wichtig, was gemessen wird, sondern auch wie und warum es gemessen wird, um langfristig echte, nachhaltige Erfolge zu erzielen.

Hyrums Gesetz

„Bei einer ausreichenden Anzahl von Nutzern einer API spielt es keine Rolle, was Sie im Vertrag versprechen: Auf alle beobachtbaren Verhaltensweisen Ihres Systems wird sich jemand verlassen.“

Hyrum Wright

Wenn Ihre API mehr Benutzer gewinnt, werden sich die Leute auf Verhaltensweisen verlassen, die die Designer nicht beabsichtigt oder dokumentiert haben. Im Laufe der Zeit werden selbst kleine, undokumentierte Macken oder Grenzfälle zu „Funktionen“, auf die Benutzer angewiesen sind und die Änderungen oder Verbesserungen an der API komplexer machen, ohne dass jemand etwas kaputt macht.

Dieses Gesetz unterstreicht die Herausforderungen, die mit der Aufrechterhaltung der Abwärtskompatibilität und dem Management von Erwartungen verbunden sind, wenn Systeme wachsen und sich weiterentwickeln.

Conway’sches Gesetz

„Jede Organisation, die ein System (im weitesten Sinne) entwirft, wird ein Design erstellen, dessen Struktur eine Kopie der Kommunikationsstruktur der Organisation ist.“

Melvin Conway

Die Struktur der Software spiegelt oft die Organisationsstruktur wider, in der sie erstellt wurde. Wenn Sie den bestehenden Team- oder Abteilungsgrenzen blind folgen, kann es sein, dass Sie am Ende Subdomains haben, die nicht gut auf die gewünschte Architektur oder die gewünschten Geschäftsfähigkeiten abgestimmt sind.

Das inverse Conway-Manöver ist die proaktive Anwendung des Conwayschen Gesetzes. Es legt nahe, dass wir, wenn wir wollen, dass unsere Softwarearchitektur eine bestimmte Form oder Struktur annimmt, zuerst unsere Teams und Kommunikationsmuster so organisieren sollten, dass sie die gewünschte Architektur widerspiegeln.

Linus’sches Gesetz

„Wenn man genügend Augäpfel hat, sind alle Käfer oberflächlich.“

Eric Raymond

Dieses Gesetz bringt auf prägnante Weise die Essenz der Open-Source-Zusammenarbeit zum Ausdruck. Es verdeutlicht, wie die breite Beteiligung einer Community dazu beiträgt, Fehler schneller und effektiver zu identifizieren und zu beheben als in geschlossenen, proprietären Systemen. Die zugrunde liegende Idee ist, dass je mehr Personen den Code überprüfen, desto wahrscheinlicher ist es, dass jemand einen Fehler bemerkt, der von anderen übersehen wurde. In einem Open-Source-Projekt hat jeder, der Zugang zum Quellcode hat, die Möglichkeit, Fehler zu finden, Verbesserungen vorzuschlagen und dazu beizutragen, dass der Code robuster und stabiler wird.

Die Stärke dieses Ansatzes liegt in der Vielzahl unterschiedlicher Perspektiven und Erfahrungen, die die Community-Mitglieder einbringen. Während in einem geschlossenen System nur ein begrenzter Kreis von Entwicklern Zugang zum Code hat, eröffnet die offene Struktur der Open-Source-Entwicklung eine nahezu unbegrenzte Anzahl von potenziellen Prüfern. Jeder hat die Möglichkeit, Fehler zu entdecken, unabhängig von seiner geografischen Lage oder seiner beruflichen Herkunft. Dies erhöht die Wahrscheinlichkeit, dass Probleme schnell erkannt werden, bevor sie zu größeren, schwerwiegenden Fehlern werden.

Außerdem bietet es eine Form der Qualitätssicherung, die in vielen kommerziellen Softwareentwicklungsprozessen fehlt. In Open-Source-Projekten werden Fehler nicht nur von den ursprünglichen Entwicklern, sondern auch von einer Vielzahl von externen Beitragsleistenden untersucht, was zu einer dynamischeren und gründlicheren Fehlerbehebung führt. Diese breite Basis von Entwicklern, die regelmäßig den Code durchsehen, sorgt dafür, dass Fehler oberflächlich bleiben und keine tiefgreifenden, unerkannten Bugs in das System gelangen.

Darüber hinaus stärkt es das Vertrauen in Open-Source-Projekte. Es beweist, dass der kollektive Intellekt und die Zusammenarbeit einer Community oft besser sind als die isolierte Arbeit eines kleinen Entwicklerteams. Dies fördert nicht nur die Qualität des Codes, sondern auch die Innovation und das kontinuierliche Wachstum des Projekts. Es ist ein Beweis für die Kraft der offenen Zusammenarbeit und für die Tatsache, dass durch die Vielzahl an verfügbaren „Augäpfeln“ potenzielle Fehler schnell und effizient behoben werden können.

Hofstadter’sches Gesetz

Es dauert immer länger, als man denkt, selbst wenn man das Hofstadtsche Gesetz berücksichtigt.

Douglas Hofstadter

Das Hofstadtersche Gesetz ist eine humorvolle, aber treffende Erinnerung an die Tücken der Zeitplanung und Schätzungen, insbesondere in der Softwareentwicklung. Es zeigt auf, wie oft unsere Einschätzungen des Zeitaufwands für eine Aufgabe unrealistisch optimistisch sind. Selbst wenn wir uns der Tatsache bewusst sind, dass Dinge oft länger dauern, als ursprünglich angenommen, neigen wir dazu, diese Realität zu ignorieren oder zu unterschätzen. Das Gesetz erinnert uns daran, dass wir die unvorhergesehenen Herausforderungen und die Komplexität von Aufgaben häufig nicht vollständig antizipieren können.

In der Softwareentwicklung, wo selbst kleinste Änderungen unerwartete Nebeneffekte haben oder durch komplexe technische Probleme behindert werden können, ist dieses Gesetz besonders relevant. Häufig unterschätzen Entwickler, Projektmanager und Teams die Zeit, die benötigt wird, um bestimmte Aufgaben zu erledigen, sei es das Schreiben von Code, das Beheben von Bugs oder das Implementieren neuer Funktionen. Diese ungenauen Schätzungen können zu Zeitdruck und Frustration führen, wenn die gesetzten Fristen näher rücken, ohne dass der Fortschritt mit den Erwartungen übereinstimmt.

Das Hofstadtersche Gesetz unterstreicht auch die Bedeutung von Flexibilität und Realismus bei der Planung von Projekten. Es mahnt dazu, bei Zeitplänen Pufferzeiten einzuplanen und immer davon auszugehen, dass Probleme auftreten werden, die außerhalb der ursprünglichen Schätzungen liegen. Diese Flexibilität hilft nicht nur, unerwartete Verzögerungen zu bewältigen, sondern auch, das Vertrauen im Team zu stärken, da der Druck, unrealistische Zeitrahmen zu erfüllen, gemindert wird.

Gleichzeitig fordert das Gesetz dazu auf, mehr Wert auf kontinuierliche Anpassung und Überprüfung von Fortschritt und Zeitplänen zu legen. Es ist eine Einladung, die Herausforderungen und Unwägbarkeiten der Softwareentwicklung zu akzeptieren und mit einer gewissen Gelassenheit an die Arbeit heranzutreten. Anstatt sich von unerfüllten Fristen entmutigen zu lassen, sollte man sich bewusst machen, dass jedes Projekt – unabhängig von der besten Planung – immer seine eigenen Überraschungen mit sich bringen wird.

Kernighans Gesetz

„Jeder weiß, dass das Debuggen doppelt so schwer ist wie das Schreiben eines Programms. Wenn Sie also so schlau sind, wie Sie es beim Schreiben sein können, wie werden Sie es jemals debuggen?“

Brian Kernighan

Das Schreiben von zu komplexem Code kann für die Systemwartung gefährlich sein. Wenn der Code mit übermäßiger Komplexität geschrieben ist, wird das Debuggen noch schwieriger, da Sie zuerst die Logik entschlüsseln müssen, bevor Sie Probleme beheben können. Einfachheit in der Codierung ist der Schlüssel – das Schreiben von klarem, wartbarem Code erleichtert das Debuggen und Verbessern auf lange Sicht.

KI
https://www.reddit.com/r/ProgrammerHumor/comments/139h2w7/ai_generated_code_quality/

Peter-Prinzip

„Menschen in einer Hierarchie neigen dazu, sich zu einer ‚Stufe der jeweiligen Inkompetenz‘ zu erheben.“

Laurence Peter

Erfolg hat oft seinen Preis. In vielen Fällen werden Einzelpersonen aufgrund ihrer Leistungen in immer höhere Positionen befördert. Es kommt jedoch ein Punkt, an dem die Anforderungen der Rolle ihre Fähigkeiten übersteigen können.

In der Softwarebranche ist dies häufig zu beobachten, wenn erfolgreiche Entwickler in Führungspositionen befördert werden. Oft wird davon ausgegangen, dass Führungsqualitäten und Soft Skills mit technischem Know-how auf natürliche Weise wachsen, aber das stimmt nicht immer. Ein erfahrener Programmierer hat nicht unbedingt die gleiche Begabung für das Management von Menschen, die Führung von Teams oder den Umgang mit den strategischen Anforderungen der Führung, was in seiner neuen Rolle zu Herausforderungen führen kann.

Pareto-Prinzip

„Bei vielen Ergebnissen ergeben sich etwa 80 % der Folgen aus 20 % der Ursachen.“

Joseph Juran

Das Pareto-Prinzip, auch als 80/20-Regel bekannt, besagt, dass in vielen Fällen etwa 80 % der Ergebnisse durch nur 20 % der Ursachen oder Anstrengungen erzielt werden. Der Name stammt von dem italienischen Ökonom Vilfredo Pareto, der feststellte, dass 80 % des Landbesitzes in Italien von nur 20 % der Bevölkerung gehalten wurden. Das Pareto-Prinzip ist weithin anwendbar, und eine seiner wichtigsten Erkenntnisse ist, dass die Bemühungen selektiv sein sollten. Die Schlussfolgerung ist, dass die Konzentration auf die wirkungsvollsten Bereiche – in der Regel die 20 %, die 80 % der Ergebnisse liefern – zu einem größeren Erfolg führt als eine zu dünne Streuung. Dies unterstreicht auch, dass Qualität wichtiger ist als Quantität und dass wahre Ergebnisse wichtiger sind als nur das Volumen der generierten Leistung. Die Priorisierung dessen, was die Nadel wirklich bewegt, trägt dazu bei, aussagekräftigere und nachhaltigere Ergebnisse zu erzielen.

Fazit

Die Software-Entwicklung ist wie eine Party: Es gibt immer diese Prinzipien, die als „Gesetze“ auftreten, aber manchmal sind sie genauso unberechenbar wie der DJ, der ständig das Tempo ändert. Die gute Nachricht: Wenn man den „Wahnsinn“ der verschiedenen Gesetze und Prinzipien versteht, kann man seine Projekte mit einem Lächeln (und ein bisschen Pufferzeit) durchsteuern.

Insgesamt: Softwareentwicklung ist ein Balanceakt zwischen der perfekten Mischung von Prinzipien, Teams und Metriken – und manchmal hilft ein bisschen Humor, um durch den Code-Dschungel zu navigieren!

com

Newsletter Anmeldung

Bleiben Sie informiert! Wir informieren Sie über alle neuen Beiträge (max. 1 Mail pro Woche – versprochen)