Wir bieten
Seit über 25 Jahren entwickeln wir Software im Kundenauftrag mit agilen Methoden. In enger persönlicher Abstimmung statt auf Basis ausführlicher schriftlicher Spezifikationen.
Bei uns sprechen Sie regelmäßig direkt mit den Entwicklern Ihrer Software, meist an ein bis zwei festen Terminen pro Woche. Jeder kennt Ihre Ziele und Prioritäten. Missverständnisse werden minimiert.
Auch bei großen Projekten gehen wir möglichst kleinschrittig vor. Für jede Änderung wird automatisch ein Testserver eingerichtet, auf dem Sie die Ergebnisse beurteilen können. Sobald Sie grünes Licht geben, geht die Änderung online.
Routinetätigkeiten sind bei uns weitgehend automatisiert. Unsere Entwicklerwerkzeuge erlauben schnelle Anpassungen an geänderte Anforderungen und unser Monitoring alarmiert uns bei Fehlern im Livebetrieb.
Der Begriff „Agil“ bzw. englisch „agile“ und die damit verbundenen Führungsprinzipien haben in den letzten Jahren eine enorme Popularität weit über die Softwareentwicklung hinaus gewonnen. Er geht zurück auf das agile Manifest, das eine Gruppe von erfahrenen Softwareentwicklern 2001 veröffentlicht hat und mit dem sie verschiedene neue und bewährte Konzepte unter einem gemeinsamen Begriff vereinte. Zusammen mit zahlreichen weiteren Veröffentlichungen und Vorträgen seiner Autoren ist es seit langem prägend für unsere Arbeit.
Kern der agilen Softwareentwicklung ist aus unserer Sicht, dass sie das Lernen im Projekt, die Bedeutung von Zeit, die Veränderlichkeit der Rahmenbedingungen sowie die Komplexität von Software ins Zentrum ihrer Überlegungen stellt. Ihre Methoden und Tools sind darauf ausgerichtet, unter diesen Voraussetzungen erfolgreiche Projekte zu ermöglichen.
Was bedeutet "agile Softwareentwicklung" für uns?
Projekte lassen sich vor dem Start häufig nur grob umreißen, aber niemals vollständig spezifizieren. Da wir das wissen, bestehen wir nicht auf eine solche Spezifikation, sondern versuchen vor dem Projekt, gemeinsam mit unseren Kunden ein möglichst gutes Gefühl für den Umfang des Projekts zu entwickeln. Auf der Basis unserer Erfahrungen in ähnlichen Projekten erarbeiten wir eine T-Shirt-Größen-Schätzung. Das bedeutet, dass wir für jede einzelne Funktion oder jedes Feature eine T-Shirt-Größe, üblicherweise zwischen [S] und [XL], festlegen. Jede T-Shirt-Größe hat dabei einen "Nennwert" und eine Aufwandsspanne. Die T-Shirt-Größe [L] beispielsweise steht für "ungefähr 4 Personentage" und hat eine Spanne von "mindestens 2 Personentage" bis "maximal 8 Personentage". Mit der T-Shirt-Größen-Schätzung haben wir dann eine Größenordnung des Projekts festgelegt, auf die unser Kunde sich einstellen kann – lange bevor die Details vollständig bekannt sind. Mehr dazu in unserem Blogbeitrag zur T-Shirt-Größen-Schätzung.
Die Abrechnung unserer Projekte erfolgt grundsätzlich nach tatsächlichem Aufwand, aber immer im Rahmen der vorher vereinbarten T-Shirt-Größen. Das führt zu einer fairen Aufteilung des Kostenrisikos, zu maximaler Transparenz hinsichtlich des Aufwands und ermöglicht gründliche Arbeit in hoher Qualität ohne Fehlanreize.
Ist ein Festpreis gefordert oder muss ein Maximalbudget eingehalten werden, steuern wir das Projekt gemeinsam so, dass dieses Budget nicht überschritten wird.
Unser Ziel ist es, so früh wie möglich ein nutzbares Softwareprodukt zu entwickeln – das kann z. B. eine Website sein, die zunächst nur aus Standardseiten ohne Sonderfunktionalitäten besteht.
Aufbauend auf diesem ersten Produkt entwickeln wir dann die weiteren Funktionalitäten stets so, dass die wichtigsten Features zuerst angegangen werden. Auf diese Weise gibt es zu jeder Zeit ein funktionierendes und möglichst wertvolles Produkt.
Dabei versuchen wir, so wenige Features wie möglich gleichzeitig in Entwicklung zu haben, um fokussiert und schnell arbeiten zu können. Dabei hilft uns Kanban als Steuerungstool.
Durch diese Vorgehensweise ist es jederzeit möglich, noch nicht begonnene Features durch andere, vorher nicht geplante zu ersetzen, die Reihenfolge zu ändern oder auch den ursprünglich geplanten Funktionsumfang zu verkleinern.
Bei der eigentlichen Entwicklung ist die intensive und vertrauensvolle Zusammenarbeit des webfactory-Teams mit den Fachleuten beim Kunden von zentraler Bedeutung. Hierfür setzen wir auf eine Mischung aus schriftlicher und persönlicher (Video-) Kommunikation.
Für die schriftliche Kommunikation geben wir unseren Kunden Zugriff auf das Code-Repository ihres Projektes bei unserem Code-Hoster GitHub. Hierüber ist nicht nur der komplette Quellcode einsehbar, sondern es lassen sich auch Aufgaben erstellen und kommentieren. Auch die fachliche Kommunikation des webfactory-Teams ist in GitHub einsehbar und dokumentiert.
Ein- bis zweimal pro Woche treffen wir uns in größeren Projekten mit unseren Kunden zu Video-Jours-Fixes, in denen wir kompliziertere Themen von Angesicht zu Angesicht besprechen können.
Jede Codeänderung oder -erweiterung wird über einen Pull Request vorgenommen. Ein Pull Request ist eine Menge von Änderungen, die der Entwickler in den Hauptzweig der Software übertragen möchte. Die Änderungen werden in diesem Pull Request übersichtlich dargestellt und können von anderen Entwicklern und auch vom Kunden kommentiert und diskutiert werden (Code Reviews). Für jeden Pull Request wird bei uns automatisch ein Testserver eingerichtet, auf dem die Auswirkung der Änderung getestet werden kann.
Sind alle einverstanden, wird der Pull Request gemergt, also in den Hauptzweig übernommen. Die Diskussion zu einem Pull Request bleibt für Recherchezwecke dauerhaft erhalten und ermöglicht später häufig wichtige Einblicke in die Überlegungen, die zu einer bestimmten Entscheidung geführt haben.
Eine wichtige Voraussetzung für dauerhaft agile Softwareentwicklung sind automatisierte Tests: Bereits vor oder während der Entwicklung wird für jedes Feature auch Testcode geschrieben, der dieses Feature nutzt und überprüft, dass es sich erwartungsgemäß verhält.
Neben Unit Tests, die die einzelnen Bausteine der Software isoliert voneinander prüfen, entwickeln wir auch automatisierte Akzeptanz- bzw. Verhaltenstests. Hierbei entstehen natürlichsprachliche Funktionsbeschreibungen (auf Deutsch oder Englisch), die wir gemeinsam mit dem Kunden ausarbeiten, und hinter denen sich ebenfalls ausführbarer Testcode verbirgt.
Alle Tests werden bei jedem Pull Request und jeder Änderung auf dem Hauptzweig der Software automatisch ausgeführt und bei Fehlern wird der Entwickler benachrichtigt.
Dadurch wird es möglich, bestehende Funktionalitäten laufend zu überarbeiten und weiterzuentwickeln, ohne Gefahr zu laufen, dass sich hierdurch unbemerkt Fehler einschleichen – und ohne jedes Mal einen hohen Aufwand für manuelle Tests in Kauf zu nehmen.
Wird ein Pull Request gemergedt und besteht alle Tests, wird er vollautomatisch auf den Produktivservern installiert und in Betrieb genommen.
Dabei verwenden wir ein System, das uns jederzeit das Zurückspringen auf die letzte Version mit einem einfachen Button-Klick ermöglicht. Auf diese Weise können wir, sollte es doch einmal einen Fehler geben, der erst im Produktivbetrieb auffällt, innerhalb von Sekunden den vorherigen, fehlerfreien Codestand wieder aktivieren, bevor wir das Problem analysieren und lösen.
Das beste Tool zum Rückgängigmachen von Deployments würde nichts nützen, wenn wir Fehler im Produktivbetrieb nicht bemerken. Daher überwachen wir unsere Server-Logdateien mit Hilfe einer speziellen Software und lassen uns alle Fehlermeldungen automatisch in den Teamchat posten. Den haben alle Entwickler im Blick und stimmen sich dann ab, wer sich um den Fehler kümmert.
Hohe Qualität und eine saubere Softwarearchitektur sind Voraussetzungen für langlebige Software und unser täglicher Anspruch. Um ihn einzulösen, unterstützen sich die Entwickler gegenseitig in Form von Pair Programming und Code Reviews.
Zusätzlich nehmen wir viele Prüfungen und Verbesserungen automatisch vor, z. B. die einheitliche Formatierung des Quellcodes gemäß "Coding Standards" und die Prüfung auf vollständige und korrekte Definition und Verwendung von Schnittstellen. Die automatischen Prüftools werden von uns laufend erweitert.
Nicht nur bei Tests und Deployment, auch bei anderen Routineaufgaben setzen wir auf Automatisierung, um unseren Entwicklern volle Konzentration auf die eigentliche Softwareentwicklung zu ermöglichen. So haben wir z. B. für Youthpass den Upload von Sprachkatalogen in eine Übersetzungsplattform sowie den Rückübertragung der fertigen Übersetzungen in den Quellcode auf einen automatischen Prozess umgestellt, der jetzt bei jeder Codeänderung und jeder neuen Übersetzung abläuft.
Brauchen Sie Unterstützung bei der Umsetzung einer neuen Website oder suchen Sie nach einer Agentur, die Ihre bestehende Symfony-Anwendung weiterentwickelt? Dann sprechen Sie uns gerne an!