Dla mnie jest to proporcja stabilności (jak w przypadku cementu w betonie, wypalanej w piecu gliny, osadzonej w kamieniu, zapisanej trwałym atramentem). Im bardziej niestabilny jest twój kod, ponieważ im większe prawdopodobieństwo, że będziesz musiał go zmienić w przyszłości, tym łatwiej będzie go elastycznie, podobnie jak mokra glina, aby pozostać produktywnym. Podkreślam także elastyczność i brak czytelności. Dla mnie łatwość zmiany kodu jest ważniejsza niż łatwość czytania. Kod może być łatwy do odczytania, a koszmar do zmiany, a jaki pożytek jest w stanie odczytać i łatwo zrozumieć szczegóły implementacji, jeśli koszmar do zmiany? O ile nie jest to tylko ćwiczenie akademickie, zwykle celem jest łatwe zrozumienie kodu w bazie kodu produkcyjnego z zamiarem łatwiejszej zmiany go w razie potrzeby. Jeśli trudno to zmienić, wtedy wiele zalet czytelności wychodzi poza okno. Czytelność jest ogólnie użyteczna tylko w kontekście elastyczności, a elastyczność jest użyteczna tylko w kontekście niestabilności.
Oczywiście nawet najtrudniejszy do utrzymania kod, jaki można sobie wyobrazić, bez względu na to, jak łatwy lub trudny jest jego odczyt, nie stanowi problemu, jeśli nigdy nie ma powodu, aby go zmieniać, tylko go używać. Możliwe jest osiągnięcie takiej jakości, szczególnie w przypadku niskiego poziomu kodu systemowego, w którym wydajność często liczy się najbardziej. Mam kod C, którego wciąż używam, co nie zmieniło się od późnych lat 80-tych. Od tego czasu nie musiał się zmieniać. Kod jest niezgrabny, napisany w czasach grzebania w bitach i ledwo go rozumiem. Nadal jednak ma zastosowanie do dzisiaj i nie muszę rozumieć jego implementacji, aby czerpać z niego wiele korzyści.
Dokładne pisanie testów jest jednym ze sposobów poprawy stabilności. Innym jest oddzielenie płatności od produkcji. Jeśli twój kod nie zależy od niczego innego, to jedynym powodem do zmiany jest to, że sam musi się zmienić. Czasami niewielka ilość duplikacji kodu może służyć jako mechanizm odsprzęgający, który radykalnie poprawia stabilność w sposób, który czyni go godnym kompromisem, jeśli w zamian otrzymujesz kod, który jest teraz całkowicie niezależny od wszystkiego innego. Teraz ten kod jest niewrażliwy na zmiany w świecie zewnętrznym. Tymczasem kod, który zależy od 10 różnych bibliotek zewnętrznych, ma 10-krotny powód do zmiany w przyszłości.
Inną przydatną rzeczą w praktyce jest oddzielenie biblioteki od niestabilnych części bazy kodu, być może nawet zbudowanie jej osobno, tak jak w przypadku bibliotek stron trzecich (które podobnie mają być używane, a nie zmieniane, a przynajmniej nie przez zespół). Tylko ten rodzaj organizacji może zapobiec manipulowaniu nią przez ludzi.
Kolejny to minimalizm. Im mniej Twój kod próbuje zrobić, tym większe prawdopodobieństwo, że potrafi zrobić to, co robi dobrze. Monolityczne konstrukcje są prawie trwale niestabilne, ponieważ im więcej funkcji jest dodawanych, tym bardziej wydają się niekompletne.
Stabilność powinna być Twoim głównym celem za każdym razem, gdy chcesz napisać kod, który nieuchronnie będzie trudny do zmiany, jak na przykład równoległy kod SIMD, który został dostrojony do mikroukładu. Przeciwdziałasz trudnościom w utrzymywaniu kodu, maksymalizując prawdopodobieństwo, że nie będziesz musiał go zmieniać, a zatem nie będziesz musiał go utrzymywać w przyszłości. To obniża koszty utrzymania do zera, bez względu na to, jak trudny jest kod.