Sto cercando un termine di programmazione comunemente usato per descrivere un fenomeno di ingegneria del software, che (per mancanza di un modo migliore per descriverlo) illustrerò prima con un paio di esempi, per analogia:
Scenario 1: Vogliamo costruire / estendere un sistema di metropolitana alla periferia di una piccola città nel Wyoming. Ovviamente ci sono i soliti problemi della metropolitana da risolvere (assumere la giusta compagnia di costruzione, scegliere il percorso migliore, acquistare le auto della metropolitana), ma a parte questo è abbastanza semplice implementare il sistema perché non c'è un numero enorme di vincoli da soddisfare.
Scenario 2: come sopra, tranne che ora abbiamo bisogno di costruire / estendere il sistema di metropolitana nel centro di Los Angeles. Qui affrontiamo tutti i problemi che abbiamo riscontrato nel caso (1), ma anche problemi addizionali - la maggior parte dello spazio applicabile è già in uso, e ha un collegio elettorale che protesta rumorosamente se li scomodiamo riutilizzando, ridisegnando o altrimenti modificando l'infrastruttura su cui si basano. Per questo motivo, le estensioni del sistema avvengono in modo molto lento e costoso, oppure non si verificano affatto.
A volte vedo un modello simile con lo sviluppo del software - l'aggiunta di una nuova funzionalità a un programma piccolo / semplice è semplice, ma man mano che il programma cresce, l'aggiunta di ulteriori nuove funzionalità diventa sempre più difficile, se non altro perché è difficile integrare la nuova funzionalità senza influire negativamente sul numero elevato di casi d'uso esistenti o circoscrizioni dell'utente. (anche con un design di programma robusto e adattabile, ti imbatti nel problema dell'interfaccia utente che diventa così elaborata che il programma diventa difficile da imparare o da usare)
Esiste un termine per questo fenomeno?