Leitplanken der Softwareentwicklung in der tarent
tarent Blog

Leitplanken der Softwareentwicklung in der tarent

20.09.2019 Posted 2 Monaten ago Martin Pelzer

Die Entwickler der tarent haben für sich Leitplanken der Softwareentwicklung definiert. Diese Leitplanken dienen der Orientierung bei der Planung und Durchführung unserer Softwareprojekte. Sie geben wenig konkrete Technologien vor, sondern beschreiben das Mindset, mit dem wir als tarentler an ein Softwareprojekt herangehen möchten.

Wir verwenden dabei bewusst den Begriff “Leitplanken” und nicht etwa “Vorgaben” oder “Regeln”, da wir wissen, dass jeder Projektkontext anders ist und möglicherweise hier und da Abweichungen von diesen Leitplanken erfordert. Außerdem möchten wir, dass unsere Entwicklungsteams möglichst eigenverantwortlich arbeiten. Daher möchten wir ihnen eher eine große Bandbreite an Möglichkeiten innerhalb weit gefasster Leitplanken als detaillierte Vorgaben geben.

Ende 2017 haben wir die Leitplanken unter Einbeziehung aller tarent-Entwickler zum ersten Mal aufgeschrieben. Mitte 2019 haben wir diesen Stand dann kritisch hinterfragt, breit diskutiert und uns auf eine überarbeitete Fassung geeinigt. In dieser aktualisierten Fassung bestehen unsere Leitplanken der Softwareentwicklung aus 14 Punkten mit jeweils einer Erläuterung.

1. Agiles Vorgehen

Agile Vorgehensweisen erhöhen die Chancen auf ein erfolgreiches Projekt. Sie ermöglichen kurze Feedbackzyklen und fördern durch Transparenz und frühzeitige Kommunikation ein gemeinschaftliches Arbeiten im Team und mit dem Kunden. Agiles Arbeiten bedeutet für uns:

  • eigenverantwortliches Arbeiten im Team,
  • kleine Ziele fokussiert und kontinuierlich erreichen,
  • unser Vorgehen ständig hinterfragen und verbessern,
  • eng mit dem Kunden zusammenarbeiten.

Agiles Arbeiten muss für uns nicht immer an ein konkretes Vorgehensmodell gebunden sein. Wir sehen allerdings, dass wir in vielen Projekten, die nach Scrum arbeiten, sehr erfolgreich sind.

2. Leichtgewichtige, fachlich geschnittene Architektur

Wir sind davon überzeugt, dass Softwarearchitekturen einem leichtgewichtigen, modularen Ansatz folgen und keinen monolithischen Systemen entsprechen sollten.
Grundprinzipien wie ein vertikaler / fachlicher Schnitt, lose Kopplung und den Vorteil, dass einzelne Teams die Verantwortung für ein Modul besitzen, halten wir aus technischer, fachlicher und organisatorischer Sicht für sinnvoll.
Auch möchten wir unsere Software so designen, dass sie skalierbar und einfach betreibbar bzw. wartbar ist.

3. Vier-Augen-Prinzip

Das Vier-Augen-Prinzip hilft auch in der Softwareentwicklung, eine höhere Qualität von Source Code und Ergebnissen zu gewährleisten. Deswegen enthält der Entwicklungsprozess in unseren Teams immer einen Review-Prozess – sowohl für Source Code als auch für alle anderen Ergebnisse und Arbeiten wie beispielsweise Evaluationen oder Dokumentation.

4. Dokumentation

Nicht nur für aktuelle oder zukünftige Teammitglieder, sondern auch für sich selbst lohnt es sich, eine ausreichende und zielgruppenorientierte Dokumentation der eigenen Arbeit zu erstellen. Dabei halten wir uns an das Prinzip: So viel wie nötig, so wenig wie möglich.
Dies schließt sowohl eine möglichst Code-nahe Dokumentation in Form von Kommentaren oder Readmes, als auch eine Dokumentation der grundsätzlichen Architektur, der Benutzung, des Betriebs, der Prozesse und anderweitige technische Dokumentation mit ein.

5. Continuous Integration & Delivery

Häufige Releases und kurze Feedbackzyklen sind ein wichtiger Faktor, um herauszufinden, ob man mit seiner Software in die richtige Richtung läuft. Um dies zu erreichen möchten wir den Build- und Release-Prozess unserer Software mit möglichst wenig Aufwand durchführen können, damit neu geschaffene oder geänderte Funktionalität schnell integriert, ausgerollt und getestet werden kann. Aus diesem Grund sind automatisierte Build-Prozesse für uns Teil eines jeden Projektes. Automatisiertes Deployment streben wir an.

6. Automatisiertes Testen

Um eine hohe Qualität unserer Software gewährleisten zu können, halten wir Testautomatisierung auf möglichst vielen Testebenen für sinnvoll. Ansatz für eine Teststrategie ist dabei die Testpyramide. Zum Erreichen einer hohen Testautomatisierung halten wir z.B. Test Driven Development für ein gutes Verfahren. Darüber hinaus ist im Regelfall ein ergänzendes manuelles, exploratives Testen sinnvoll.

7. Einsatz von Open-Source-Komponenten

