Bei Brandt Haustechnik läuft ein Programm, das niemand mehr ansehen mag, aber auch niemand abschalten will: das Auftragsbuch. Frau Aydin, die Disponentin, trägt darin jeden Morgen die Aufträge des Tages ein. Herr Kowalski, der Monteur, ruft abends an und fragt, was morgen ansteht. Der Inhaber, Herr Brandt, hat eine einfache Frage: „Muss das jetzt neu?“

Diese Lektion beantwortet sie nicht mit Ja. Sie gibt Ihnen das Werkzeug, die Frage für ein Programm Ihrer Wahl ehrlich zu beantworten. Manchmal heißt die Antwort „ja, Schritt für Schritt“, und manchmal heißt sie „nein, lassen Sie es, wie es ist“. Am Ende liegt in Ihrem Repository ein ADR (Architecture Decision Record) mit der Entscheidung für das Auftragsbuch und den Wegen, die Sie verworfen haben. Wie ein ADR aufgebaut ist, steht in K4, Modul 4.1 (Architektur als Entscheidung). Hier nutzen Sie die Vorlage.

Was Microsoft über .NET Framework sagt

Bevor Sie über Kosten sprechen, brauchen Sie ein paar Tatsachen. Sie stehen in Microsofts Dokumentation:

  • .NET Framework läuft weiter. Es wird mit Windows ausgeliefert, und es gibt keine Pläne, es zu entfernen. Microsoft schreibt ausdrücklich, dass Sie Ihre .NET-Framework-Programme nicht migrieren müssen. Neue Entwicklung soll dagegen auf .NET stattfinden.
  • .NET Framework bekommt keine neuen Funktionen mehr, aber weiter Sicherheitskorrekturen. Version 4.8 gilt als Komponente von Windows und folgt dem Lebenszyklus des Betriebssystems, auf dem sie installiert ist.
  • .NET erscheint jedes Jahr in einer neuen Hauptversion. Lange und kurze Unterstützung wechseln sich ab. Eine Version mit langer Unterstützung (LTS) wird drei Jahre unterstützt; .NET 10 ist eine solche Version. Danach bekommt sie keine Sicherheits- und Qualitätsupdates mehr. Wer auf .NET läuft, muss also auch in Zukunft regelmäßig auf die nächste Version heben, nur ist das ein viel kleinerer Schritt als der Sprung von .NET Framework (Lektion M2.1 und folgende).
  • Windows Forms und WPF gibt es auf .NET, aber nur unter Windows. Sie werden dort weiterentwickelt: neuere Steuerelemente, bessere Unterstützung hoher Bildschirmauflösung, Verbesserungen bei der Barrierefreiheit. Manche Funktionen, etwa der dunkle Modus unter Windows 11, gibt es nur auf .NET.

Aus diesen Sätzen folgt noch nichts. Sie machen nur sichtbar, was „veraltet“ heißt: Das Programm funktioniert weiter, aber die Plattform darunter bewegt sich nicht mehr. Ob das ein Problem ist, hängt von Ihrem Betrieb ab.

Die fünf Wege

Für ein vorhandenes Programm gibt es nicht „modernisieren oder nicht“, sondern fünf Wege. Dieser Kurs lehrt die Wege 2 und 3 und das Zusammenspiel beider; die anderen müssen Sie kennen, um sie ehrlich verwerfen zu können.

Weg Was passiert Das spricht dafür Das spricht dagegen
1. Behalten nichts am Programm, nur Pflege und Absicherung kein Risiko für das Verhalten, kein Aufwand Plattform und Wissen veralten weiter; jede Änderung bleibt teuer
2. Auf .NET heben gleiche Funktionen, neue Laufzeit (net10.0-windows) gleiche Oberfläche, wenig Umlernen, Sicherheit und Werkzeuge wieder aktuell bleibt ein Windows-Programm; die Bauart (Fachlogik im Formular) bleibt
3. Umbauen Fachlogik, Daten und Oberfläche Schritt für Schritt herauslösen und ersetzen jede Etappe liefert Nutzen, das Altprogramm läuft weiter lange Phase mit zwei Welten; braucht Disziplin und ein Sicherheitsnetz
4. Neu schreiben ein neues Programm von null, das alte läuft bis zur Umstellung saubere Architektur, freie Wahl der Technik alle Regeln müssen erneut gefunden werden; der Umstellungstag trägt das ganze Risiko
5. Ersetzen oder abschalten Standardsoftware oder Dienst nutzen, oder die Aufgabe entfällt kein eigener Code mehr Anpassungen, Datenübernahme, Abhängigkeit vom Anbieter

