Każda organizacja obronna pracująca na oprogramowaniu C2 w końcu staje wobec tego samego problemu: system, który uzyskał Authority to Operate dekadę temu, wokół którego operatorzy zbudowali procedury i pamięć mięśniową i który niezawodnie działa w środowiskach, do których został zaprojektowany, nie daje się łatwo rozszerzyć, by sprostać bieżącym wymaganiom operacyjnym. Nowe wymagania — otwarte API, komponenty wdrażalne w chmurze, nowoczesne uwierzytelnianie, wymiana danych w czasie rzeczywistym z partnerami koalicyjnymi — to kategorie architektoniczne, których system legacyjny nigdy nie miał adresować. Całkowita wymiana systemu z przejściem jednego dnia jest operacyjnie nieakceptowalna. Niewymienianie go oznacza narastanie długu technologicznego, który co roku się kapitalizuje. Odpowiedzią inżynierską jest figowiec dusiciel: zbiór wzorców, które pozwalają modernizować przyrostowo, walidować ciągle i wycofywać legacyjny dopiero wtedy, gdy zamiennik udowodnił się pod rzeczywistym obciążeniem operacyjnym. Pełen zakres tego, co to oznacza — od cyklu życia oprogramowania obronnego przez strategię ATO po zarządzanie zmianą u operatorów — jest bardziej wymagający, niż większość programów zakłada na starcie.

Dlaczego legacyjne systemy C2 się utrzymują

Trwanie legacyjnych systemów C2 w obronności nie jest przede wszystkim problemem finansowania ani kultury, choć oba odgrywają rolę. To problem awersji do ryzyka zakorzeniony w operacyjnej rzeczywistości. System C2, który obsługuje koalicyjny obraz sytuacji powietrznej, ogniowe ogniwo koordynacyjne albo morską bazę śladów powierzchniowych, nie jest aplikacją back-office, którą można zdjąć na weekend migracyjny. Działa ciągle, w środowiskach degradowanych, pod stresem rzeczywistego tempa operacyjnego. Konsekwencją awarii systemu w złym momencie nie jest niewysłany raport sprzedażowy — to luka w obrazie sytuacji powietrznej w chwili, gdy trzeba podjąć decyzję.

Cykl Authority to Operate wzmacnia ten konserwatyzm. ATO to nie tylko certyfikacja bezpieczeństwa; to oświadczenie Authorizing Official, że postawa ryzyka systemu jest akceptowalna dla zdefiniowanego kontekstu operacyjnego. Pakiety ATO to lata dokumentacji kontroli bezpieczeństwa, testów penetracyjnych i akceptacji ryzyka. Wymiana systemu oznacza zdobywanie tego zaufania od zera, co zwykle trwa 18 do 36 miesięcy i wymaga, by system zamienny był w znacznym stopniu gotowy, zanim proces ATO się rozpocznie. Rodzi to paradoks: program musi zbudować zamiennik, nie mogąc wdrożyć go w produkcji, czyli budować go bez informacji zwrotnej operacyjnej, która ujawniłaby jego najważniejsze wady.

Zależności od specjalistycznego sprzętu dodatkowo pogłębiają problem. Legacyjne systemy C2 często sterują utwardzonymi terminalami wyświetlaczy, sprzętowymi modułami bezpieczeństwa z własnymi stosami sterowników, kontrolerami magistral MIL-STD-1553 i interfejsami szeregowymi do systemów uzbrojenia oraz czujników. Interfejsów tych nie projektowano z myślą o abstrahowaniu; są wpisane na sztywno w architekturę aplikacji legacyjnej. System zamienny musi albo odtworzyć te interfejsy sprzętowe — co może wymagać partnerstw z oryginalnymi producentami sprzętu — albo zapewnić warstwę abstrakcji, którą sprzęt może obsługiwać bez modyfikacji. Żadna z tych ścieżek nie jest szybka ani tania.

Wreszcie wiedza instytucjonalna jest wpisana w system legacyjny w sposób nie w pełni udokumentowany. Operatorzy wypracowali obejścia znanych dziwactw. Personel utrzymania wie, które procesy restartować, w jakiej kolejności, po jakich trybach awarii. Zespoły integracyjne ręcznie zakodowały logikę kompensacyjną obsługującą przypadki brzegowe, których oryginalna specyfikacja nie przewidywała. Wiedza ta żyje w głowach doświadczonego personelu i w nieudokumentowanych plikach konfiguracyjnych, i musi zostać wydobyta oraz przekazana, zanim system legacyjny można wycofać — to zadanie konsekwentnie niedoszacowywane w planowaniu programów modernizacji.

