Connect with us

Entwicklung & Code

Projektmanagement: Mehr Demokratie im Team wagen


Moin.


Escape the Feature Factory: Stefan Mintert

Escape the Feature Factory: Stefan Mintert

(Bild: 

Stefan Mintert

)

Stefan Mintert arbeitet mit seinen Kunden daran, die Unternehmenskultur in der Softwareentwicklung zu verbessern. Das derzeit größte Potenzial sieht er in der Leadership; unabhängig von einer Hierarchieebene.

Die Aufgabe, dieses Potenzial zu heben, hat er sich nach einem beruflichen Weg mit einigen Kurswechseln gegeben. Ursprünglich aus der Informatik kommend, mit mehreren Jahren Consulting-Erfahrung, hatte er zunächst eine eigene Softwareentwicklungsfirma gegründet. Dabei stellte er fest, dass Führung gelernt sein will und gute Vorbilder selten sind.

Es zeichnete sich ab, dass der größte Unterstützungsbedarf bei seinen Kunden in der Softwareentwicklung nicht im Produzieren von Code liegt, sondern in der Führung. So war es für ihn klar, wohin die Reise mit seiner Firma Kutura geht: Führung verbessern, damit die Menschen, die die Produkte entwickeln, sich selbst entwickeln und wachsen können.

Für Heise schreibt Stefan als langjähriger, freier Mitarbeiter der iX seit 1994.

Im Allgemeinen finden wir Demokratie toll. In Unternehmen ist davon nicht viel zu merken. Vorgesetzte werden selten von den Mitarbeiterinnen und Mitarbeitern gewählt. Und abgewählt werden sie schon gar nicht. Und wie sieht es eigentlich im Hinblick auf Demokratie im Team aus?

Formal sind in den meisten Teams alle Mitglieder gleichberechtigt. Die Realität sieht meist anders aus: Es gibt Rollen, Zuständigkeiten und unterschiedliche Machtverhältnisse. Davon ist manches unausgesprochen und Teil der Teamkultur. Wenn daraus schlechte Entscheidungen entstehen, kann es sich lohnen, die Entscheidungshoheit im Team zu hinterfragen. Wie das geht, zeigt das folgende Beispiel.

Ich habe als Teamcoach mit einem Team in der Frontendentwicklung zusammengearbeitet. In der Kennenlernphase habe ich erste Gespräche mit allen Teammitgliedern geführt. Dabei habe ich auch gefragt, was gut und was schlecht läuft. Von den meisten Gesprächspartnern habe ich die Rückmeldung bekommen, dass sie das Framework für die Frontendentwicklung nicht mögen. Es ist proprietär und es gibt keine aktuelle Doku. Eine bessere Alternative sei beispielsweise Angular. In einem Gespräch ging es so weit, dass der Entwickler darüber nachdachte, zu kündigen. Seine Sorge war, dass er sein Können und damit seinen Marktwert verlieren würde, wenn er noch ein paar Jahre in diesem Umfeld arbeitete. Ich teilte seine Einschätzung.

Nun stellt sich natürlich die Frage, weshalb das Team mit diesem ungeliebten Framework arbeitete. Handelte es sich um eine Vorgabe des Unternehmens? Gab es technische Abhängigkeiten, die einen Wechsel unmöglich machten?

Nein, nichts davon. Der Grund, der mir genannt wurde, lautet: Das eingesetzte Framework war die Selbstentwicklung eines Teammitglieds. Für den weiteren Verlauf nenne ich diese Person „Bob“. Mehrere Ansätze, Bob dazu zu bringen, ein anderes Framework zu verwenden, haben nichts gebracht; so wurde es mir zumindest erzählt.

Abgesehen von Bob waren alle Teammitglieder externe Entwickler. Ich hatte den Verdacht, dass es die Haltung „Der Kunde ist König“ gab und man glaubte, als Dienstleister kein Mitspracherecht zu haben. Um das zu hinterfragen, habe ich das Thema in einer Retrospektive in den Mittelpunkt gestellt: „Wie treffen wir in unserem Team Entscheidungen?“

Ich stelle die Frage nicht im luftleeren Raum, sondern bevorzugt anhand von aktuellen, relevanten Beispielen. Dazu frage ich das Team als Erstes: „Welche Entscheidungen, die in der Vergangenheit getroffen wurden oder regelmäßig getroffen werden, beeinflussen Euch und die Arbeit des Teams am meisten?“ Die Antworten teile ich in zwei Gruppen: Dinge, die außerhalb des Teams von anderen Personen und Dinge, die innerhalb des Teams entschieden werden. Nur über die zweite Gruppe lohnt es sich zu sprechen, wenn man konstruktive Ergebnisse erhalten möchte und nur das Team anwesend ist.