Die Wege schließen einander nicht aus. Das Auftragsbuch in diesem Kurs geht Weg 2 und danach Weg 3: Zuerst läuft es unverändert auf .NET 10, dann lösen Sie Stück für Stück etwas heraus. Beide Schritte lassen sich anhalten, wenn sich die Lage ändert.

mermaid
flowchart TD
    A[Programm erfüllt seine Aufgabe?] -->|nein, Aufgabe entfällt| E5[Weg 5: abschalten]
    A -->|ja| B[Gibt es ein passendes Standardprodukt?]
    B -->|ja, deckt die Regeln ab| E5b[Weg 5: ersetzen]
    B -->|nein| C[Muss es sich ändern oder wachsen?]
    C -->|nein, läuft auf unterstütztem System| E1[Weg 1: behalten und absichern]
    C -->|ja| D[Gibt es ein Sicherheitsnetz und den Quelltext?]
    D -->|nein| E1b[Weg 1: erst Netz bauen, dann neu entscheiden]
    D -->|ja| F[Sind Plattform und Bauart das Problem?]
    F -->|nur die Plattform| E2[Weg 2: auf .NET heben]
    F -->|auch die Bauart| E3[Weg 2, dann Weg 3: umbauen]
    F -->|Quelltext unbrauchbar| E4[Weg 4: neu schreiben]

Das Diagramm ist eine Gedankenstütze, kein Algorithmus. Es ordnet Ihre Fragen. Die Antworten kommen aus Ihrem Betrieb.

Was „veraltet“ wirklich kostet

„Veraltet“ ist ein Gefühl, solange niemand es beziffert. Drei Posten sind meist gemeint. Zahlen dazu stehen in dieser Lektion nicht, denn Ihre sind die richtigen: Schreiben Sie sie später selbst in Ihr ADR.

Menschen. Wer pflegt das Programm, und wie viele Personen wissen, wie es funktioniert? Bei Brandt Haustechnik ist es einer: der Dienstleister, der das Auftragsbuch vor langer Zeit gebaut hat. Neue Kolleginnen und Kollegen lernen heute .NET, nicht .NET Framework mit DataSets. Wenn die eine Person ausfällt, steht das Programm still, auch wenn es technisch läuft.

Sicherheit. Welche Teile bekommen noch Korrekturen? .NET Framework bekommt Sicherheitskorrekturen, solange das Betriebssystem unterstützt wird. Aber jedes Paket, das Sie dazu nutzen, hat einen eigenen Lebenslauf: Wird es nicht mehr gepflegt, entsteht die Lücke dort. Wer auf einer .NET-Version läuft, deren Unterstützung abgelaufen ist, bekommt keine Sicherheitskorrekturen mehr. Fragen Sie also: Auf welchem Betriebssystem läuft das Programm, welche Pakete nutzt es, und wer prüft sie?

Werkzeuge. Was lässt sich damit noch bauen und prüfen? Neuere SDKs, Vorlagen und Sprachfunktionen stehen auf .NET bereit, und viele Pakete richten sich nur noch an .NET. Ein Programm auf .NET Framework bleibt davon ausgeschlossen. Das merken Sie an Kleinigkeiten: ein Paket, das nur die alte Version unterstützt, ein Build, der nur auf einem Rechner läuft, Tests, die niemand schreibt, weil das Programm sich nicht testen lässt.

Dem stehen die Kosten eines Umbaus gegenüber. Sie sind nicht kleiner, nur besser versteckt:

Posten Frage dazu
Arbeit Wie viele Personen über wie viele Wochen, neben dem Tagesgeschäft?
Risiko Was geschieht, wenn das Verhalten sich ändert? Wer bemerkt es zuerst, Frau Aydin oder ein Test?
Doppelbetrieb Wie lange laufen alt und neu nebeneinander, und wer pflegt beides?
Verzicht Welche Funktion, die der Betrieb wünscht, bleibt in dieser Zeit liegen?
Lernen Was muss das Team neu können (Web, Azure), und wer bringt es bei?

Ein Umbau ist eine Investition, kein Selbstzweck. Sie lohnt sich, wenn der Posten „Kosten des Nichtstuns“ größer wird als diese Liste. Microsoft empfiehlt dazu, Upgrades nach Risiko und Ertrag zu ordnen: erst eine gezielte Bewertung, dann ein Pilot an einem Projekt mit geringem Risiko, und mit den Ergebnissen die größere Planung. Genau so ist dieser Kurs aufgebaut, und M1 ist die Bewertung.

Acht Fragen, ein Weg

