Eine klare und konsistente Vorgehensweise erleichtert die Kommunikation.


Agile Softwareentwicklung


Anwendungssoftware und die Prozesse zu ihrer Erstellung müssen sich genauso flexibel verhalten wie Ihre Geschäftsprozesse. Die schnelle und optimale Unterstützung Ihrer Prozesse durch Software ist in Zeiten von Globalisierung und stetig steigendem Wettbewerbsdruck ein erheblicher Wettbewerbsvorteil und erlaubt es Ihnen, Ihr Geschäft nach Ihren Vorstellungen zu entwickeln.

Wir verstehen uns als Enabler und Umsetzer Ihrer Ideen. Dabei steht für uns nicht die Technik, sondern das schnelle Entwerfen und Umsetzen pragmatischer Lösungen im Vordergrund. Wir verwenden dazu moderne, anwendungsorientierte Entwicklungsmethoden und begreifen unsere Arbeit als Gestaltungs- und Lernprozesse, der sich Ihren Bedürfnissen anpasst. Wir berücksichtigen dabei, dass Ihr Geschäft und die technologischen Möglichkeiten zur Umsetzung einem ständigen Wandel unterworfen sind. Wir sehen diesen Wandel als Chance und nicht als Risiko und bedienen uns der zeitgemäßen Techniken unterschiedlicher agiler Entwicklungsmethoden, wie sie zum Beispiel der Unified Process, Feature-Driven-Development oder Extreme Programming bieten.



Interative Vorgehensweise

Aus der Praxis wissen wir, dass sich schon innerhalb eines Projektes die Ziele und Anforderungen ändern können. Um die damit verbundenen Risiken zu minimieren, setzen wir auf kurze Entwicklungszyklen und frühzeitiges Feedback. Eine kontinuierliche enge Kommunikation mit dem Kunden und frühe Verfügbarkeit eines lauffähigen Systems stellt sicher, dass das Ergebnis auch den Vorstellungen des Kunden entspricht. Die Weiterentwicklung eines solchen Kernsystems wird getrieben und gesteuert durch die fachlichen Anforderungen des Kunden.


Iterative Entwicklung bedeutet für uns, dass das Projekt in mehreren zyklischen Etappen durchgeführt wird, wobei Analyse, Design, Entwicklung und Test schnell aufeinander folgen. Im Folgezyklus werden die neuen Erkenntnisse, geänderte Anforderungen und Feedback des Kunden genutzt, um den Entwicklungsprozess und das Produkt zu optimieren. Die Software entsteht dabei inkrementell (sie wird um neue Funktionen erweitert) und evolutionär (bestehende Systemteile werden angepasst und verbessert).



Analyse und Design Patterns

Bei der Konstruktion von Software überlassen wir nichts dem Zufall. Wir arbeiten nach Best Practices und verwenden bewährte Analyse und Design-Muster. Dadurch erhalten wir zum einen wieder verwendbare, verständliche und gut wartbare Modelle und Systeme, zum anderen haben sie die notwendige Qualität und Flexibilität, um mit den Anforderungen der Zukunft zu wachsen.



Refactoring

Aus der Erfahrung von vielen Projekten wissen wir, dass Design "auf der grünen Wiese" zu teuer ist und in der Regel doch nicht den späteren Anforderungen gerecht wird. Und warum sollte man etwas bezahlen, was man noch nicht braucht und hinterher doch nicht nutzt?

Deshalb orientieren wir uns an den konkreten Bedürfnissen der Anwendungen und Architektur des Kunden und bemühen uns um einen angemessenen und kostengünstigen Entwurf der Software.
Sollten die Anforderungen steigen und der Entwurf sich als zu einfach herausstellen, bedienen wir uns der Refactoring-Techniken und führen erst bei Bedarf eine Konsoliderung der Software durch.


Refactoring ist eine funktionserhaltende Restrukturierung von Software mit dem Ziel, die Lesbarkeit und Erweiterbarkeit des Systems zu erhöhen und die Fehleranfälligkeit zu verringern. Durch Refactoring halten wir Software flexibel erweiterbar, wartbar und schützen die Investitionen unserer Kunden.



Konstruktive Qualitätssicherung


Ein wesentlicher Schlüssel zum Erfolg einer agilen Softwareentwicklung ist die konstruktive Qualitätssicherung. Das bedeutet für uns, die Qualität der Software schon bei der Konstruktion durch methodische und technische Maßnahmen zu erhöhen und Fehler so früh wie möglich - und nicht erst im Produktionsbetrieb - zu finden. Beispielsweise verwenden wir die Methoden des "Programming by Contract" und der testgetriebenen Entwicklung. Die Funktionen unserer Software sichern wir durch regressionsfähige Unit-Tests ab. Dabei verwenden wird Werkzeuge wie JUnit, Cactus oder DB-Unit.
Um schon bei der Entwicklung mögliche Schwächen in Entwurf und Programmierung zu finden und zu vermeiden, kommen Programmierstandards und Metriken zum Einsatz.