Typische Beispiele für Antworten sind: Welche Datenbank verwenden wir? Welches Repo verwenden wir? Wie sehen unsere Coding-Regeln aus? Welche Testabdeckung wollen wir erreichen? Wie sieht unser Branching-Workflow aus?

Ob das Team zu diesem Zeitpunkt auch die konfliktbehafteten Entscheidungen anspricht, lässt sich natürlich nicht vorhersagen. Im Fall meines oben genannten Teams kam das problematische Thema auf den Tisch: „Welches Frontend-Framework verwenden wir?“

Sobald die Themen bekannt und priorisiert sind, ordne ich sie in eine Tabelle ein, die wie folgt aussieht.


Eine leere Team Decision Matrix

Eine leere Team Decision Matrix

(Bild: Stefan Mintert/Kutura)

In der ersten Spalte stehen die Dinge, deren Entscheidungshoheit zu klären sind. Die weiteren Spalten stehen für verschiedene Entscheidungswege. Wird ein Thema nur von einer Person entschieden oder braucht es Einstimmigkeit im Team? Ist eine einfache oder eine absolute Mehrheit erforderlich? Oder genügt eine (einfache) Mehrheit, solange niemand ein Veto einlegt?

Im weiteren Verlauf geht das Team in zwei Schritten, Zeile für Zeile, durch. Der erste Schritt dient dazu, den Status quo zu ermitteln: „Wie entscheiden wir das Thema bisher?“ (Ist-Zustand) Zur Antwort markiert jedes Teammitglied die Spalte, die seiner Meinung nach den bisherigen Entscheidungsmodus darstellt.

In meinem obigen Beispiel sah die Tabelle nach diesem Schritt wie folgt aus.


Die Team Decision Matrix nach dem ersten Schritt

Die Team Decision Matrix nach dem ersten Schritt

(Bild: Stefan Mintert/Kutura)

Alle fünf Teammitglieder waren sich einig: Die Frage, welches Frontend-Framework zum Einsatz kommt, wurde und wird nur von einer Person entschieden (markiert durch die bleibenden Punkte). Der zweite Schritt ist der spannende: Wie wollen wir das Thema in Zukunft entscheiden? (Soll-Zustand)

Bei dieser Frage habe ich folgendes Ergebnis erhalten:


Die Team Decision Matrix nach dem zweiten Schritt

Die Team Decision Matrix nach dem zweiten Schritt

(Bild: Stefan Mintert/Kutura)

Zur Überraschung aller Beteiligten war sich das Team auch hier einig: Welches Framework zur Anwendung kommt, ist eine Teamentscheidung. Mehr noch: Ein Veto einer einzelnen Person würde eine Mehrheitsentscheidung blockieren.

Angesichts der bisherigen Erzählung war ich (und einige Entwickler) von verhärteten Fronten ausgegangen. Durch die einfache Übung, die auch unter dem Namen Team Decision Matrix bekannt ist, kam das Team ins Gespräch und es eröffnete sich die Möglichkeit, ein (neues) Framework auszuwählen, das das Team gemeinsam als zukunftstauglich einstufte.

Im Podcast Escape the Feature Factory greife ich ausgewählte Themen des Blogs auf und diskutiere sie mit einem Gast. Durch den Austausch lerne ich eine zweite Perspektive kennen. Wenn Du auch daran interessiert bist, findest Du den Podcast bei Spotify, Deezer, Amazon Music, und Apple Podcasts. Wenn Du die Themen, die ich im Blog anspreche, in Deiner Firma verbessern möchtest, komm’ in unsere Leadership-Community für Softwareentwicklung.


(rme)



Source link

Entwicklung & Code

Schwachstelle in Rust-Library für tar-Archive entdeckt


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Die Rust-Library async-tar enthält eine Schwachstelle, die es Angreifern ermöglicht, versteckte Inhalte in tar-Archiven einzuschleusen.

Weiterlesen nach der Anzeige

Das auf sichere Laufzeitumgebungen spezialisierte Unternehmen Edera hat den Fehler veröffentlicht und ihm den etwas dramatischen Namen TARmageddon gegeben. Das Unternehmen hatte einen eigenen Fork der Library gepflegt, der inzwischen archiviert ist, aber noch einen Patch erhält.

Die Library async-tar dient dazu, tar-Archive asynchron zu lesen und zu schreiben. Sie ist deutlich performanter als die synchron arbeitende tar-Library für Rust.