Unsere Lösungen sollen, bei gleichem Nutzen und soweit dies technologisch sinnvoll ist, auf Open-Source-Technologien basieren. Das bedeutet, dass wir Open-Source-Lösungen bevorzugen, uns aber Closed-Source-Lösungen nicht verschließen, wenn sie signifikante Vorteile wie z.B. für den umzusetzenden Use-Case passendere Features bieten. Wir begrüßen es, wenn wir im Rahmen unserer Projekte etwas an die Open-Source-Welt zurückgeben können.

8. Programmiersprachen

Unseren Kernkompetenzen nach verwenden wir bei unseren Lösungen primär folgende Programmiersprachen, damit Einarbeitungszeiten in neue Projekte und Teams nicht zu sehr ausarten:

Java
Die tarent ist traditionell ein Unternehmen mit erheblicher Java-Expertise. Auch ist die Sprache mit Sicherheit in der nahen bis mittelfristigen Zukunft nicht aus IT-Projekten wegzudenken. Wir wollen unser Wissen um diese Plattform nicht aufgeben und sehen hier auch weiterhin einen wichtigen Schwerpunkt unserer täglichen Arbeit.

Kotlin
Kotlin ist eine weitere Sprache auf der JVM, der wir eine wachsende Bedeutung beimessen. Insbesondere die Akzeptanz der Sprache durch Android und das Spring-Framework als „First-Class Citizen“ zeigen uns, dass wir mit dieser Einschätzung nicht alleine stehen.

Go
Diese Sprache aus dem Hause Google erfreut sich auch in der tarent großer Beliebtheit und besticht mit ihrer Leichtgewichtigkeit. Wir glauben, dass sie eine große Zukunft in unserer Branche hat.

JavaScript / TypeScript
Moderne Web-Frontend-Entwicklung ist ohne JavaScript mittlerweile nicht mehr denkbar. User Interfaces laufen heute in der Regel im Browser Client-seitig, d.h. als JavaScript-Anwendung im Browser, die nur punktuell Daten vom Server abfragt.
Zudem ist JavaScript mittlerweile auch im Backend (NodeJS) und in der Cloud – vor allem bei Serverless Functions – verbreitet.

Python
Als universelle und flexible Sprache eignet sich Python nicht nur zum Scripten oder für komplexere Projekte. Durch eine Vielzahl an einfach integrierbaren Paketen ist Python auch das Mittel der Wahl für Projekte im Bereich Künstliche Intelligenz.

Ergänzt werden diese Programmiersprachen durch andere Sprachen für bestimmte Teilaspekte wie beispielsweise mobile App-Entwicklung (z.B. Swift), Testing (z.B. Groovy) oder Scripting (z.B. Shell).

Auch kann es die Entscheidung geben, eine andere als die genannten Programmiersprachen zu verwenden. Dies sollte aber gut begründet werden können und auch die Verbreitung und die daraus resultierende Wartbarkeit berücksichtigen.

9. Betriebssystem

Von uns erstellte Software wird im Regelfall auf Linux-Systemen betrieben. Ausgenommen davon ist natürlich Software, die explizit für andere Betriebssysteme entwickelt werden muss, wie beispielsweise bei mobiler App-Entwicklung.

10. Sicherheit

Bei der Implementierung von Lösungen bedenken wir mögliche Angriffsvektoren und reduzieren diese auf ein Minimum, um automatisch einen angemessenen Sicherheitsstandard zu gewährleisten. Außerdem reagieren wir auf gefundene Sicherheitslücken zeitnah durch Updates der betroffenen Bibliotheken. Dazu setzen wir auch Tools zur automatisierten Benachrichtigung über bekannte Sicherheitslücken ein.

11. KISS-Prinzip

Unter Berücksichtigung der anderen genannten Qualitätsmerkmale und der gewünschten Funktionalität streben wir nach simplen und eleganten Lösungen, die unnötige Komplexität vermeiden – sowohl auf fachlicher als auch auf technischer Ebene. Daher setzen wir auf das Prinzip “Keep It Simple, Stupid”.

12. Performanz

Neben der korrekten Erfüllung der fachlichen Anforderungen sollte Software effizient sein und wenige Ressourcen verbrauchen, um damit durch Nachhaltigkeit (Green IT), Benutzbarkeit und Wirtschaftlichkeit zu punkten. Deswegen möchten wir bei der Entwicklung von Lösungen Aspekte zur Sicherstellung der Performanz und Effizienz berücksichtigen.

13. Umgang mit personenbezogenen Daten

Spätestens seit der breiten Diskussion über die DSGVO hat der Umgang mit personenbezogenen Daten besondere Aufmerksamkeit erhalten. Wir berücksichtigen von Beginn eines Softwareprojektes an den korrekten Umgang mit solchen Daten und folgen dem Prinzip der Datensparsamkeit – d.h. wir persistieren und loggen nur die personenbezogenen Daten, die für den Anwendungsfall der Software unabdingbar sind.

14. Wirtschaftlichkeit

Software ist kein Selbstzweck, sondern dient dazu, Prozesse zu vereinfachen, Hilfsmittel bereitzustellen und letzten Endes Geld zu verdienen. Deshalb behalten wir bei unserer Arbeit immer auch die Wirtschaftlichkeit im Blick. Unter Berücksichtigung der in diesen Leitplanken niedergeschriebenen Aspekte möchten wir für unsere Kunden eine wirtschaftlich sinnvolle Lösung anbieten.