Wzorzec figowca dusiciela w modernizacji C2

Martin Fowler nazwał wzorzec figowca dusiciela od tropikalnej rośliny, która oplata drzewo żywiciela, powoli przejmując jego rolę konstrukcyjną, aż żywiciela można usunąć bez zawalenia czegokolwiek. Wzorzec ten precyzyjnie mapuje się na problem modernizacji C2: budujesz nowy system przyrostowo wokół systemu legacyjnego, kierując progresywnie więcej ruchu do nowych komponentów w miarę walidacji każdego z nich, aż system legacyjny nie obsługuje już niczego i można go wycofać. Alternatywa — pełne przepisanie systemu i przejście w zdefiniowanym terminie — zawodzi w środowiskach C2, ponieważ nowego systemu nie da się zwalidować wobec rzeczywistego obciążenia operacyjnego, zanim stanie się jedynym systemem operacyjnym.

Pierwszą decyzją w migracji metodą figowca dusiciela jest oś dekompozycji: jak podzielić możliwości systemu legacyjnego na plastry, które można migrować niezależnie. Dla systemów C2 naturalną dekompozycją jest podział według domen funkcjonalnych — zarządzanie śladami, zarządzanie statusem sił, łączność wiadomościowa, raportowanie, przydzielanie zadań, wyświetlanie — a nie według warstw architektonicznych. Plastry pionowe przez pełny stos (baza danych, logika biznesowa, API, wyświetlanie) dają niezależnie wdrażalne i niezależnie walidowalne jednostki pracy. Plastry poziome (najpierw migracja warstwy bazy danych, potem logiki biznesowej, potem wyświetlacza) są kuszące z punktu widzenia architektury, ale niezwykle trudne do walidacji przyrostowej, ponieważ żadna warstwa pozioma nie jest samodzielnie użyteczna.

Trasowanie ruchu między systemem legacyjnym a nowym zarządza fasada — warstwa przechwytująca siedząca przed oboma systemami i kierująca każde żądanie do jednego albo obu. W wczesnych fazach migracji fasada wysyła cały ruch do systemu legacyjnego i cieniuje odczyty do nowego systemu w celu porównania. W miarę budowania zaufania fasada przechodzi na trasowanie podstawowe do nowego systemu, z legacyjnym jako zapasem. Fasada musi być bezstanowa i wysoce dostępna; nie może stać się pojedynczym punktem awarii w systemie, który system legacyjny już obsługiwał bez takiego punktu.

Brama równości funkcji to formalny mechanizm kontroli tego, kiedy następuje przesunięcie ruchu. Zanim jakakolwiek domena funkcjonalna zostanie w pełni przełączona na nowy system, musi przejść udokumentowany zbiór kryteriów odbioru: pokrycie testów funkcjonalnych dla wszystkich przepływów operatora w tej domenie, benchmarki wydajnościowe wykazujące, że nowy system osiąga czasy odpowiedzi legacyjnego pod reprezentatywnym obciążeniem oraz metryki uzgadniania danych wykazujące rozbieżność stanu w granicach tolerancji w utrzymanym oknie obserwacyjnym. Bramy bez udokumentowanych kryteriów stają się nieformalnymi punktami kontrolnymi, które kierownicy programów zatwierdzają według uznania, a nie dowodów — i właśnie tak programy C2 wytwarzają systemy, które zawodzą pod obciążeniem operacyjnym.

Opakowywanie API legacyjnych komponentów C2

Pierwszym konkretnym artefaktem inżynierskim w każdej migracji C2 metodą figowca dusiciela jest wrapper bramy API. Zanim jakakolwiek możliwość legacyjna zostanie zastąpiona, system legacyjny trzeba otoczyć API opartym na standardach, które nowe komponenty mogą konsumować, nie znając szczegółów implementacji legacyjnej. Ten wrapper jest szyciem, które czyni całą migrację odwracalną: dopóki wrapper jest obecny, system legacyjny można wywoływać dla każdej możliwości, która nie została jeszcze zmigrowana, a komponenty nowego systemu można budować wobec czystego kontraktu, a nie wobec natywnego interfejsu systemu legacyjnego.

