Starten Sie ihr Softwareprojekt mit Smartsquare
xing twitter linkedin github

Das Richtige richtig tun.

Um gute Software zu entwickeln, bedarf es zweier Grundpfeiler: Zum einen ein tiefgreifendes Verständnis der fachlichen Ziele als Voraussetzung dafür, die richtigen Lösungen zu finden. Zum anderen eine umfangreiche Expertise in der Softwareentwicklung, um diese dann effizient und effektiv zu implementieren.

In einem professionellen Softwareentwicklungsprozess greifen deshalb viele technische und nicht-technische Themenbereiche ineinander. Wir haben unsere Mitarbeiter gebeten, aus ihrer persönlichen Sicht besonders wichtige Aspekte unserer Arbeitsweise hier bei Smartsquare kurz zu beschreiben.

Erfolgsgeschichten von smartsquare
Smartsquare Projektbeispiel

Anforderungsanalyse

Unter dieser Überschrift sehe ich einen bunten Strauß von Werkzeugen und Methoden, aus dem wir die jeweils passenden auswählen. So finden wir heraus, was ein Softwareprodukt im Einzelnen für die Ziele des Auftraggebers leisten muss. Hierbei gilt es die richtige Balance zwischen gründlichem Arbeiten, Verbindlichkeit und ausreichender Dokumentation auf der einen Seite, sowie Flexibilität, Kreativität und Geschwindigkeit auf der anderen Seite zu wahren.

Wir arbeiten beispielsweise mit Impact Mapping, um übergreifende Geschäftsziele auf einzelne Produkteigenschaften herunterzubrechen. Konzepte wie das Kano-Modell helfen dabei, Aufwand und strategischen Nutzen von Features zu bewerten und die richtige Priorisierung in Backlogs und auf Roadmaps vorzunehmen. Um Missverständnissen zwischen Fachabteilungen und Entwicklern vorzubeugen, setzen wir auf Domain Driven Design (DDD) und Event Storming. Und mit den Prinzipien des Design Thinking können wir komplexe Aufgaben so lösen, dass die Software aus der Anwendersicht gut funktioniert.

Alexander Niemann - Geschäftsführer & Business Analyst
Smartsquare Projektbeispiel

UX Design

User Experience wird oft synonym mit Usability und User Interface Design verwendet. Wir sehen diese Themen jedoch eher als Untergruppen des User Experience Designs. Der Entwurf des Produkts beginnt weit vor den ersten Mockups und Prototypen - in der Vorstellung der Stakeholder. Bereits zu diesem Zeitpunkt entstehen Szenarios, die sich später wie rote Fäden durch die Anwendung ziehen. In der Softwarewelt sprechen wir gerne von User Stories und Epics. In Kombination mit sogenannten Personas helfen sie uns, die Benutzer und Ihre Wünsche bestmöglich zu verstehen.

Sobald die ersten Anwendungsfälle Form annehmen, kann der kreative Teil beginnen. Eine lockere Umgebung, kühle Getränke, ein Whiteboard und ein paar farbige Marker: Mehr braucht es für diesen Teil nicht. Lösungsvorschläge werden skizziert, bewertet und eventuell auch wieder verworfen. Die daraus gewonnenen Erkenntnisse werden anschließend in Wireframes oder Prototypen überführt. Ab diesem Zeitpunkt gibt es drei Aktivitäten, die sich stetig wiederholen: Testen, beobachten und verbessern. Mit Methodiken wie Hallway- und A/B Testing versuchen wir, möglichst viel über unsere Benutzer zu erfahren und die Anwendung ihrem Verhalten anzupassen.

Dennis Dierkes - Companion Developer & UX Designer
Smartsquare Projektbeispiel

Qualitätssicherung

Bei Qualitätssicherung haben viele ein Bild von dicken ISO Normen, langen Excel-Dateien mit Testfällen und lähmender Bürokratie vor Augen. Das sehe ich ganz anders. Mir ist vor allem wichtig, das wir qualitativ hochwertige Software schreiben, die das tut, was der Kunde erwartet.

