So arbeiten wir

Wir entwickeln Software

15 Jahre Erfahrung in der Softwareentwicklung

Seit 15 Jahren entwickeln wir Softwareprojekte, in dieser Zeit haben sich Art und Größe von webbasierten Anwendungen und Software insgesamt umglaublich gewandelt. Früher war Softwareentwicklung häufig noch eine komplizierte Angelegenheit, bei der es vor allem auf genaue Planung, gute Projektsteuerung und eine genaue Umsetzung ankam.

Dagegen enstehen heute häufig bei der Umsetzung von Softwareprojekten z.B. aufgrund schneller Marktveränderungen und vielfälltiger Abhängigkeiten und Schnittstellen eher komplexe, und somit kaum planbare, Aufgaben. Daher hilft eine genaue Vorabplanung wenig, wenn sich die Anforderungen oder Prioritäten bereits in dem Moment verändern können, wenn die Umsetzung beginnt. Daher bevorzugen wir die agile Softwareentwicklung um jederzeit auf Veränderungen reagieren zu können.

Gib hier deine Überschrift ein

Agile Softwareentwicklung

Im Kern geht es bei der agilen Softwareentwicklung darum, das gesamte Projekt zunächst nur grob zu vorauszuplanen und die Entwicklung in kleine Abschnitte, sogenannte Sprints von 2-4 Wochen zu unterteilen. Mit dem Kunden werden zu Beginn jeden Abschnitts gemeinsam die aktuellen Prioritäten und Anforderungen im Detail besprochen und geplant. Am Ende jedes Abschnitts werden die Ergebnisse gemeinsam durchgesprochen, bei Bedarf die Arbeitsweise optimiert und der nächste Abschnitt geplant.

Das Ergebnis jedes Abschnitts bzw. Sprints ist ein vollständig funktionierende Software. Es mag sein, dass die Software noch nicht viel kann aber das was sie kann funktioniert auch. So wir das Werkstück nach und nach um weitere Funktionen und Eigenschaften ergänzt.

Die Vorteile dieser Arbeitsweise liegen klar auf der Hand. Führten früher Änderungen im Projektverlauf  zu hohen Mehrkosten, sind diese in agilen Projekten kein Problem, Änderungen sind sogar vorgesehen. Das Risiko wird auf die Länge eines Sprints reduziert – möchte der Auftraggeber den Dienstleister wechseln, so kann er das nach jedem Sprint tun und bekommt ein funktionierendes Stück Software, dass andere Entwickler weiterentwickeln können. Die Arbeitsweise der agilen Softwareentwicklung ist sehr transparent, der Kunde oder Auftraggeber wird kontinuierlich eingebunden und ist so stets auf dem aktuellen Stand der Entwicklung.

Workflow

Konzeption & Anforderungsmanagement

Am Anfang steht immer das Erstellen einer IST Analyse und eines SOLL Konzepts

Zu Beginn der Projekte steht die Analyse bzw. Erhebung des IST-Zustandes und des SOLL Konzeptes. Es hat sich gezeigt, dass ein Workshop gemeinsam mit Kunden und Entwicklern am Anfang des Projektes sehr hilfreich ist, wir nennen das den “Projekt-Kickoff Workshop”.

Hier kann z.B. die Projektvision formuliert und das Grundgerüst der Anwendung in einer Storymap erarbeitet und visualisiert werden. Gemeinsam werden auch die Prioritäten ermittelt und festgelegt. Danach ist klar, in welcher Reihenfolge die Umsetzung erfolgt.

Alle Anforderungen sammeln wir in UserStories, also einer sehr groben Beschreibung der Aufgabe, die für Nichttechniker und Entwickler gleichermaßen verständlich ist. Jede Userstory wird im weiteren Projektverlauf weiter ausdefiniert, bis die Aufgabenstellung glasklar ist, danach kann sie in die Umsetzung gehen.

Architektur & Design

Auf Basis dieses Grundgerüsts der Anforderungen, entwickeln die Software-Architekten einen Lösungsansatz. Das umfasst die Wahl der passenden Technologie und der richtigen Software-Architektur. Das kann man sich vorstellen wie bei einem Haus, das entweder aus unterschiedlichen Werkstoffen wie Holz, Stein oder Metall gebaut werden kann und je nach Einsatzzweck architektonisch verschieden geplant wird. So erfüllt ein Büro andere Anforderungen als ein Hotel oder ein Wohnhaus.

Stehen die Architektur und das Design, wird das Grundgerüst der Anwendung entsprechend der Prioritäten entwickelt. So werden je nach Bedarf beispielsweise eine Benutzerverwaltung, Schnittstellen zu anderen Systemen oder eine Auftragsverwaltung angelegt.

Dabei werden in der Regel zunächst die jeweiligen Basisfunktionen implementiert und das Ergebnis zunächst dem Kunden präsentiert und mit ihm besprochen. Auf dieser Basis werden dann die weiteren Funktionalitäten oder Prozesse geplant und iterativ, also nach und nach in den weiteren Sprints umgesetzt.

2

3

Transparenz, Versionierung, Tests und Automatisierung

Bei der Softwareentwicklung setzen wir auf den Einsatz unterschiedlicher Hilfsmittel zur Förderung der Software-Qualität. Sie sorgen für Transparenz, verringern das Fehlerpotential und fördern eine gute Zusammenarbeit – dadurch können wir gute Qualiät sicherstellen und nachweisen und unterstützen eine Lernkultur im Team.