Projekt wrappera zależy w dużej mierze od tego, co system legacyjny eksponuje. Starsze systemy C2 z lat 1990. i początku lat 2000. zazwyczaj udostępniają własnościowe protokoły szeregowe — binarne ramki poleceń specyficzne dla dostawcy, przesyłane obwodami RS-232, RS-422 lub MIL-STD-188-114. Wrapper musi zaimplementować dekoder i enkoder ramek szeregowych, zmapować semantykę komend na metody HTTP lub gRPC oraz obsłużyć maszynę stanów implikowaną przez model żądanie-odpowiedź protokołu legacyjnego. To nie jest efektowna praca, ale tu mieszka większość wczesnego ryzyka migracji: błąd w dekoderze szeregowym, który cicho uszkodzi polecenie, jest znacznie trudniejszy do wykrycia niż niezgodność między dwoma schematami JSON.

W przypadku systemów z własnymi protokołami sieciowymi albo autorskimi API middleware dostawcy wrapper jest koncepcyjnie podobny, ale powierzchnia implementacji jest inna. Wrapper musi uwzględnić bibliotekę kliencką dostawcy w swoim drzewie zależności, zarządzać cyklem życia sesji według modelu połączeń dostawcy i translować kody błędów z przestrzeni nazw dostawcy na zdefiniowaną taksonomię błędów w nowym API. Architektura bramy API dla systemów obronnych musi też rozstrzygnąć kwestię zapasu wydajności: systemy legacyjne są często projektowane do obsługi określonej stawki wiadomości bez marginesu. Dodanie warstwy wrappera multipleksującej wywołania z wielu nowych komponentów przez ten sam interfejs legacyjny może nasycić system legacyjny przy obciążeniach, które nigdy go wcześniej nie stresowały. Profilowanie sufitu przepustowości systemu legacyjnego jest warunkiem wstępnym projektu wrappera, a nie refleksem po fakcie.

Warstwa translacji wiadomości wewnątrz wrappera musi jasno określać, czego nie potrafi przetłumaczyć. Niektóre legacyjne pola C2 niosą semantykę bez odpowiednika w nowoczesnym API — kody statusu kodujące wiele warunków ortogonalnych w pojedynczym bajcie, pola czasowe zakładające konkretny zegar sprzętowy albo elementy danych znaczące wyłącznie w kontekście innych pól tej samej wiadomości. Te niedopasowania impedancji trzeba udokumentować w specyfikacji interfejsu wrappera i uwidocznić w API nowego systemu jako jawne wartości null lub unknown, a nie cicho przekształcać do wartości domyślnych, które wyglądają wiarygodnie, lecz są błędne.

// Example: REST facade over proprietary serial C2 command interface
// POST /api/v1/tracks/{trackId}/status
{
  "status": "HOSTILE",              // mapped from legacy 3-bit identity code
  "confidence": "HIGH",             // derived from legacy quality indicator
  "lastUpdated": "2026-06-25T09:14:32Z",
  "legacyRaw": {                    // passthrough for audit/debug
    "systemId": "C2-LEGACY-01",
    "frameType": 0x4A,
    "identityCode": 6,
    "qualityWord": 255
  },
  "_translation": {
    "unmappedFields": ["correlation_index"],  // legacy field with no v1 equivalent
    "warnings": []
  }
}

Migracja danych z magazynów legacyjnych

Legacyjne systemy C2 obejmują niezwykle szeroki zakres technologii przechowywania danych, a podejście ekstrakcji trzeba dostosować do każdej z nich. Najstarsze systemy używają hierarchicznych baz IMS albo układów rekordów plików płaskich definiowanych w COBOL — formatów będących standardem w chwili projektowania systemów, które dziś wymagają specjalistycznych narzędzi do odczytu. Ekstraktory segmentów IMS są dostępne jako narzędzia komercyjne, ale wymagają oryginalnych definicji bazy IMS (DBD) i bloku specyfikacji programu (PSB), które mogą istnieć wyłącznie w formie drukowanej w segregatorze, który ktoś będzie musiał odnaleźć i zeskanować. Układy plików płaskich COBOL wymagają copybooków COBOL do interpretacji binarnej struktury rekordu; jeśli copybooki zaginęły, inżynieria wsteczna układu z samych danych i ze źródeł aplikacji jest możliwa, ale czasochłonna.