Dazu arbeiten wir testgetrieben. Wir schreiben vor der Umsetzung Testfälle, die die neuen Anforderungen prüfen. Kommen dabei noch weitere Fragen auf, kann ich diese kurzfristig klären ohne eine bereits bestehende Umsetzung umbauen zu müssen. Diese automatisierten Tests erlauben uns später eine stetige Weiterentwicklung des Quelltextes ohne Angst vor versehentlichen Fehlern zu haben. Neben der korrekten Umsetzung legen wir viel Wert auf wartbare und effiziente Software. Dazu führen wir Code Reviews durch und nutzen agile Entwicklungsmethoden und moderne Programmiersprachen. Bei der Kontrolle der Software steht bei uns aber die Automatisierung im Vordergrund.

Für mich ist Qualitätssicherung daher vor allem ein Werkzeug, um eine hohe Wertschöpfung zu erreichen und langlebige Software zu entwickeln. Und es erlaubt mir, nach der Arbeit weiteren spannenden Leidenschaften nachgehen zu können, ohne mir Sorgen über unsere Projekte zu machen.

Sascha Koch - Senior Developer & Software Craftsman
Smartsquare Projektbeispiel

Continuous Integration und Delivery

Einer der wichtigsten Punkte bei der Entwicklung von guter Software ist die ständige Qualitätssicherung. Wie stellt man sicher, dass sich ein neu hinzugefügtes Feature richtig verhält? Und wie, dass danach auch alle bestehenden Features weiterhin wie gewünscht funktionieren? Meiner Meinung nach lässt sich das am besten durch automatisiertes und laufend wiederholtes Testing und Linting (statische Coderanalyse) erreichen. Der Code soll nach jeder Änderung auf Fehler und die Einhaltung der Anforderungen gecheckt werden um so die bestmögliche Qualität zu jeder Zeit zu haben.

Um dies automatisiert umzusetzen kommt am besten Continous Integration (CI) oder noch besser Continous Deployment (CD) zum Einsatz. Diese beiden Prinzipien bilden genau das ab. Bei CD wird zusätzlich zu CI die Lösung auch nach jeder Änderung deployed. So hat man immer den aktuellen Stand der Software auf einem Testsystem oder sogar in Produktion und erspart sich lange Releasezyklen und teure Meetings. Die nötigen Tools können On-Premise (Jenkins, Teamcity, ...) oder in der Cloud (Travis, CircleCI, ...) laufen.

Ruben Gees - Companion Developer & Clean Coder
Smartsquare Projektbeispiel

Cloud

Egal ob IoT, KI oder E-Commerce-Plattform: Moderne Anwendungen müssen flexibel auf verschiedene Lastszenarien reagieren können und ausfallsicher sein, dürfen dabei die Betriebskosten aber nicht in die Höhe treiben. Für mich ist wichtig, dass wir mithilfe aktueller Cloud-Technologien Systeme entwickeln können, die flexibel skalieren und verteilt betrieben werden können, hochverfügbar sind und ein Minimum an Ressourcen verwenden.

Dabei ist es sinnvoll, sich nicht von Cloud-Anbieter abhängig zu machen. Egal ob Sie Ihre Anwendung bei einem der großen Provider (AWS, Google, Azure) oder in einer Private Cloud hosten möchten: Unsere cloud-native Software kann auf jedem Kubernetes oder OpenShift Cluster betrieben werden und erfüllt so Ihre spezifischen Skalierungsanforderungen. Oder Sie gehen einen Schritt weiter und setzen auf Serverless Technologien. Unsere Erfahrung zeigt, dass es für Teile einer Applikation sinnvoll sein kann die Infrastruktur noch weiter zu abstrahieren und nur bei Bedarf zu nutzen.

Sascha Rodekamp - Principal Consultant & Cloud Architect