Per me è una proporzione di stabilità (come nel cemento cementato, argilla cotta nel forno, incastonata nella pietra, scritta con inchiostro permanente). Più il tuo codice è instabile, più alta è la probabilità che tu debba cambiarla in futuro, più facilmente sarà flessibile, come l'argilla bagnata, rimanere produttivi. Sottolineo anche la flessibilità e la non leggibilità. Per me la facilità di cambiare codice è più importante della facilità di leggerlo. Il codice può essere facile da leggere e un incubo da cambiare, e che uso è in grado di leggere e comprendere facilmente i dettagli di implementazione se sono un incubo da cambiare? A meno che non sia solo un esercizio accademico, in genere il punto di essere in grado di comprendere facilmente il codice in una base di codice di produzione è con l'intento di poterlo modificare più facilmente secondo necessità. Se è difficile cambiare, molti dei vantaggi della leggibilità vanno fuori dalla finestra. La leggibilità è generalmente utile solo nel contesto della flessibilità e la flessibilità è utile solo nel contesto dell'instabilità.
Naturalmente anche il codice più difficile da mantenere immaginabile, indipendentemente da quanto sia facile o difficile da leggere, non pone problemi se non c'è mai un motivo per cambiarlo, usarlo solo. Ed è possibile ottenere tale qualità, specialmente per i codici di sistema di basso livello in cui le prestazioni tendono spesso a contare di più. Ho ancora un codice C che uso regolarmente e che non è cambiato dalla fine degli anni '80. Non ha bisogno di cambiare da allora. Il codice è fugacemente, scritto nei giorni truculenti, e a malapena lo capisco. Eppure è ancora applicabile oggi, e non ho bisogno di capire la sua implementazione per trarne un uso completo.
Scrittura approfondita dei test è un modo per migliorare la stabilità. Un altro è il disaccoppiamento. Se il tuo codice non dipende da nient'altro, allora l'unica ragione per cui può cambiare è se, di per sé, debba cambiare. A volte una piccola quantità di duplicazione del codice può fungere da meccanismo di disaccoppiamento per migliorare drasticamente la stabilità in modo tale da renderlo un valido compromesso se, in cambio, si ottiene un codice che ora è completamente indipendente da qualsiasi altra cosa. Ora quel codice è invulnerabile ai cambiamenti nel mondo esterno. Nel frattempo il codice che dipende da 10 diverse librerie esterne ha 10 volte il motivo per cui dovrebbe cambiare in futuro.
Un'altra cosa utile in pratica è separare la tua libreria dalle parti instabili della tua base di codice, possibilmente anche costruirla separatamente, come potresti fare per le librerie di terze parti (che allo stesso modo sono pensate per essere usate, non modificate, almeno non dalla tua squadra). Solo quel tipo di organizzazione può impedire alle persone di interferire con esso.
Un altro è il minimalismo. Meno il tuo codice cerca di fare, più è probabile che possa fare ciò che fa bene. I progetti monolitici sono quasi permanentemente instabili, dal momento che sempre più funzionalità vengono aggiunte a loro, più incomplete sembrano.
La stabilità dovrebbe essere il tuo obiettivo principale ogni volta che miri a scrivere codice che sarà inevitabilmente difficile da modificare, come il codice SIMD in parallelo che è stato messo a punto in modo microscopico. Contrastate la difficoltà di mantenere il codice massimizzando la probabilità che non dovrete modificare il codice e quindi non dovrete mantenerlo in futuro. Ciò porta i costi di manutenzione a zero, indipendentemente dalla difficoltà di manutenzione del codice.