Entwicklung & Code
Sanierungsfälle: Erfolgreiche Strategien gegen Projektchaos
(Bild: Andreas Monschau )
Andreas Monschau ist als Senior IT-Consultant bei Haeger Consulting in Bonn tätig. In Kundenprojekten hat er verschiedene Rollen ausgeübt, die vom Softwareentwickler über den Softwarearchitekten hin zum Testmanager, Teamleiter sowie Anforderungsmanager reichten. Nebenbei leitet er das umfangreiche Traineeprogramm von Haeger Consulting und unterstützt andere Unternehmen beim Aufbau gleichartiger Prozesse.
Es könnte so schön sein: Als neues Teammitglied wendet man sich einem Softwareprojekt zu, alle wissen, was sie zu tun haben, die Anforderungen sind klar und verständlich und das Team beherrscht die Technik (und nicht umgekehrt). Gibt es doch mal Probleme, dann kümmern sich eigens dafür vorgesehene Rollen darum, und räumen die Schwierigkeiten beiseite. Die Organisation sorgt dafür, dass alle in Ruhe arbeiten können. Am Ende hat man dann eine Sache ganz gewiss erreicht: Anwender beziehungsweise Kunden erhalten ein Produkt mit echtem Mehrwert. Das klingt doch zu schön, um wahr zu sein!
Weiterlesen nach der Anzeige
Aber ist es nicht häufig so, dass man als neues Teammitglied in ein Softwareprojekt hineingerät, und eben nicht alle wissen, was sie zu tun haben, und die Anforderungen ebenso wie die Technik unbeherrschbar sind? Mit den Problemen steht man häufig alleine da, Kunden und Anwenderinnen erhalten schließlich kein Produkt mit Mehrwert, und Projektziele erreicht das Team nur unzureichend.
Dazu gibt es tatsächlich Statistiken wie der Standish Group Chaos Report aus dem Jahre 2020. Die Teilnehmenden der zugrunde liegenden Umfragen waren überwiegend IT-Führungskräfte von Dienstleistern aus verschiedenen Branchen wie Banken, Versicherungen, Fertigung, Einzelhandel, Gesundheitswesen sowie aus öffentlichen Einrichtungen auf lokaler, staatlicher und föderaler Ebene. Dabei bezieht sich der Report auf den globalen Markt.
Die Zahlen besagen, dass 31 Prozent aller Softwareprojekte erfolgreich verlaufen, das heißt, die Projekte bleiben innerhalb der Zeitplanung, innerhalb des Budgets und liefern am Ende den besagten Mehrwert für die Anwender beziehungsweise Kunden. Aber was ist mit den restlichen 69 Prozent? Die Hälfte der Projekte haben zumindest enorme Probleme verschiedenster Art (u. a. wird das Budget überschritten), und 19 Prozent scheitern vollständig, das heißt sie kommen nicht zu einem befriedigenden Ende, und verursachen ausschließlich Kosten.
Im Fokus dieses Artikels stehen eben diese Projekte, die zu den 50 Prozent gehören, die Projekte, die (noch) nicht vollständig gescheitert sind, aber auch noch nicht auf gutem Kurs – also Sanierungsfälle, die man wieder in die richtige Richtung drehen kann. Und richtige Richtung bedeutet: Am Ende wird den Kunden tatsächlich ein Produkt mit Mehrwert geliefert.
Welche Faktoren führen zu Problemen?
Es gibt sehr viele Faktoren, die (nicht nur) in Softwareprojekten zu Problemen führen können. In Sanierungsfällen stößt man häufig unter anderem auf folgende Herausforderungen:
Weiterlesen nach der Anzeige
- Unklare Anforderungen: Der Kunde ist nicht in der Lage, das, was er haben will, klar zu artikulieren, wodurch Anforderungen widersprüchlich oder unbrauchbar sind. Immer neue Sonderfälle führen zum gefürchteten Scope Creep: Die schleichende Ausweitung des Projektumfangs, wobei häufig weder Zeit noch Budget oder Ressourcen entsprechend angepasst werden.
- Unrealistische Deadlines: Den Kunden werden Lieferzeitpunkte von Features versprochen, ohne vorher mit dem Entwicklungsteam gesprochen zu haben. Das Team kann jedoch nicht rechtzeitig liefern, weil es zu viel zu tun gibt. Dadurch entsteht Unzufriedenheit, und auf Dauer leidet die Qualität der Software, da das Team nebenbei immer neue Brandherde löschen muss.
- Strukturlose Agilität: Es wird viel von agilen Methoden oder agilen Transformationen gesprochen, aber die Umsetzung erfolgt oft nur halbherzig. Prioritäten ändern sich täglich, weil man „agil arbeitet“, und aus dem gleichen Grund existiert auch keine langfristige Planung. Stakeholder beginnen, sich in Meetings und kurzfristigen Planungen einzumischen, da sie das Gefühl haben, die Kontrolle zu verlieren.
- Unkontrolliert eskalierende technische Schulden: Aus Zeitgründen wird schnell etwas implementiert, und „wir verbessern das später“ ist das Mantra innerhalb des Projekts. Die Zahl von Workarounds und Quickfixes steigt, und irgendwann verbringen Entwicklerinnen und Entwickler mehr Zeit damit, über den Code und das Projekt zu fluchen, als neue Features zu implementieren. Davor haben sie ohnehin Angst, denn jede Codeänderung kann unvorhersehbare Konsequenzen mit sich bringen.
- Politik und Machtkämpfe: Es gibt viele Projektbeteiligte, die etwas zu sagen haben, was dazu führt, dass es häufig lange dauert, bis Entscheidungen getroffen werden, da niemand für vermeintlich falsche Entscheidungen verantwortlich sein möchte. Es gibt aus dem Management unterschiedliche, teilweise sich widersprechende Anforderungen, und Features werden aus politischen Gründen entwickelt oder blockiert.
Diese Liste lässt sich beliebig fortsetzen und soll nur einen kleinen Eindruck vermitteln, welche Problematiken häufig anzutreffen sind. Oftmals ist es jedoch so, dass sich diese Probleme zunächst verstecken und neuen Mitarbeitenden erst nach einiger Zeit im Projekt auffallen.
Echte Probleme aus echten Projekten
Wie sieht die Praxis aus? Zur Veranschaulichung dienen zwei beispielhafte Sanierungsfälle. Sie zeigen, wie dort eingesetzte Kollegen aus dem Unternehmen des Autors mit den dort vorherrschenden Problemen umgegangen sind.
Ein Disclaimer vorab: Ähnlichkeiten mit „lebenden oder toten Projekten“ sind rein zufällig – niemand sollte sich in einem der Projekte wiedererkennen können, Inhalte und Branchen sind verschleiert, einige Stellen sind überzeichnet, andere vereinfacht. Die zugrundeliegenden Probleme entsprechen jedoch der Realität.
Kaufen, kaufen, kaufen – E-Commerce
Das erste Beispiel führt in den E-Commerce-Sektor. Inhaltlich geht es um das Thema Identitätsmanagement. Grundsätzlich soll die SSO-(Single Sign-on)-Funktionalität von Keycloak, einer Open-Source-Software für Identitäts- und Zugriffsmanagement (Identity and Access Management, IAM) um weitere Services angereichert werden. Als besonderer Bonus: Das Projekt soll annähernd auf der sogenannten grünen Wiese starten – für den Kollegen, der als Lead-Developer fungiert und dem ein neues Team versprochen wird, scheinbar ein Glücksgriff. Bei diesem Sanierungsfall lagen die Probleme allerdings kurz nach Start in das Projekt bereits klar auf der Hand:
Beim versprochenen Entwicklerteam handelte es sich um drei Mitarbeitende, die zwar aus IT-affinen Umfeldern kamen, jedoch nicht über eine klassische Entwicklerausbildung verfügten. Tatsächlich handelte es sich mehr oder weniger um Hobbyprogrammierer, die nie zuvor mit Java Software entwickelt haben, und Java war als Sprache gesetzt.
Diese drei hatten bereits angefangen, etwas zu implementieren, es war jedoch unbrauchbar – sowohl vom Design als auch von der konkreten Codequalität her. Darüber hinaus erwiesen sich die Anforderungen als vollkommen unklar. Unterschiedliche fachliche Ansprechpartner lieferten verschiedene Aussagen, die sich häufig sogar widersprachen. Detailwissen über Prozesse und Use Cases existierte nicht.
Im Projekt gab es niemanden, der die wenigen vorliegenden Anforderungen entgegennahm, um sie für die Entwicklung aufzubereiten und zu priorisieren – in agilen Projekten wäre das etwa ein Product Owner.
So konnte das Entwicklungsteam zunächst nur auf Basis der wenigen bekannten Anforderungen arbeiten, und wenn man den fachlichen Ansprechpartnern den aktuellen Stand zeigte, führte das häufig dazu, dass das Entwicklungsteam wieder zurück in den Code musste, weil (vorher unbekannte) Sonderfälle nicht berücksichtigt wurden.
Zu guter Letzt gab es kein Vorgehensmodell sowie kein wirkliches Projektmanagement. Es gab lediglich das Entwicklungsteam mit einem Lead-Developer und einige am Projekt beteiligte Mitarbeitende, die gelegentlich Aussagen über die Anforderungen machten. Unabhängig davon gab es natürlich ein Management, das Ergebnisse sehen wollte, aber nicht verstehen konnte, warum das Entwicklungsteam nicht vernünftig arbeitet.
Entwicklung & Code
Rust Coreutils 0.5.0 erreicht 88 Prozent GNU-Kompatibilität
Das Projekt uutils hat Version 0.5.0 seiner Rust Coreutils veröffentlicht. Die in Rust geschriebene Neuimplementierung klassischer Unix-Kommandozeilenprogramme erreicht damit 87,75 Prozent Kompatibilität zur GNU-Test-Suite – ein Anstieg um knapp zwei Prozentpunkte gegenüber Version 0.4.0. Von insgesamt 645 Tests bestehen die Rust Coreutils nun 566, während 55 fehlschlagen, 23 übersprungen werden und einer zu einem Fehler führt.
Weiterlesen nach der Anzeige
Die Entwickler haben die Referenz-Test-Suite von GNU Coreutils 9.8 auf 9.9 aktualisiert, wodurch elf neue Tests hinzukamen. Trotz dieser zusätzlichen Prüfungen konnten 22 weitere Tests erfolgreich absolviert werden. Besonders hervorzuheben sind Verbesserungen bei den Utilities fold, cksum, install, numfmt und seq. Das Tool fold unterstützt nun kombinierende Unicode-Zeichen für korrekte Textumbrüche, während cksum mit hashsum zusammengeführt wurde und nun eine einheitliche Checksum-Funktion bietet.
Plattform-Unterstützung ausgebaut
Mit Version 0.5.0 erweitert das Projekt seinen Plattform-Support erheblich. OpenBSD wurde in die CI-Pipeline aufgenommen, die Redox-OS-Unterstützung reaktiviert und der Cygwin-Support in der uucore-Bibliothek verbessert. Als Folge hiervon können nun zehn zuvor übersprungene Tests ausgeführt werden. Die Rust Coreutils laufen damit offiziell auf Linux-Distributionen wie Ubuntu 25.10, FreeBSD, OpenBSD, Windows via Cygwin und dem experimentellen Betriebssystem Redox.
Canonical hatte bereits angekündigt, die Rust Coreutils in Ubuntu standardmäßig einzusetzen – primär aufgrund der Vorteile von Rust in puncto Speichersicherheit. Die Version 0.3.0 hatte bereits gezeigt, dass das sort-Tool in CPU-lastigen Szenarien bis zu 3,7-mal schneller arbeitet als sein GNU-Pendant – andere Tools wie expand (1,8×) oder nl (1,57×) zeigen ebenfalls deutliche Geschwindigkeitsgewinne als die GNU-Pendants. Bei IO-gebundenen Operationen fallen die Unterschiede geringer aus.
Noch 12 Prozent bis zur vollen Kompatibilität
Trotz der Fortschritte gibt es weiterhin Herausforderungen. Von den 55 fehlgeschlagenen Tests betreffen einige kritische Edge-Cases bei Tools wie cksum (crc32b mit --raw-Flag), od (Floating-Point-Operationen) und chroot. Auf GitHub verzeichnet das Projekt rund 380 offene Issues, die sich mit verbliebenen Inkompatibilitäten befassen. Für Administratoren, die einen produktiven Einsatz erwägen, empfehlen sich umfangreiche Tests der eigenen Skripte – insbesondere solche mit GNU-spezifischen Flags oder ungewöhnlichen Optionskombinationen.
Weiterlesen nach der Anzeige
Die Sicherheitsvorteile von Rust kommen bei den Coreutils zum Tragen: Speicherfehler wie Buffer-Overflows und unsichere Path-Traversal-Operationen gehören der Vergangenheit an. Tools wie chmod nutzen bereits sichere Traversierungsmethoden. Allerdings warnen Kritiker vor neuen Fehlerklassen, die durch Rust-spezifische Ownership-Semantik entstehen könnten. Im Gegensatz zu den jahrzehntelang gehärteten GNU Coreutils ist die Rust-Variante noch vergleichsweise jung.
An Version 0.5.0 haben sechs neue Contributor mitgewirkt. Das Projekt ruft zu Übersetzungen via Weblate auf und bittet um Unterstützung über GitHub Sponsors. Die Maintainer-Basis umfasst etablierte Entwickler wie Sylvestre Ledru von Debian und Daniel Hofstetter, der in einem iX-Interview die langfristigen Ziele des Projekts erläuterte.
Für Distributionen stellt sich die Frage nach der Paketierung: Ubuntu 25.10 setzt die Rust Coreutils standardmäßig ein, Nutzer können per apt purge coreutils-from-uutils zu den GNU-Varianten zurückkehren. FreeBSD bietet einen Port über FreshPorts an. Die MIT-Lizenz der Rust Coreutils ist mit der GPL der GNU Coreutils kompatibel und erlaubt eine problemlose Integration in Distributionen.
Die Download-Binaries für Version 0.5.0 stehen auf der Projekt-Website und über die GitHub-Releases bereit. Anwender sollten vor einem produktiven Einsatz die Test-Coverage-Dokumentation konsultieren und kritische Workflows prüfen.
(fo)
Entwicklung & Code
Verbindungsabbrüche bei heise online durch Cookies – eine Spurensuche
In der Webentwicklung schreiben wir nicht nur neue Software, sondern es erreichen uns natürlich auch Fehlermeldungen. Meistens können wir schnell helfen oder den Bugfix auf jeden Fall für einen der nächsten Sprints einplanen. Aber manche Fehler sind hartnäckiger und haben am Ende eine ganz simple Ursache. Um solch einen Fehler geht es heute.
Weiterlesen nach der Anzeige