Systemy średniego pokolenia zazwyczaj używają relacyjnych baz Oracle lub Sybase ze schematami odzwierciedlającymi dziesięciolecia ewolucji — tabel dodanych bez normalizacji, kolumn przekształconych w stosunku do pierwotnej semantyki, ograniczeń referencyjnych wyłączonych w celu umożliwienia ładowania masowego oraz złożonych kluczy głównych kodujących wiele pojęć biznesowych. Krok ekstrakcji dla tych systemów to ćwiczenie z archeologii schematu: czytanie kodu źródłowego aplikacji, by zrozumieć, jak pola są faktycznie interpretowane, a nie tylko to, co sugerują nazwy kolumn, oraz budowa mapy semantycznej od pola legacyjnego do zamierzonego pojęcia biznesowego.

Remediacja jakości danych to faza, którą większość programów migracji niedoszacowuje. Legacyjne aplikacje C2 zawierają kod kompensacyjny, który cicho koryguje albo ignoruje problemy jakości danych — obsługę NULL, ograniczanie zakresu, tłumienie duplikatów — których sama baza danych nie egzekwuje. Gdy dane te są migrowane do nowego systemu o ściślejszej walidacji, problemy jakości wychodzą na jaw jako awarie migracji. Potok remediacji musi systematycznie wyliczyć te problemy, sklasyfikować je według przyczyny źródłowej i zastosować transformacje zachowujące operacyjny zamiar danych, a nie po prostu odrzucać rekordy nieprzechodzące walidacji. Rekord z pustym polem pozycji i prawidłową tożsamością śladu powinien zostać zmigrowany jako ślad o nieznanej pozycji, a nie porzucony.

Mapowanie ewolucji schematu transluje poprawione dane legacyjne na schemat docelowy. Ten krok wymaga decyzji dotyczących rekordów bez bezpośredniego mapowania — legacyjnych kodów statusu obejmujących wiele pól docelowych, rekordów historycznych w formatach niewspieranych przez nowy system oraz elementów danych ważnych według zasad starego systemu, lecz semantycznie niejednoznacznych w nowym schemacie. Decyzje te trzeba udokumentować, przedstawić ekspertom merytorycznym do przeglądu i zatwierdzić przed uruchomieniem migracji, ponieważ wpływają na obraz operacyjny, który operatorzy zobaczą w nowym systemie pierwszego dnia pracy równoległej.

Strategia pracy równoległej

Praca równoległa to faza, w której systemy legacyjny i nowy działają jednocześnie i oba są autorytatywne — a dokładniej, w której system legacyjny pozostaje jedynym źródłem prawdy, a dokładność nowego systemu jest względem niego walidowana. Mechanizmem umożliwiającym jest dual-write: każde polecenie zmieniające stan, które dociera do fasady, jest stosowane do obu systemów przed zwróceniem odpowiedzi. Oznacza to, że każde działanie operatora, każdy przychodzący strumień danych i każda automatyczna zmiana stanu są zapisywane do bazy legacyjnej i do bazy nowego systemu w tym samym oknie transakcyjnym, dając nowemu systemowi ciągle aktualną kopię stanu operacyjnego, względem której można dokonywać pomiarów.

Usługa uzgadniania to narzędzie, które przekształca dual-write w użyteczne dane jakościowe. Działa w konfigurowalnym odstępie — zwykle co kilka minut podczas walidacji, godzinowo w stanie ustalonym — i porównuje bazy obu systemów rekord po rekordzie, raportując delty na poziomie pól dla wszystkich typów encji. Wyniki uzgadniania są zbierane w magazynie szeregów czasowych i prezentowane na pulpicie jakości pokazującym wskaźniki delt według typu encji, pola i okresu. Rosnący wskaźnik delt w konkretnym polu po określonym czasie to sygnał diagnostyczny: coś zmieniło się w środowisku operacyjnym albo w konfiguracji migracji i uszkodziło translację tego pola. Narzędzie uzgadniania nie jest opcjonalną infrastrukturą; to podstawowy artefakt dowodowy dla bramy równości funkcji, a następnie dla pakietu zmiany ATO.

