Eine Python-Anwendung kann über Jahre wachsen: neue Datenquellen, zusätzliche Hintergrundjobs, weitere API-Endpunkte oder immer mehr Geschäftslogik. Irgendwann soll ein neuer Dienstleister übernehmen oder eine größere Erweiterung umgesetzt werden.
Der größte Fehler wäre dann, ausschließlich auf das neue Feature zu schauen.
Bei Bestandssoftware beginnt Weiterentwicklung mit Reproduzierbarkeit: Code, Abhängigkeiten, Daten und Deployment müssen zunächst beherrschbar sein.
1. Welche Python-Version wird verwendet?
Die verwendete Python-Version beeinflusst verfügbare Sprachfunktionen, Bibliotheken und Sicherheitsupdates. Bei älteren Anwendungen sollte geprüft werden, ob Runtime und verwendete Pakete noch sinnvoll gepflegt werden können.
Relevant sind:
- lokale Entwicklungsumgebung,
- Produktionsversion,
- Container-Images,
- CI/CD-Konfiguration,
- Versionen auf Hintergrund- oder Worker-Systemen.
2. Wie werden Abhängigkeiten verwaltet?
Python-Projekte hängen häufig von zahlreichen externen Packages ab. Deshalb sollte nachvollziehbar sein, welche Versionen tatsächlich verwendet werden.
Zu prüfen:
- requirements-Dateien,
- Lock-Dateien,
- virtuelle Umgebungen,
- private Package-Quellen,
- nicht mehr gepflegte Dependencies.
Die zentrale Frage lautet: Kann dieselbe Anwendung heute auf einer neuen Entwicklungsumgebung reproduzierbar installiert werden?
3. Welches Framework bildet den Kern?
Bei Webanwendungen kommen häufig Frameworks wie Django oder FastAPI zum Einsatz. Django bringt beispielsweise ein eigenes ORM sowie umfangreiche Konzepte für Models, Views, Formulare, Tests und Administration mit. FastAPI ist stark auf API-basierte Anwendungen ausgerichtet und nutzt Typinformationen sowie Datenmodelle für Request- und Response-Strukturen.
Für die Übernahme ist entscheidend, ob das Framework noch unterstützt wird und wie stark die Anwendung von individuellen Erweiterungen abhängt.
4. Wo liegt die Geschäftslogik?
Die fachliche Logik kann an sehr unterschiedlichen Stellen liegen:
- Services,
- Model-Methoden,
- API-Endpunkte,
- Hintergrundjobs,
- Datenbankfunktionen,
- externe Automatisierungen.
Bevor etwas verändert wird, sollte verstanden werden, welche Regeln tatsächlich geschäftskritisch sind.
5. Welche Hintergrundjobs laufen?
Viele Python-Anwendungen erledigen Arbeit nicht nur während eines Web-Requests. Zeitgesteuerte Aufgaben, Queues oder Worker können Daten importieren, Berichte erzeugen oder externe Systeme synchronisieren.
Diese Prozesse sind bei einer Übernahme leicht zu übersehen, obwohl sie für den Betrieb zentral sein können.
Die Webanwendung lässt sich lokal starten, aber ein täglicher Import läuft ausschließlich über einen Cronjob auf dem alten Server. Wird dieser Job bei einer Migration vergessen, fehlen nach wenigen Tagen wichtige Daten.
6. Datenbank und Migrationen prüfen
Bei einer bestehenden Anwendung sollte geklärt werden, wie Änderungen am Datenmodell bisher durchgeführt wurden.
Relevant sind:
- verwendete Datenbank,
- Schema und Migrationen,
- historische Daten,
- Indizes,
- Backups,
- Restore-Prozess.
7. Welche Tests existieren?
Tests sind bei der Weiterentwicklung besonders wertvoll, weil sie vorhandenes Verhalten absichern. Fehlen Tests, sollte zunächst festgestellt werden, welche kritischen Geschäftsabläufe manuell geprüft werden müssen.
Bei einer ersten kleineren Änderung kann es sinnvoll sein, genau für diesen Bereich Tests nachzurüsten.
8. Deployment und Konfiguration verstehen
Eine Anwendung ist erst dann wirklich übernommen, wenn das neue Team sie auch zuverlässig deployen kann.
- Wie wird gebaut?
- Welche Environment-Variablen werden benötigt?
- Wo liegen Secrets?
- Wie laufen Datenbankmigrationen?
- Gibt es Staging?
- Wie funktioniert Rollback?
9. Erstes Feature bewusst klein halten
Nach der technischen Bestandsaufnahme sollte die erste produktive Änderung überschaubar bleiben.
Dadurch lässt sich praktisch prüfen, ob:
- lokale Entwicklung funktioniert,
- Tests belastbar sind,
- Deployment verstanden wurde,
- Monitoring und Logs ausreichen,
- fachliche Abstimmung funktioniert.
10. Wann Modernisierung statt Erweiterung sinnvoll ist
Wenn neue Features regelmäßig an veralteten Dependencies, fehlenden Tests oder schwer veränderbarer Architektur scheitern, sollte nicht jede Erweiterung einzeln durchgedrückt werden.
Dann kann eine schrittweise Modernisierung wirtschaftlicher sein: Runtime aktualisieren, kritische Abhängigkeiten ersetzen, Module trennen oder Deployment vereinfachen.
Fazit
Eine bestehende Python-Anwendung lässt sich häufig sinnvoll weiterentwickeln. Voraussetzung ist, dass das neue Team nicht nur den Code, sondern auch Abhängigkeiten, Datenbank, Hintergrundprozesse und Deployment versteht.
Der erste Erfolg einer Übernahme ist deshalb nicht unbedingt ein großes neues Feature. Oft ist es die Gewissheit, die Anwendung wieder kontrolliert verändern zu können.
Häufige Fragen
Kann eine bestehende Python-Anwendung von einem neuen Dienstleister übernommen werden?
Ja. Vor der Weiterentwicklung sollten jedoch Codebasis, Runtime, Dependencies, Datenbank, Framework, Tests und Deployment geprüft werden.
Warum sind Python-Dependencies bei einer Übernahme wichtig?
Externe Packages bestimmen mit, ob eine Anwendung reproduzierbar installiert, sicher betrieben und auf neue Python-Versionen aktualisiert werden kann.
Was sollte als erstes an einer übernommenen Python-Anwendung geändert werden?
Nach der technischen Bestandsaufnahme eignet sich häufig eine kleine, überschaubare Änderung, um Entwicklungs-, Test- und Deployment-Prozess praktisch zu validieren.
Muss eine alte Python-Anwendung komplett neu entwickelt werden?
Nein. Je nach Zustand können auch gezielte Modernisierung, Dependency-Updates, Refactoring oder schrittweise Weiterentwicklung sinnvoll sein.