Mit diesen Fragen kommen Sie zu einer Empfehlung, die sich begründen lässt. Beantworten Sie jede mit Ja, Nein oder „unklar“. Ein „unklar“ ist ein Arbeitsauftrag für die Lektionen M1.3 und M1.4.

Nr. Frage Ja spricht für Nein spricht für
1 Soll sich das Programm in den nächsten Jahren fachlich ändern? Weg 2 oder 3 Weg 1
2 Hängt der Betrieb davon ab, dass es ohne Unterbrechung läuft? Weg 3 (alt und neu nebeneinander), nicht Weg 4 jeder Weg ist denkbar
3 Haben Sie den Quelltext und können ihn bauen? Weg 2 oder 3 Weg 5, oder erst Weg 1 mit Sicherheitsnetz
4 Gibt es ein Sicherheitsnetz (Tests, Datenbankkopie, Beschreibung des Verhaltens)? Weg 2 oder 3 zuerst Netz bauen (Modul M2)
5 Kennt mehr als eine Person das Programm? Weg 1 ist tragfähig Weg 2 und 3 senken das Risiko einer Abhängigkeit
6 Gibt es ein Produkt am Markt, das die Regeln des Betriebs abdeckt? Weg 5 prüfen Weg 2 oder 3
7 Soll das Programm auch außerhalb des Büros nutzbar sein (Browser, Telefon)? Weg 3 Weg 2 reicht
8 Läuft es auf einem Betriebssystem und mit Paketen, die noch Korrekturen bekommen? Weg 1 ist vorerst vertretbar Weg 2 sofort

Zwei Antworten sollten Sie nicht überspringen. Wer Frage 3 mit Nein beantwortet, kann das Muster dieses Kurses kaum anwenden: Ohne Quelltext lässt sich nichts herauslösen. Und wer Frage 4 mit Nein beantwortet, sollte noch nichts umbauen. Lektion M2.1 (Das Sicherheitsnetz zuerst) baut dieses Netz.

Wann Sie besser nicht modernisieren

Auch das ist eine gute Entscheidung, wenn sie begründet ist. Gute Gründe sind:

  • Das Programm macht seine Arbeit und ändert sich nicht. Ein Programm, das seit Jahren unverändert läuft, auf einem unterstützten System, ohne bekannte Lücken, kostet im Betrieb kaum etwas. Ein Umbau würde Risiko kaufen, wo keines war.
  • Die Aufgabe entfällt bald. Wenn der Betriebszweig, den das Programm unterstützt, in absehbarer Zeit endet, gilt Weg 5: abschalten.
  • Standardsoftware deckt es ab. Dann ist der Weg nicht „modernisieren“, sondern „ersetzen“, mit Datenübernahme als Hauptarbeit.
  • Es fehlt jede Voraussetzung. Kein Quelltext, kein Build, kein Mensch, der es kennt: Dann beginnen Sie mit Weg 1 und bauen erst das Sicherheitsnetz. Die Dokumentation zum Strangler-Fig-Muster (Lektion M1.4) nennt dasselbe: Das Muster passt nicht, wenn Sie das Altsystem nicht ändern können.
  • Das Team hat keine Kapazität. Ein Umbau, der nach zwei Wochen wegen Tagesgeschäft liegen bleibt, hinterlässt zwei halbe Programme.

Was Sie in jedem Fall tun, auch bei „Behalten“: Sorgen Sie dafür, dass der Quelltext in einem Repository liegt, dass er sich bauen lässt, dass eine Sicherung der Datenbank existiert und dass eine zweite Person weiß, wie das Programm ausgeliefert wird. Das kostet wenig und hält alle Wege offen.

Das ADR: Wir modernisieren das Auftragsbuch

Brandt Haustechnik hat die acht Fragen beantwortet: Die Disposition wünscht den Zugriff auch vom Telefon (7), das Programm hat nur einen Pfleger (5), das Sicherheitsnetz fehlt (4), der Quelltext ist da (3), und der Betrieb darf nicht stehen (2). Damit ist die Entscheidung nicht mehr Geschmack, sondern lässt sich aufschreiben. Das ADR liegt im Repository unter docs/adr/0001-auftragsbuch-modernisieren.md; die ganze Fassung steht in der Lösung zu Übung 2. Seine Entscheidung in einem Satz: erst auf .NET 10 heben, dann Schritt für Schritt umbauen, alt und neu nebeneinander betreiben, das Altprogramm erst abschalten, wenn die Messung es erlaubt.

Ein ADR ist so gut wie seine Alternativen. Deshalb enthält dieses fünf Optionen, eine je Weg, jede mit ihrem besten Argument, nicht als Strohmann. Die Abwägung nennt, was Brandt Haustechnik aufgibt: In den nächsten Monaten entstehen keine neuen Funktionen, und das Team muss Web und Azure lernen.