Der zugehörige CVE-Eintrag (Common Vulnerabilities and Exposures) CVE-2025-62518 hat den Schweregrad „hoch“ mit dem Wert 8,1 von 10.

Auch wenn sich der CVE-Eintrag auf die Library astral-tokio-tar bezieht, betrifft die Schwachstelle die Library async-tar und deren Forks. Der am weitesten verbreitete Fork tokio-tar, mit über 7 Millionen Downloads im Rust-Paketmanager crates.io, wird seit zwei Jahren nicht mehr gepflegt. Damit bleibt er weiter verwundbar.

Wer tokio-tar nutzt, sollte auf den Fork astral-tokio-tar oder eine andere Alternative wie die nicht asynchrone tar-Library wechseln. Der Fork astral-tokio-tar hat mit Version 0.5.6 ein Update erhalten, das die Schwachstelle behebt.

Weiterlesen nach der Anzeige

Der Fehler liegt in der Verarbeitung der Header für die tar-Dateien. async-tar verarbeitet sowohl das ustar- als auch das PAX-Format. Wenn eine Datei Header für beide Formate enthält, kommt es zur Inkonsistenz: Der Parser nutzt die im ustar-Header angegebene Größe, während für andere tar-Werkzeuge die PAX-Werte gelten.

Wenn der PAX-Header die richtige Dateigröße angibt, ustar aber mit der Größe 0 angegeben ist, springt der Parser nicht weiter, sondern verarbeitet den Inhalt verschachtelter Archive, die aber andere tar-Werkzeuge nicht als solche erkennen und damit auch nicht untersuchen.

Der Blogbeitrag zu der Schwachstelle zeigt das in folgendem Kurzbeispiel:


Expected by scanner/validator:
Entry 1: "outer-file.txt"
Entry 2: "inner-tar-file.tar" (0 bytes per ustar, but N bytes in PAX)
Entry 3: "next-file.txt"

Actually extracted by tokio-tar:
Entry 1: "outer-file.txt"
Entry 2: "inner-tar-file.tar" (0 bytes per ustar)
Entry 3: "inner-file1.txt" (from inner TAR)
Entry 4: "inner-file2.txt" (from inner TAR)
Entry 5: "next-file.txt" (continues normally)


Der Parser von async-tar verarbeitet die verschachtelten Dateien als reguläre Inhalte des Archivs.

Als theoretisches Angriffsszenario führt der Beitrag den Python-Paketmanager uv auf, der ebenso von Astral stammt wie der inzwischen gepatchte Fork astral-tokio-tar. Vor dem Patch der in uv genutzten Library hätten Angreifer versteckten Schadcode über ein verschachteltes tar-Archiv einschmuggeln können.

Edera hat den Bug vor zwei Monaten entdeckt. Anschließend hat das Team einen Patch erstellt und die Maintainer der Libraries informiert. Die Libraries astral-tokio-tar und krata-tokio-tar haben den Patch erhalten, und der Maintainer von async-tar hat den Fehler selbst behoben. Allerdings finden sich im Paketmanager crates.io für async-tar und krata-tokio-tar nach wie vor etwa ein Jahr alte Versionen ohne Patch.

Dass der Bug erst jetzt veröffentlicht wurde, liegt an dem Embargo von 60 Tagen seit Edera den Maintainern den Bug gemeldet hat.


(rme)



Source link

Weiterlesen

Entwicklung & Code

React-Framework Next.js 16 macht Turbopack zum Standard-Bundler


Das Unternehmen Vercel hat Next.js 16 veröffentlicht. Im React-Framework hat sich einiges getan: Der schnellere webpack-Nachfolger Turbopack ist nun im stabilen Status verfügbar und wird als Standard-Bundler verwendet, der React-Compiler-Support ist ebenfalls stabil und es gibt neue Features unter anderem für Caching, Routing und die Anbindung an das Model Context Protocol.

Weiterlesen nach der Anzeige


enterJS 2026

enterJS 2026

(Bild: jaboy/123rf.com)

Call for Proposals für die enterJS 2026 am 16. und 17. Juni in Mannheim: Die Veranstalter suchen nach Vorträgen und Workshops rund um JavaScript und TypeScript, Frameworks, Tools und Bibliotheken, Security, UX und mehr. Vergünstigte Blind-Bird-Tickets sind bis zum Programmstart erhältlich.

Sowohl für Entwicklungs- als auch für Produktions-Builds hat Turbopack den stabilen Status erreicht. Als Standard-Bundler für alle Apps soll Turbopack bis zu zehnmal schnelleren Fast Refresh und zwei- bis fünfmal schnellere Builds ermöglichen.