Durch Systeme zur Code-Versionierung wie z.B. Git und Gitlab ist jeder Beitrag eines jeden Entwicklers zu jeder Zeit für alle sichtbar und nachvollziehbar. Jede Veränderung am Code wird nachgehalten und kann schnell und einfach mit vorherigen Versionen verglichen werden. So ist der gesamte Entwicklungsverlauf einfach nachvollziehbar.

Dabei ist uns eine wertschätzende, offene und positive Fehlerkultur sehr wichtig – Fehler werden immer passieren und brauchen nicht kaschiert werden, denn aus Fehlern kann man am besten lernen. Es müssen lediglich die richtigen Maßnahmen ergriffen werden um sie frühzeitig zu erkennen.

Daher führen wir unter anderem regelmäßig gegenseitige Code-Reviews der Entwickler durch, bevor Code in den Produktivstamm der Anwendung übernommen wird. Dadurch steigt die Qualität und die Entwickler lernen kontinuierlich voneinander.

Auch setzen wir auf unterschiedliche Arten von Tests, die größenteils automatisch von Systemen ausgeführt werden, sobald ein Entwickler eine Änderung am Code beisteuern möchte. Um zu vermeiden, dass sich neue Fehler einschleichen wird dabei überprüft, ob alles was bisher fehlerfrei funktionierte auch weiterhin funktioniert.

Oder es wird durch eine Automatisierung überprüft, ob Code-Konventionen eingehalten wurden, wie z.B. Vermeidung schlecht lesbarer Funktionen oder einer bestimmte Schreibweise. Dadurch wird Code für jedermann gut und einfach änder- oder erweiterbar. Die Zeiten, als man von “dem einen Entwickler” abhing, der den Code versteht, sind damit längst Geschichte.

Continous Integration - Continous Deployment

Wir konzentrieren uns gern auf die Softwareentwicklung, indem wir das gesamte Potenzial moderner DevOps-Entwicklungsplattformen nutzen, um die Integrations- und Bereitstellungsprozesse (Continous Integration/Continous Deployment) zu automatisieren. Auf diese Weise kann unser Team einen höheren Beitrag zum eigentlichen Wert der Software leisten.

Dinge, die häufiger wiederholt werden, gehören automatisiert. Dazu gehört zum Beispiel neben dem Testen auch das Veröffentlichen der neuesten Software-Version auf dem Produktivsystem, das sogenannte Deployment. Ist der Vorgang bzw. der Prozess dafür einmal im CI/CD-Server konfiguriert, so kann er beliebig oft zuverlässig wiederholt werden.

Damit ist das Release einer neuen Version überhaupt keine Herausforderung mehr und kann theoretisch sogar vom Azubi durchgeführt werden, da die Ergebnisse vorhersehbar und planbar werden.

4

5

Qualitätsmanagement & Testing

Um die beste Qualität unserer Software zu erzielen, folgen wir dem Test-Driven-Ansatz der Softwareentwicklung. Jede von uns implementierte Funktion wird eingehend auf Unit, Functional, Integration und Penetration getestet um ein optimales Qualitätsmanagement zu gewährleisten.

Unsere Integrationstests werden basierend auf den,  mit dem Produktbesitzer erstellten User-Stories erstellt, um den Zeitaufwand für das Erstellen umfassender Dokumentationen zu reduzieren, indem kundenorientierte Gespräche hervorgehoben werden.

Bei der Durchführung der Modernisierung kann unbenutzter Code ermittelt, entfernt und die Performance des Codes verbessert werden.

Hosting

Neben der Softwareentwicklung sind wir gelernte Systemintegratoren und haben mit der Systemadministration Erfahrung seit 20 Jahren. Das Installieren, Konfigurieren und Betreiben von Serversystemen liegt uns im Blut. Daher können wir Server-Infrastrukturen entsprechend der Projekt- oder Kundenanforderungen konfigurieren, absichern und im weiteren Betrieb betreuen.

Welches Konzept dabei zum Einsatz kommt, hängt Ihren Bedürfnissen und den Anforderungen des Softwareprojektes ab. Über die letzten Jahre hat sich im Bereich Virtualisierung und Containerisierung viel getan. Dabei teilen sich mehrere Serversysteme die gleiche Hardware. Das erhöht die Effizienz, spart Kosten und kann die Entwicklung und Betreuung der Systeme sehr vereinfachen. So können durch sogenannten Snapshots beispielsweise Zustände eingefroren und zu späteren Zeitpunkten wieder hergestellt werden.

Zur Entscheidung, ob eine Anwendung besser im Intranet eines Konzerns, im Rechenzentrum, in der Cloud oder bei einem PaaS Anbieter (Platform as a Service) gehostet wird beraten wir unsere Kunden. Nach der Aufnahme der Kriterien des Kunden erstellen wir bei Bedarf eine Nutzwertanalyse, in der neben finanziellen, auch nicht-monetäre Aspekte einbezogen, verglichen und unterschiedlich gewichtet werden können. Als Ergebnis dieser Auswertung bekommen Sie eine valide Entscheidungsgrundlage.

6

7

Wartung und Betreuung

Ist die Anwendung einmal online und wird mit ihr aktiv gearbeitet, bieten wir Ihnen bei Bedarf gern ein indivuelles Wartungs- & Betreuungskonzept an. Der Umfang hängt dabei häufig davon ab, ob sich beim Kunden eine eigene IT-Abteilung um die Systeme kümmert oder ein “Rundum-Glücklich-Paket” gewünscht wird. Dies kann somit lediglich das Systemmonitoring und das Einspielen kritischer Sicherheitsupdates beinhalten. Zudem gehört  auch die regelmäßige Sicherung von Daten nach dem Generationsprinzip dazu.