Was kann schiefgehen

  • Der Strohmann. Die Option „Neu schreiben“ wird nur aufgeschrieben, damit der Umbau besser aussieht. Prüfen Sie jede Option mit der Frage: Würden Sie sie nehmen, wenn die Umstände anders wären? Wenn nein, ist sie keine echte Option.
  • Technik statt Nutzen. „Es ist doch .NET Framework“ ist kein Grund, den Betrieb zu stören. Begründen Sie jeden Weg mit einer Folge für den Betrieb: Zeit, Risiko, Sicherheit, Kosten, Menschen.
  • Neu schreiben als Reflex. Die Fachlogik eines gewachsenen Programms steht nirgends aufgeschrieben, sie steht im Code. Ein Neubau muss sie alle wiederfinden. Weg 3 behält sie und verschiebt sie Stück für Stück.
  • Das Nichtstun ist unsichtbar. Die Kosten von Weg 1 tauchen in keiner Rechnung auf, bis etwas bricht. Schreiben Sie sie auf.
  • Nur Technik am Tisch. Frau Aydin kennt die Regeln, nach denen sie jeden Tag arbeitet, besser als der Quelltext. Wer sie nicht fragt, verändert das Verhalten, ohne es zu merken.
  • Erfundene Zahlen. Eine Rechnung mit Zahlen, die niemand belegt, überzeugt für eine Sitzung und schadet danach. Nehmen Sie Zahlen aus Ihrem Betrieb oder lassen Sie die Zeile leer.

Übung 1

Wählen Sie ein Programm, das Sie kennen: aus Ihrem Betrieb oder, wenn Sie keines haben, das Auftragsbuch von Brandt Haustechnik (es wird in Lektion M1.2 aufgebaut; hier genügt die Beschreibung oben). Legen Sie in Ihrem Repository docs/entscheidung-fragen.md an und beantworten Sie die acht Fragen mit Ja, Nein oder „unklar“, je mit einem Satz Begründung. Schreiben Sie darunter, welchen der fünf Wege Sie vorläufig wählen und welche Antworten Sie noch klären müssen.

So prüfen Sie Ihr Ergebnis: Jede Antwort ist begründet, und jedes „unklar“ nennt, wer oder was die Antwort liefern würde.

Lösung 1

Für das Auftragsbuch könnte die Datei so aussehen:

markdown
# Entscheidungsfragen: Auftragsbuch

| Nr. | Antwort | Begründung |
| --- | --- | --- |
| 1 | Ja | Die Disposition will Aufträge auch vom Telefon sehen und neue Wartungsarten abbilden. |
| 2 | Ja | Ohne Auftragsbuch kann Frau Aydin morgens nicht disponieren. |
| 3 | Ja | Der Quelltext liegt auf dem Rechner des Dienstleisters und wird in dieses Repository übernommen. |
| 4 | Nein | Es gibt keine automatischen Tests und keine bekannte Sicherung der Datenbank. |
| 5 | Nein | Nur der Dienstleister kennt die Preisregeln im Detail. |
| 6 | Unklar | Herr Brandt prüft, ob ein Handwerkerprogramm die Wartungsverträge abdeckt. |
| 7 | Ja | Herr Kowalski will den Plan unterwegs lesen. |
| 8 | Unklar | Betriebssystem und Pakete werden in Lektion M1.3 erfasst. |

Vorläufiger Weg: 2, dann 3. Zuerst klären: Frage 6 (Herr Brandt), Frage 8 (Inventur), Frage 4 (Modul M2).

Frage 6 bleibt offen, und das ist in Ordnung: Wenn das Handwerkerprogramm die Regeln abdeckt, kippt die Entscheidung auf Weg 5. Genau dafür schreiben Sie die Fragen auf.

Übung 2

Schreiben Sie das ADR für Ihr Programm (oder das Auftragsbuch) als docs/adr/0001-auftragsbuch-modernisieren.md nach der Vorlage aus K4, Modul 4.1: Status, Zuversicht, Kontext, Optionen, Entscheidung, Abwägungen, Folgen, Folgen für Sicherheit und Datenschutz, Überprüfen, wenn. Es gelten die Regeln dort: mindestens zwei echte Optionen, „so lassen“ eingeschlossen; die Abwägungen nennen, was aufgegeben wird; „Überprüfen, wenn“ nennt ein beobachtbares Ereignis, kein Datum.

So prüfen Sie Ihr Ergebnis: Lesen Sie nur den Abschnitt „Abwägungen“. Erkennt Frau Aydin daraus, was sie in den nächsten Monaten nicht bekommt? Und kommen alle fünf Wege vor?