Um Turbopack zu nutzen, ist in Next.js 16 keine weitere Konfiguration erforderlich. In Apps mit benutzerdefiniertem webpack-Setup können Developer weiterhin den älteren Bundler verwenden:


next dev --webpack
next build --webpack


Eine Neuerung, die bereits bei allen internen Vercel-Apps im Einsatz ist, hat Turbopack ebenfalls zu bieten: Als Beta unterstützt der Bundler Dateisystem-Caching während der Entwicklung. Er speichert Compiler-Artefakte zwischen Ausführungen, um deutlich schnellere Compile-Zeiten bei Neustarts zu erreichen – insbesondere in großen Projekten. Das Beta-Feature lässt sich in der Konfiguration aktivieren:


const nextConfig = {
  experimental: {
    turbopackFileSystemCacheForDev: true,
  },
};
 
export default nextConfig;


Anfang des Monats ist der React Compiler 1.0 erschienen, und Next.js 16 bietet dafür integrierten Support – jetzt im Status stable. Der Support ist dennoch standardmäßig deaktiviert, solange das Next.js-Team noch weitere Daten sammelt. Entwicklerinnen und Entwickler, die die Option aktivieren, müssen offenbar mit längeren Kompilierungszeiten in Entwicklung und Builds rechnen, weil der React Compiler Babel verwendet.

Weiterlesen nach der Anzeige

Neben der Stabilisierung von Features hat Next.js 16 weitere Neuerungen zu bieten. Dazu zählt Next.js DevTools MCP, eine Integration mit dem Model Context Protocol (MCP) für das KI-gestützte Debugging mitsamt Kontexteinblicken in eine Next.js-Anwendung. Neu sind auch die Cache Components, ein Set von Features, um das Caching in Next.js expliziter und flexibler zu gestalten. Sie bringen die neue "use cache"-Direktive, mit der sich Seiten, Komponenten und Funktionen cachen lassen.

Auf Details zu diesen und weiteren Features in Version 16 geht das Next.js-Team in einem Blogeintrag ein.


(mai)



Source link

Weiterlesen

Entwicklung & Code

BentoPDF 1.0: Neues Open-Source-PDF-Werkzeug fürs Self-Hosting


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Mit BentoPDF 1.0.0 steht ab sofort ein neues Open-Source-Werkzeug für die PDF-Verarbeitung bereit. Besonderen Wert legen die Entwickler auf eine lokale Datenverarbeitung ohne Cloud-Anbindung. Das erste Major Release bringt zahlreiche Funktionen für professionelle Workflows mit.

Weiterlesen nach der Anzeige

Zu den wichtigsten Updates gehört die Posterize-Funktion, die große PDFs in mehrere kleinere Dokumente für Posterdrucke aufteilt. Die Linearize-Funktion optimiert PDFs für schnelles Web-Viewing durch progressive Ladeoptimierung. Hinzu kommen Bulk-Operationen: Mehrere PDFs lassen sich gleichzeitig komprimieren oder in einzelne Seiten zerlegen.

Das Tool entfernt automatisch leere Seiten aus Dokumenten und bietet einen Interleave-Merge-Modus, bei dem mehrere PDFs verzahnt zusammengeführt werden – praktisch etwa beim Scannen von Vorder- und Rückseiten. Zudem können Dateien als Anhänge direkt in PDFs eingebettet werden.

Zudem haben die Entwickler seit der Betaphase die OCR-Funktionen grundlegend überarbeitet. Hier sind Whitelist-Zeichensätze für präzisere Texterkennung neu hinzugekommen. Die Performance bei Split-, Merge- und Komprimierungsvorgängen hat das Projekt optimiert und den Speicherverbrauch bei Bulk-Operationen reduziert.

Für die Bereitstellung stehen verschiedene Docker-Konfigurationen bereit, die sich sowohl für Entwicklungsumgebungen als auch für Produktivbetrieb eignen. Die überarbeitete Docker-Compose-Konfiguration soll die Einrichtung von BentoPDF erleichtern. Nutzer von Unraid finden ein vorgefertigtes Template für die Integration in ihre Infrastruktur.

Das Projekt steht auf GitHub zur Verfügung, wo interessierte Nutzer ebenfalls eine vollständige Liste der unterstützten Features finden. Die vollständigen technischen Details und Installationsanleitungen finden sich in der Projektdokumentation.

Weiterlesen nach der Anzeige


(fo)



Source link

Weiterlesen

Beliebt