UX z podwójnym panelem operatora to operacyjny wyraz pracy równoległej. Wyznaczeni operatorzy — zwykle niewielka grupa doświadczonych użytkowników, którzy zgłosili się do roli walidacyjnej — mają dostęp do widoku obok siebie systemu legacyjnego i nowego dla swojego obszaru operacyjnego. Używają nowego systemu jako podstawowego interfejsu i odwołują się do widoku legacyjnego, by skontrolować dane, co do których nie mają pewności. Gdy obserwują rozbieżność, zgłaszają ustrukturyzowany raport przez mechanizm informacji zwrotnej wbudowany w wyświetlacz z podwójnym panelem: typ encji, pole, wartość legacyjną, wartość nową oraz ocenę wagi operacyjnej. Te raporty operatorów trafiają wprost do trackera defektów i przyczyniają się do oceny bramy równości funkcji obok automatycznych danych uzgadniania. Interfejs z podwójnym panelem jest jawnie tymczasowy i powinien zostać wycofany, gdy tylko równość zostanie ugruntowana — utrzymywanie go w nieskończoność tworzy obciążenie poznawcze i sygnalizuje operatorom, że nowemu systemowi nie można zaufać bez widoku zapasowego.

Strategia ATO dla modernizacji

Wymiar ATO programu modernizacji C2 to obszar, w którym wzorzec figowca dusiciela wymaga najstaranniejszej koordynacji z organizacją Authorizing Official. Pełna reautoryzacja ATO dla nowego systemu C2 trwa 18 do 36 miesięcy i wymaga, by system był w znacznym stopniu gotowy i w stabilnej konfiguracji, zanim proces oceny może ruszyć. Ten harmonogram jest niekompatybilny z migracją przyrostową, która wdraża nowe komponenty ciągle przez kilka lat. Rozwiązaniem jest strategia przyrostowych zmian ATO, ale trzeba ją uzgodnić z AO przed rozpoczęciem migracji — przedstawienie jej jako faktu dokonanego po wdrożeniu to błąd niszczący relacje, który spowolni każdy kolejny plaster.

Podejście przyrostowych zmian działa następująco: istniejące ATO dla systemu legacyjnego jest utrzymywane przez całą migrację. Każdy plaster strangler jest zgłaszany do Security Impact Analysis (SIA) zamiast pełnej reautoryzacji. SIA ocenia wyłącznie deltę postawy ryzyka wprowadzoną przez nowy komponent: powierzchnię ataku, którą dodaje (nowe interfejsy sieciowe, nowe przepływy uwierzytelniania, nowe przepływy danych), kontrole bezpieczeństwa, na których się opiera z istniejącej granicy autoryzacji, oraz wszelkie nowe ryzyka, które wprowadza. Jeśli SIA stwierdzi, że plaster mieści się w istniejącej granicy autoryzacji i nie wprowadza ryzyk wymagających pełnej ponownej oceny, AO wydaje zmianę ATO zamiast nowego ATO. Skraca to cykl autoryzacji bezpieczeństwa na plaster z miesięcy do tygodni, pod warunkiem że plastry są od początku projektowane z czystymi granicami bezpieczeństwa.

Projektowanie pod wykonalność SIA oznacza, że każdy plaster musi mieć jawne granice bezpieczeństwa: zdefiniowane punkty wejścia i wyjścia sieciowego, udokumentowany przepływ danych od plastra do systemu legacyjnego przez wrapper API oraz jasne oświadczenie, które kontrole bezpieczeństwa plaster dziedziczy z istniejącej granicy, a które realizuje samodzielnie. Plastry sięgające głęboko w architekturę bezpieczeństwa systemu legacyjnego — dotykające uwierzytelniania, zarządzania kluczami albo obsługi klasyfikacji — są kandydatami na pełną reautoryzację, a nie na zmianę. Zidentyfikuj je wcześnie i zaplanuj ich harmonogram ATO odpowiednio. Playbook transformacji cyfrowej organizacji obronnych konsekwentnie wskazuje zarządzanie cyklem ATO jako najdłuższy słup w każdym harmonogramie modernizacji.

Podejście ciągłego ATO — utrzymywanie bieżącego procesu autoryzacji z ciągłym monitoringiem zamiast ocen punktowych — to ostateczny cel dla zmodernizowanych systemów C2. Wymaga dojrzałej zdolności zarządzania informacją bezpieczeństwa i zdarzeniami, narzędzi automatycznej oceny kontroli oraz organizacji AO zasobionej do ciągłego zaangażowania, a nie okresowego przeglądu. Większość programów osiąga ciągłe ATO jako cel dla stanu postlegacyjnego, nie jako warunek wstępny migracji, ale ustanowienie infrastruktury monitoringu w fazie migracji jest zarówno możliwe, jak i pożądane.

Zarządzanie zmianą ludzi i procesów