Lösung 2

markdown
# 0001: Das Auftragsbuch modernisieren

- Status: angenommen
- Zuversicht: mittel

## Kontext

Das Auftragsbuch von Brandt Haustechnik ist ein Windows-Forms-Programm auf .NET Framework 4.8 mit DataSet und ADO.NET gegen SQL
Server. Frau Aydin disponiert damit täglich; Herr Kowalski will den Plan auch unterwegs lesen. Das Programm wird von einer einzigen
Person gepflegt, der Quelltext ist vorhanden, Tests gibt es nicht. Der Betrieb darf nicht stehen. .NET Framework bekommt keine neuen
Funktionen mehr, Windows Forms läuft auf .NET nur unter Windows.

## Optionen

### Option 1: behalten und absichern

Das Programm bleibt, wie es ist; Quelltext, Build und Datenbanksicherung werden gesichert. Kein Risiko für das Verhalten und kein
Aufwand, aber der Zugriff vom Telefon bleibt unmöglich und jede Änderung bleibt so teuer wie heute.

### Option 2: nur auf .NET 10 heben

Gleiche Funktionen, neue Laufzeit. Werkzeuge, Pakete und Sicherheitsupdates sind danach aktuell, die Oberfläche bleibt vertraut. Das
Programm bleibt ein Windows-Programm mit Fachlogik in den Formularen.

### Option 3: schrittweise umbauen

Erst heben, dann Fachlogik in eine getestete Bibliothek ziehen, Daten nach Azure SQL, Aufträge und Kundenstamm als Web-API und
Blazor-Seiten ersetzen, alt und neu nebeneinander betreiben, das Altprogramm zuletzt abschalten. Jede Etappe liefert Nutzen, aber es
gibt eine lange Phase mit zwei Welten.

### Option 4: neu schreiben

Ein neues Programm von null, Umstellung an einem Stichtag. Saubere Architektur, aber alle Preisregeln und Sonderfälle müssen erneut
gefunden werden, und der Stichtag trägt das gesamte Risiko.

### Option 5: ersetzen

Ein Handwerkerprogramm vom Markt. Kein eigener Code, aber die Wartungsverträge und Preisregeln müssten angepasst oder aufgegeben
werden, und die Datenübernahme ist ungeprüft.

## Entscheidung

Wir nehmen Option 3, beginnend mit Option 2, weil nur sie dem Betrieb schon früh Nutzen bringt (Zugriff vom Telefon), das Risiko in
kleine Etappen teilt und das Altprogramm bis zum Schluss als Rückfall behält. Option 5 wird parallel geprüft.

## Abwägungen

In den nächsten Monaten entstehen im Auftragsbuch keine neuen Funktionen. Das Team muss Web und Azure lernen, und es pflegt eine
Zeit lang zwei Programme. Dafür zahlt das Ziel „schnelle neue Funktionen“, und die Betriebskosten steigen im Doppelbetrieb.

## Folgen

Zuerst entsteht ein Sicherheitsnetz aus Tests und einer Kopie der Datenbank. Jede Etappe bekommt einen Commit je Schritt und einen
Rückfallplan. Das Altprogramm wird erst abgeschaltet, wenn die Messung der Pilotgruppe es erlaubt.

## Folgen für Sicherheit und Datenschutz

Die Kundendaten (Namen, Adressen, Telefonnummern) wandern in eine Cloud-Datenbank und werden über das Web erreichbar. Anmeldung und
Rechte müssen vor der ersten Freigabe stehen; Geheimnisse liegen nie im Repository.

## Überprüfen, wenn

Option 5 ein Produkt findet, das die Wartungsverträge und Preisregeln abdeckt, oder wenn die erste Etappe doppelt so lange dauert wie
geplant.

Beachten Sie, was das ADR nicht tut: Es nennt keine Zahlen, die niemand belegen kann, und es hält die verworfenen Wege fest. In einem Jahr weiß dadurch jemand, warum Option 4 nicht gewählt wurde.

Was Sie jetzt können

  • Sie unterscheiden die fünf Wege für ein vorhandenes Programm und wissen, welche der Kurs lehrt.
  • Sie benennen, was ein veraltetes Programm kostet, und was ein Umbau kostet.
  • Sie beantworten acht Fragen, um einen Weg zu begründen, auch den Weg „besser nicht“.
  • Sie halten die Entscheidung mit ihren Alternativen in einem ADR fest.

In der nächsten Lektion bauen Sie das Auftragsbuch selbst auf, damit Sie jede Stelle kennen, an der später etwas bricht.

Weiterlesen