menu
logovisonum
logovisonum
Unser Prozess

Ein guter Prozess ist die halbe Miete

Unser Entwicklungsprozess hilft uns, genau das zu bauen, was benötigt wird, nicht mehr und nicht weniger.
*
User Stories & Requirement Analyse
Evaluation der Kunden- und Stakeholderbedürfniss, woraus wir eine User Story formulieren
*
Unit-Tests
Unit-Tests helfen bei der frühzeitigen Erkennung nicht gut definierter User Stories.
Sie fördern ein Verständnis der benötigten Funktionalität.
*
Implementierung
Die Implementierungsphase endet mit erfolgreichen Unit-Tests.
*
Automated Testing
Der Implementierung folgen eine Reihe von automatischen Regressionstests.
Diese Tests sind kostengünstig und helfen entstandene Fehler früh zu identifizieren, was zu einer erhöhten Produktivität führt.
*
Deployment
Deployment neuer Funktionen mithilfe eines automatischen CI/CD Prozesses.
Unser Programmierparadigma

Wir setzen auf Qualität.

Um eine hohe Qualität unserer Software zu erreichen, setzen wir auf dynamische und statische Verifikation.
*
Dynamische Verifikation
Die dynamische Verifikation, die nur ein anderer Name für automatische Unit-Tests ist, ist integraler Teil unseres Entwicklungsprozesses. Um sie zu unterstützen, muss unser Code leicht testbar sein. Die Erkenntnis, dass ein Unit-Test nicht mehr ist als eine weitere Verwendung der gleichen Module, die im Produktionscode verwendet werden, führt unweigerlich zu dem Wunsch, den Code modular zu gestalten.Um Modularität zu erreichen, verwenden wir das Paradigma der funktionalen Programmierung. Dieses Paradigma basiert auf den folgenden Prinzipien:
*
Immutability
Wir halten alle Daten in unveränderlichen Konstanten. Dies verbessert die Lesbarkeit, eliminiert Race Conditions und ermöglicht Wiederverwendung.
*
Pure Functions
Das Ergebnis einer Funktion hängt nur von den Argumenten ab. Das macht die Funktionen leicht testbar und der Code ist verständlicher und vorhersehbarer. Funktionen, die diese Bedingung erfüllen, nennt man Pure Functions oder "reine Funktionen".
*
Explizite Behandlung von Seiteneffekten
An einem bestimmten Punkt müssen die unveränderlichen Ergebniswerte reiner Funktionen eine Programmausgabe erzeugen. Wir reduzieren diese Art von veränderlichen und nicht reinen Teilen auf das absolute Minimum und machen sie im Code explizit.
*
Statische Verifikation
Während die dynamische Verifikation den Code nur für bestimmte Eingaben validiert, bietet die statische Verifikation eine Validierung für alle möglichen Eingaben. Um dies zu erreichen, verwenden wir statisch typisierte Sprachen wie:
- Purescript
- Elm
- Typescript
- Haskell
- Swift
- Kotlin
- Rust
Wir verlassen uns stark auf statische Typisierung, um Immutability und sogar Funktionsreinheit (für Haskell, Purescript und Elm) zu gewährleisten.
Das Typsystem ermöglicht es uns, Datenstrukturen zu entwerfen, bei denen illegale Zustände nicht darstellbar sind, wodurch automatisch die Möglichkeit illegaler Zustände zur Laufzeit eliminiert wird. Wir verwenden auch OpenAPI, um unsere REST-APIs zu spezifizieren.