Hilko Holweg ist Frontend-Developer bei Heise Medien, wo es ihm besonders die Web-Performance angetan hat. Neben dem Frontend interessiert er sich auch für vieles mehr, das mit Technik zu tun hat. So schrieb er beispielsweise für die c’t einen Artikel über einen digitalen Assistenten mit Offline-Spracherkennung auf Basis des Raspberry Pi.
Eine Zeit lang erreichten uns immer mal wieder Berichte, dass bei Usern die Verbindung zu www.heise.de mit der Meldung ERR_HTTP2_PROTOCOL_ERROR nicht zustande kam. Schnell kristallisierte sich heraus, dass die betroffenen User noch ein paar Gemeinsamkeiten hatten: Alle nutzten Chrome als Browser und waren regelmäßige Besucher unseres Angebots. Damit war der Fehler zwar schon etwas eingegrenzt, aber unser größtes Problem war: Wir selbst konnten den Fehler lange Zeit nicht nachstellen.
Viele Kekse
Die Überlegungen gingen dennoch weiter. Was sammeln User (leider heutzutage) zuhauf, wenn sie auf einem weitgehend werbefinanzierten Angebot wie heise online unterwegs sind? – Cookies. Ein Test mit betroffenen Usern sorgte dann immerhin für einen Workaround: Cookies löschen half.
Zunächst hatten wir die Cookie-Größe im Verdacht und testeten mit besonders großen Cookies, aber auch damit ließ sich das Problem für uns nicht reproduzieren. Doch dann meldete sich ein Kollege aus der Redaktion mit demselben Fehler – er bekam ihn sogar regelmäßig. Wir baten ihn um Hilfe bei der Lösung, und er gab Bescheid, sobald der Bug erneut auftrat. Endlich konnten wir das Problem direkt beobachten.
Mit tcpdump schnitten wir den Netzwerkverkehr zwischen uns und dem Browser auf dem Load-Balancer (BigIP) mit, der TLS und HTTP2 termininiert. Dabei stellte sich heraus, dass BigIP selbst die HTTP2-Verbindung wegen eines „Protokollfehlers“ beendete. Da heise online nicht einfach eine direkte Verbindung vom Browser des Users zu unserem Webserver hat, sondern noch diverse (Netzwerk-)Infrastruktur dazwischen liegt, war es für uns schon mal sehr hilfreich, den Punkt ausfindig zu machen, an dem die Verbindung bricht und welcher Teil in der Kette diesen Abbruch auslöst.
Weiterlesen nach der Anzeige
Blick in die Bug-Reports
Mit den gewonnenen Erkenntnissen durchforsteten wir die Chrome-Bug-Reports. Bei einem Report war ein HTTP2-Protokoll-Mitschnitt angefügt, bei dem wir sehen konnten, dass Chrome jeden Cookie im HTTP2-Request mit einem separaten Set-Cookie-Header sendete. Das brachte uns auf die Idee, statt der Cookie-Größe einfach mit der schieren Anzahl zu experimentieren, und siehe da: Mit sehr vielen, kleinen Cookies ließ sich das Problem reproduzieren.
Ab hier wurde es dann einfach. Mithilfe unserer Admins fanden wir eine Einstellung in der BigIP, die die maximal zulässige Anzahl der Header setzte. Dieses Limit verschoben wir nun deutlich nach oben und schon war das Problem gelöst. Jedenfalls fürs Erste, denn natürlich ist das neue höhere Limit mit noch mehr Cookie-Headern ebenfalls wieder erreichbar, und der Fehler käme zurück.
Am Fehler sind aber noch ein paar Dinge interessant. In HTTP/1.x waren mehrere Cookie-Header noch unzulässig (siehe RFC 6265), in HTTP/2 hingegen kann der User Agent jedes Cookie als einzelnen Header senden (siehe RFC 7540) und genau das hat Chrome hier getan. Dieses Verhalten ist offensichtlich eine Optimierung, denn das Übertragen sich wiederholender Header lässt sich in HTTP/2 mit der HPACK-Header-Komprimierung (siehe RFC 7541) enorm optimieren. Das funktioniert aber nur für Header, die sich nicht ständig ändern. Ein großer Cookie-Header für alle Cookies müsste also immer wieder komplett neu übertragen werden, sobald sich auch nur ein einzelnes Cookie ändert.
Chrome zeigte leider in den Developer-Tools nichts davon an. Dort wird immer nur ein Cookie-Header gelistet, was die Fehlersuche nicht unbedingt erleichtert hat.
Ob das nun eine Problemlösung oder lediglich ein großes Pflaster ist, wird die Zeit zeigen. Die Ursachenforschung war aber definitiv mal wieder eine der interessanteren Recherchen im Developer-Alltag.
(rme)
Entwicklung & Code
React2Shell-Patch unzureichend, Angriffe weiten sich aus
Die Patches zum Schließen einer kritischen Sicherheitslücke im React-Server sind unvollständig, erklärt Meta. Admins sollen umgehend die neuen Aktualisierungen anwenden, um weitere entdeckte Sicherheitsprobleme auszubessern, empfiehlt das Unternehmen.
Weiterlesen nach der Anzeige
In einem Blog-Beitrag erklären die React-Entwickler, dass die zuvor veröffentlichten Patches anfällig sind. „Wenn du bereits die Updates gegen die kritische Sicherheitslücke in der vergangenen Woche angewendet hast, musst du nochmal aktualisieren“, schreiben sie in einem hervorgehobenen Eintrag. „Wenn du auf 19.0.2, 19.1.3 oder 19.2.2 aktualisiert hast, sind diese [Patches] unvollständig und du musst noch einmal aktualisieren“, präzisieren sie.
Weitere Lücken gefunden
IT-Sicherheitsforscher haben demnach drei weitere Sicherheitslücken in den React-Server-Komponenten entdeckt, als sie versucht haben, die Patches aus der Vorwoche zu missbrauchen. Die neuen Schwachstellen ermöglichen kein Einschleusen und Ausführen von Schadcode, die bisherigen Patches unterbinden diesen Angriff zudem effektiv, ergänzen die React-Entwickler. Neu sind Denial-of-Service-Lücken (CVE-2025-55184, CVE-2025-67779, CVSS 7.5, Risiko „hoch“) und eine Schwachstelle, die Sourcecode exponieren kann (CVE-2025-55183, CVSS 5.3, Risiko „mittel“). Die Schwachstellen finden sich in denselben Paketen und Versionen wie die bereits aktiv missbrauchte Sicherheitslücke (CVE-2025-55182, CVSS 10.0, Risiko „kritisch“).
Betroffen sind die Versionen 19.0.0, 19.0.1, 19.0.2, 19.1.0, 19.1.1, 19.1.2, 19.2.0, 19.2.1 und 19.2.2 von „react-server-dom-webpack“, „react-server-dom-parcel“ und „react-server-dom-turbopack“. In den Fassungen 19.0.3, 19.1.4 und 19.2.3 haben die Programmierer die sicherheitsrelevanten Fehler korrigiert.
Googles Threat-Intelligence-Team hat zum vergangenen Wochenende Erkenntnisse über laufende Angriffe auf die „React2Shell“ genannte Lücke CVE-2025-55182 zusammengefasst. Demnach hat Google kurz nach Bekanntwerden des Sicherheitslecks Anfang Dezember weitreichende Exploit-Versuche auf viele Cluster beobachtet, die von opportunistischem Cybercrime bis zu der Spionage verdächtigen Gruppierungen ausgehen. Google nennt von China ausgehende Spionageversuche, finanziell motivierte Aktivitäten und auch Attacken aus dem Iran. In den Kampagnen haben die Täter versucht, etwa Minocat-Tunneler, Snowlight-Downloader, Hisonic- und Compood-Backdoors sowie Krypto-Miner zu installieren. Einige der Beobachtungen überschneiden sich mit denen des IT-Sicherheitsunternehmens Huntress sowie mit weiteren bereits beobachteten Angriffen auf die Lücke.
(dmk)
-
UX/UI & Webdesignvor 2 MonatenIllustrierte Reise nach New York City › PAGE online
-
Künstliche Intelligenzvor 2 MonatenAus Softwarefehlern lernen – Teil 3: Eine Marssonde gerät außer Kontrolle
-
Künstliche Intelligenzvor 2 Monaten
Top 10: Die beste kabellose Überwachungskamera im Test
-
UX/UI & Webdesignvor 3 MonatenFake It Untlil You Make It? Trifft diese Kampagne den Nerv der Zeit? › PAGE online
-
UX/UI & Webdesignvor 2 MonatenSK Rapid Wien erneuert visuelle Identität
-
Entwicklung & Codevor 4 WochenKommandozeile adé: Praktische, grafische Git-Verwaltung für den Mac
-
Künstliche Intelligenzvor 2 MonatenNeue PC-Spiele im November 2025: „Anno 117: Pax Romana“
-
Künstliche Intelligenzvor 2 MonatenDonnerstag: Deutsches Flugtaxi-Start-up am Ende, KI-Rechenzentren mit ARM-Chips
