tiny little gizmos

Gegen den Strich – Dogmen und Fettleibigkeit in der Softwareentwicklung

Auf dem diesjährigen eCommerce Camp in Jena hatte ich einen Vortrag mit dem Titel „No KISS – we’re doing it wrong“ gehalten. Darin hatte ich mich kritisch mit aktuellen Trends in der Entwicklung von Webapplikationen auseinandergesetzt. Die Kernthese ist, dass in der Entwicklung der Trend zu Komplexität und Aufgeblähtheit geht. Alles was im Entwickler-Mainstream gerade angesagt ist, macht die Anwendungen fett, träge, angreifbar, schwieriger zu handhaben und aufwändig zu debuggen.

Ich hatte erwartet, mit dem Vortrag auf viel Widerspruch zu stoßen, aber das Feedback war seinerzeit wohlwollend. Das nehme ich nun zum Anlass, eine kleine Artikelserie mit dem Titel „Gegen den Strich“ zu diesem Thema zu schreiben.

Über Professionalität

Der Trend zur Komplexität und Fettleibigkeit ist so stark und wird so wenig hinterfragt, dass es mir zur Zeit wirklich die Lust an sogenannter „professioneller“ Softwareentwicklung vergällt.

Das betrifft Ebenen – angefangen von der Softwarearchitektur, über Designpatterns, benutzten Tools und Libraries, Entwicklungsmethoden, Deployment und Infrastruktur.

Ich habe gesehen, dass neue Produkte auf abstrakter Ebene eine hervorragende Architektur mitbringen und auf Codeebene derart akademisch aufgebläht sind, dass es mich bei dem Gedanken gruselt, in solch einem Codemoloch unter Zeitdruck Fehler suchen zu müssen.

Ich habe gesehen, dass Software, die bereits seit 10 Jahren erfolgreich eingesetzt wird, so „modernisiert“ wurde, dass die alten Designschwächen beibehalten wurden („wir müssen abwärtskompatibel bleiben“) und mit völlig anderen Architekturansätzen überformt, so dass am Ende weder der alte, noch der neue Ansatz sauber umgesetzt sind.

Ich hatte Diskussionen über den Einsatz von Tools, die ich für den angestrebten Zweck nicht benötigt habe, aber benutzen sollte, weil man das so macht und das angeblich eine saubere Methode sei.

Spätestens da klappt bei mir das Visier runter.

  • Ich soll Tools benutzen, obwohl ich sie aktuell nicht brauche?
  • Ich soll das „Framework des Tages“ nutzen, weil das gerade der heisse Scheiss ist?
  • Ich soll Software immer weiter abstrahieren, bis überhaupt nicht mehr erkennbar ist, an welcher Stelle eigentlich was gerade passiert?

Sorry Babe, ich bin nicht der Meinung, dass so etwas professionell ist.

Professionell ist, mit möglichst geringem Mitteleinsatz das Maximum an Output zu erzielen.

Professionell ist, Dinge so klar zu gliedern, dass im Fehlerfall sehr schnell die Ursache gefunden und behoben werden kann.

Professionell ist, Designs und Abläufe in sich stimmig zu entwerfen.

Professionell ist, unnötige Abhängigkeiten zu vermeiden

Professionell ist, Werkzeuge und Verfahren darauf zu überprüfen, ob sie die Abläufe verbessern, das Setup vereinfachen, Abhängigkeiten reduzieren und den Mitteleinsatz zu verringern oder den Output zu vergrößern.

Vom Anecken bei anderen Entwicklern

Ich wurde vor einiger Zeit gefragt, was ich von Symfony als Framework halte und der Fragende war sehr erstaunt, als er von mir die offensichtlich unerwartete Antwort bekam „sehr wenig“. Noch schlimmer: Die Frage, welches Framework gut fände habe ich mit „gar keines“ beantwortet. Und mit meiner Gegenfrage, warum er denn überhaupt ein Framework nutzen möchte und nicht lieber auf wenige, gut ausgesuchte Libraries setzt konnte er letztlich gar nichts anfangen.

Ich konnte regelrecht sehen, wie in seinem Kopf die Schublade „Kleiner Hobbyentwickler“ aufging und ich dort reingestopft wurde.

Gegen Gedankenlosigkeit und Dogmen

Natürlich ist nicht alles schlecht und es gibt tatsächlich sehr sinnvolle „Best Practices“.

Auf der Suche nach einem einheitlichen Codingstil gab es vor 15 Jahren erbitterte Grabenkäpfe mit Schwerverletzten. Heute stellt man seine IDE einfach auf „PSR-„/PSR-4“ ein und fertig.

Es macht auch wenig Sinn, lang darüber zu diskutieren, wie eine REST Schnittstelle funktioniert und der Einsatz des MVC-Patterns bei normalen Webanwendungen sehe auch ich als gesetzt an.

Was mich wirklich stört, ist nicht das einzelne Tool, sondern das Herangehen.

Wer Symfony nehmen will, soll es tun. Wer mit LESS, SASS, Grunt oder sonstigen Tools arbeiten möchte, soll es tun. Wer mit Jenkins seine Container für automatisierte Tests bauen will, der soll es tun.

Aber er sollte vorher ergebnisoffen prüfen, ob der Zusatzaufwand gerechtfertigt ist und man die Aufgaben nicht auch auf ganz andere, möglicherweise wesentlich schlankere Art lösen kann.

Diese Abwägung findet momentan einfach nicht statt. Die Diskussionen sind sehr einseitig und von Dogmen durchsetzt. Das kommt daher, dass man allen Ernstes Jobtitel wie „Software-Evangelist“ schafft.

So etwas tut auf Dauer keiner Branche gut.