Wzorzec figowca dusiciela rozwiązuje techniczne ryzyko modernizacji C2, ale ryzyko ludzkie jest co najmniej równie duże i nie adresuje go żaden z opisanych powyżej wzorców inżynierskich. Operatorzy, którzy pracowali z legacyjnym systemem C2 latami, zbudowali modele poznawcze jego zachowania — jak wyświetla dane śladów, jak reaguje na polecenia, jak zachowuje się w konkretnych trybach awarii — które nie przenoszą się na nowy system automatycznie. Nowy system o innym paradygmacie wyświetlania, innych skrótach klawiszowych i innych komunikatach błędów spowolni operatorów dokładnie w tych momentach, gdy liczy się szybkość. Przeszkolenie to nie wydarzenie szkoleniowe; to utrzymany okres praktyki pod nadzorem w warunkach operacyjnych.

Wyzwalacze i kryteria wycofania muszą zostać uzgodnione i udokumentowane przed rozpoczęciem okresu pracy równoległej, a nie negocjowane po fakcie, gdy program jest pod presją deklarowania sukcesu. Wyzwalacze wycofania dzielą się na dwie kategorie: ilościowe (automatyczna delta uzgadniania przekracza próg, wskaźnik błędów operatorów rośnie powyżej poziomu odniesienia, opóźnienie krytycznej operacji przekracza wymaganie) oraz jakościowe (formalne głosowanie zaufania operatorów spada poniżej progu, incydent bezpieczeństwa przypisany nowemu systemowi, AO cofa zmianę autoryzacji). Każdy wyzwalacz musi mieć zdefiniowaną metodę pomiaru, zdefiniowany próg i zdefiniowaną ścieżkę eskalacji. Samą procedurę wycofania trzeba przećwiczyć przed rozpoczęciem okresu pracy równoległej, a ćwiczenie musi obejmować pełną sekwencję kroków od identyfikacji wyzwalacza do przywrócenia nadrzędności legacyjnego, pod presją czasu, z personelem, który będzie to realizował w praktyce.

Nadzór harmonogramu wygaszania to ostatni mechanizm zapobiegający prowadzeniu programów migracji w nieskończoność. System legacyjny musi mieć formalną strukturę zarządzania — radę wygaszania z reprezentacją operatorów, kierownictwa programu, organizacji AO oraz wszelkich systemów zewnętrznych zintegrowanych z legacyjnym — która regularnie się zbiera, ocenia postęp względem harmonogramu wygaszania i podejmuje wiążące decyzje o datach wycofania poszczególnych komponentów. Bez tego zarządzania system legacyjny pozostaje żywy, ponieważ nikt nie ma uprawnień, by go wyłączyć, a integracje brzegowe, na których migrację nigdy nie zaplanowano budżetu, stają się stałymi powodami utrzymywania go w ruchu. Rada wygaszania musi mieć uprawnienia do wyznaczania twardych terminów migracji integracji brzegowych i do egzekwowania tych terminów przez dostarczanie zasobów, nie tylko przez wymaganie zgodności.

Kluczowy wniosek: najczęstszym trybem awarii w modernizacji C2 nie jest awaria techniczna — to awaria zarządzania. Programy, które poprawnie wdrażają figowca dusiciela, ale nie ustanawiają bram równości funkcji, kryteriów wycofania i nadzoru wygaszania z wiążącymi uprawnieniami, rutynowo znajdują system legacyjny wciąż działający pięć lat po ogłoszeniu „zamiennika” operacyjnym. Wzorce inżynierskie są konieczne, ale niewystarczające; to struktury zarządzania czynią migrację kompletną.

Czas od pierwszego plastra strangler do pełnego wycofania legacyjnego wynosi zwykle od trzech do siedmiu lat dla złożonego systemu C2. Programy, które planują dwa lata, a napotykają trzy, radzą sobie dobrze; programy, które planują dwa lata, a napotykają siedem, zwykle nie uwzględniły integracji brzegowych, czasów cyklu ATO i obciążenia poznawczego utrzymania programu migracji przez rotacje personalne. Ustawienie realistycznych oczekiwań na starcie programu — także wobec organów finansujących, które muszą zrozumieć, że modernizacja nie jest projektem z ustaloną datą końcową, lecz utrzymaną dyscypliną inżynierską — jest samo w sobie zadaniem zarządzania zmianą, które kierownik programu musi wykonać przed napisaniem pierwszej linii kodu.