Lean Software Development ist eine Disziplin der agilen Softwareentwicklung. Für die Softwareentwicklung bedeutet lean (schlank), nur das wesentliche ohne überflüssigen Balast zu implementieren. Lean Softwareentwicklung wird von klaren Anforderungen und einem hohen Verständnis für eine Technologieplattform getragen.
Anforderungen müssen klar formuliert sein, mit einem gemeinsamen Verständnis der Anforderungen auf Kundenseite und beim Entwickler. Entwickler die nur klar definierte Anforderungen implementieren sind verantwortungsbewusst und schützen den Quellcode vor unnötigem Balast. Hierzu zählen auch Workarounds, die allzu gerne aufgrund des Termindrucks einer tiefgründigen Analyse mit anschließender Problemlösung vorgezogen werden. Workarounds können auch entstehen, falls die eingesetzte Technologie nicht den gewünschten Funktionsumfang bietet, um eine Anforderung implementieren zu können. Workaround klingt negativ, ist aber nicht in allen Fällen negativ zu deuten. Workarounds können durch "Best Practices" manifestiert werden, sodass der negative Eindruck verschwindet.
Gedanken aus dem Jahr 2012:
Java EE 5 und Java EE 6 hat aus der Entwicklerperspektive sehr viel Balast verloren. Java EE ist leichtgewichtig geworden, Deployment Deskriptoren sind optional und werden meistens durch Annotationen ersetzt. EJB 3 Komponenten implementieren schlanke Java Schnittstellen ohne zusätzliche EJB-Artefakte (Home- und Komponentenschnittstellen) implementieren zu müssen.
Java EE ist vor-konfiguriert ("convention over configuration" bzw. "configuration by exception"), sodass häufig mit wenig Quellcode ein vollfunktionsfähiger Service implementiert werden kann. Java EE ist durchgängig, sodass mit JSF 2, CDI, EJB 3 und der JPA mit wenig Quellcode Daten von einer Webseite in die Datenbank geschrieben werden können. Java EE ist klar spezifiziert und durch eine Referenzimplementierung gesichert. Java EE ist ein Framework, der dem Entwickler keine unnötige Last mehr auflädt. Java EE ist herstellerunabhängig und kann auf unterschiedlichen Applikationsservern betrieben werden. Die Liste des Lobes könnte noch sehr viel länger werden, im Kern aber nicht mehr Aussagen als: Java EE ist ein Standard mit hohem Reifegrad.
Eine Klasse mit @WebService zu annotieren, sodass alle öffentlichen Methoden zu Webservice Methoden werden ist "lean". EJBs, Managed Beans, XHTML-Seiten in einem WAR zu deployen ist "lean". Keine lokalen Schnittstellen für lokale EJBs implementieren zu müssen ist "lean". Message Driven Beans und Timerservices zu annotieren ohne aufwendige Deployment-Deskriptoren zu programmieren ist "lean". Den Persistenzkontext, externe Ressourcen und EJBs per Dependency Injection (DI) zu nutzen ist "lean". Lifecycle und Business Interceptoren sind "lean". Der I-Stack, JAXP, JAXB, JAX-WS und JAX-RS sind "lean". Java EE ist definitiv schlanker geworden!
Gedanken aus dem Jahr 2025:
Die Entwicklerwelt hat sich verändert. Standards verschieben sich oder werden überholt. Heute bewegen wir uns häufig in Microservice Architekturen. Die Services sind deutlich schlanker geworden und erfüllen oft nur einen einzigen Use Case. Mit Spring Boot 3 wurde die Autokonfiguration nochmal deutlich erweitert. Microservices lassen sich mit Spring Boot sehr schnell in hoher Qualität programmieren. Eine REST Schnittstelle anzubieten, die Business Logik zu programmieren und die Daten zu persistieren ist durchgängig mit dem Spring Boot Framework möglich. Die Zutaten sind Spring Boot Dependencies und Annotationen sowie Frameworks wie beispielsweise Lombok.
Die Programmiersprache Java hat sich deutlich weiterentwickelt. Seit dem JDK 8 wird die funktionale Programmierung unterstützt. Lambda Ausdrücke und Methodenreferenzen sowie "Functional Interfaces" erlauben es Funktionen wie Datenstrukturen zu verwenden, um schlankeren ausdrucksstarken Quellcode programmieren zu können.
Hand in Hand mit der Stream API lassen sich Bulk Operationen auf Collections ausführen, die nahtlos mit Lambda Ausdrücken und Methoden-Referenzen kombiniert werden können. Streams sind Pipelines die auf Daten wirken.
Quelle 🚩Stream (Create) 🔅🔆🔆(Intermediate - Operationen) 💡 (Terminal - Ergebnis)
Filter - Map - Reduce Streams profitieren von Lambdas und ermöglichen schlanken gut lesbaren Quellcode zu programmieren.
Die Erweiterung der Date Time API und die neue Funktionen im Collection- und NIO-Framework vereinfachen die Programmierung von Java Anwendungen. Der syntaktische Zucker höherer Java Versionen wie beispielsweise die Schlüsselwörter "var" und "record", das "Pattern Matching" für "switch" und "instanceof" und vieles mehr, erleichtern es schlankere Software zu schreiben. Java ist längst nicht mehr so geschwätzig wie in der Vergangenheit, aber auch noch nicht so prägnant wie Kotlin. 💪
Zumindest die Technologien im Java-Umfeld sind schlanker und leichtgewichtiger geworden. Betrifft das aber auch die Umsetzung der Anforderungen?! 😎 Wer holt die Glaskugel raus?! 🌐