<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Marvin Strauch</title><description>Praxisnotizen zu Cloud, Code und Infrastruktur. Bei dataforest baue und betreibe ich eine Cloud mit und schreibe auf, was dabei funktioniert und was nicht.</description><link>https://marvinstrauch.de/</link><language>de-DE</language><atom:link href="https://marvinstrauch.de/rss.xml" rel="self" type="application/rss+xml"/><item><title>Nur noch dieses eine Feature …</title><link>https://marvinstrauch.de/nur-noch-dieses-eine-feature/</link><guid isPermaLink="true">https://marvinstrauch.de/nur-noch-dieses-eine-feature/</guid><description>Über den Reflex, immer noch etwas hinzuzufügen, die unsichtbaren Kosten des Verschiebens und den Mut, das meiste wegzulassen.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Noch lief keine einzige Firewall in Produktion. Sie war gerade erst in Entwicklung: die Firewall für die &lt;a href=&quot;https://cloud.dataforest.net/&quot;&gt;dataforest cloud&lt;/a&gt;, mit der Nutzer ihren ein- und ausgehenden Datenverkehr selbst kontrollieren. Kein Nutzer hatte je eine Regel geschrieben. Aber die nächste Idee war schon geboren: geteilte IP-Listen, die man an einer Stelle pflegt, damit man nicht in jeder Firewall dieselben Adressen einzeln einträgt. Eine großartige Idee.&lt;/p&gt;
&lt;p&gt;Die Listen waren schon halb gebaut: eine eigene Seite, ein Eintrag in der Navigation, fertige Übersetzungen. Nur lief immer noch keine einzige Firewall in Produktion. Am Dach wurde gebaut, bevor die Wände standen. Also habe ich die Listen erst mal zurückgestellt: voller Fokus auf die Firewall.&lt;/p&gt;
&lt;p&gt;Der Impuls ist menschlich. Man will zu viel auf einmal und verliert dabei den Kern aus dem Blick. Dahinter steckt ein Trugschluss: Mehr ist besser. Nur stimmt das nicht.&lt;/p&gt;
&lt;h2&gt;Das nächste Feature lockt&lt;/h2&gt;
&lt;p&gt;Warum zieht es einen so verlässlich dorthin? Weil das Hinzufügen sichtbar ist und das Fertigstellen nicht. Das fängt schon im Daily an. »Ich habe die geteilten Listen angefangen« klingt nach »sehr beschäftigt«. Sagt man dagegen zum fünften Mal, man sitze noch an der Firewall, klingt es, als käme man nicht weiter.&lt;/p&gt;
&lt;p&gt;Und es liegt nicht nur daran, wie es nach außen wirkt. Auch ohne Publikum zieht es einen zum Hinzufügen. Eine &lt;a href=&quot;https://www.nature.com/articles/s41586-021-03380-y&quot;&gt;Studie in Nature&lt;/a&gt; hat das in acht Experimenten gezeigt: Sollen Menschen etwas verbessern, fügen sie meist etwas hinzu und übersehen die Lösung, die etwas wegnimmt, selbst dort, wo Weglassen klar besser wäre. Und je weniger Zeit zum Nachdenken bleibt, desto eher fügt man hinzu, statt wegzunehmen. Also genau dann, wenn man im Endspurt für ein neues Feature steckt.&lt;/p&gt;
&lt;p&gt;Die geteilten Listen kamen aus dem Team. Wer so einen Vorschlag macht, will das Produkt besser machen: Die Person setzt die Brille des Nutzers auf und sieht, was dieser eines Tages brauchen könnte. An der Qualität der Idee liegt es meistens nicht.&lt;/p&gt;
&lt;p&gt;Aber während über die nächste Idee geredet wird, verliert man das Wesentliche aus den Augen. Der Nutzer wartet auf das eine Feature, das fast fertig ist. Man selbst sagt sich: »Nur noch diese eine Ergänzung oder Anpassung, dann ist es wirklich fertig«, und so verschiebt sich das Release immer weiter. Den Preis dafür nennt Donald Reinertsen &lt;a href=&quot;https://en.wikipedia.org/wiki/Cost_of_delay&quot;&gt;Cost of Delay&lt;/a&gt;: die Kosten, die sich mit jedem weiteren Tag summieren, an dem etwas nicht draußen ist. Weil diese Kosten unsichtbar sind, tut man so, als wäre Verschieben kostenlos. Was zu spät kommt, fällt niemandem als Fehler auf, und was nie fertig wird, vermisst vermeintlich keiner.&lt;/p&gt;
&lt;h2&gt;Technik ist kein Selbstzweck&lt;/h2&gt;
&lt;p&gt;Das Zuviel ist nicht immer ein neues Feature. Letzten Herbst habe ich für ein Frontend eine Komponente gebaut, die andere Komponenten &lt;em&gt;lazy&lt;/em&gt; lädt, wenn diese wirklich in den Viewport kommen. Sie war voll ausgestattet mit einer Ladeanimation, Error-Handling und einem Timeout für den Fall, dass es ganz übel läuft. Mein Anspruch war, noch die letzten Millisekunden aus dem User Interface herauszukitzeln.&lt;/p&gt;
&lt;p&gt;Eingesetzt hat sie leider bis heute niemand. Alle Komponenten werden ganz normal geladen. Aber über die Geschwindigkeit hat sich nie ein Nutzer beschwert. Ganz im Gegenteil: Sehr viele Nutzer loben, wie schnell sich alles anfühlt.&lt;/p&gt;
&lt;p&gt;Und so hatte ich Technik um der Technik willen gebaut, ohne ein echtes Problem zu lösen. »Verfrühte Optimierung ist die Wurzel allen Übels«, hat &lt;a href=&quot;https://en.wikiquote.org/wiki/Donald_Knuth&quot;&gt;Donald Knuth&lt;/a&gt; schon vor einem halben Jahrhundert festgestellt. Schlimm war nicht die Zeit, die ich in die Komponente gesteckt habe. Schlimm wäre gewesen, die Maschinerie überall einzuziehen: Spürbar schneller wäre nichts geworden, nur komplizierter in der Wartung und anfälliger für Bugs.&lt;/p&gt;
&lt;h2&gt;Der Mut zum Weglassen&lt;/h2&gt;
&lt;p&gt;Und manchmal muss auch fertiger Code wieder raus. Weit über tausend Zeilen, um neuen Nutzern die Cloud zu erklären: mit eigener komplexer Seitenstruktur und einem eigenen Layout. So sah das Onboarding der Cloud aus. Leider hat es nicht so stabil funktioniert, wie ich mir das vorgestellt hatte, weshalb ich es durch ein simples Modal im Dashboard ersetzt habe. Am Ende blieben siebzig Zeilen Code übrig, die jetzt richtig gut funktionieren.&lt;/p&gt;
&lt;p&gt;Unbequem ist das schon: erst das Wesentliche fertig bauen, und zwar richtig. Und den Mut haben, das meiste wegzulassen.&lt;/p&gt;
&lt;p&gt;Das heißt nicht, dass mehr immer falsch ist. Manchmal ist die nächste Funktion genau die, die fehlt. Die Kunst ist, diesen Moment vom bloßen Reflex des Hinzufügens zu unterscheiden. Und aus eigener Erfahrung kann ich sagen, das ist gar nicht so einfach.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.vitsoe.com/de/ueber-vitsoe/dieter-rams&quot;&gt;»Weniger, aber besser«&lt;/a&gt;, das Leitmotiv des Gestalters Dieter Rams, ist mit der Zeit mein eigenes geworden. Das eine Feature, das in hoher Qualität läuft, ist mehr wert als zehn angefangene Funktionen, die bald das Licht der Welt erblicken werden (ganz sicher!). Die Firewalls laufen inzwischen in Produktion. Die geteilten Listen kommen, wenn sie dran sind. Und auch das Onboarding feiert sicherlich eines Tages sein Comeback.&lt;/p&gt;
&lt;p&gt;Wenn du ein Feature vermisst, dann schreib mir doch eine Mail an &lt;a href=&quot;mailto:hi@marvinstrauch.de&quot;&gt;hi@marvinstrauch.de&lt;/a&gt;, und bei der nächsten Roadmap-Planung habe ich endlich das beste Argument, das es gibt: einen Nutzer, der eine Funktion wirklich braucht.&lt;/p&gt;
</content:encoded><category>Engineering</category><author>hi@marvinstrauch.de (Marvin Strauch)</author></item></channel></rss>