Non prevedi di durare 20 anni. Chiaro e semplice. Invece sposta i tuoi obiettivi verso la compartimentazione.
Il database delle tue app è indipendente? Se dovessi cambiare banca dati in questo momento, potresti farlo. Il tuo linguaggio logico è agnostico. Se dovessi riscrivere l'app in una lingua completamente nuova in questo momento, potresti? Stai seguendo buone linee guida di progettazione come SRP e DRY?
Ho progetti in corso da più di 20 anni e posso dirti che le cose cambiano. Come i pop-up. 20 anni fa potevi contare su un pop-up, oggi non puoi. XSS non era una cosa 20 anni fa, ora devi tenere conto di CORS.
Quindi, ciò che fai è assicurarti che la tua logica sia ben separata e che eviti di utilizzare QUALSIASI tecnologia che ti blocchi a un fornitore specifico.
Questo può essere molto complicato a volte. .NET, ad esempio, è perfetto per esporre la logica e il metodo per la sua scheda di database MSSQL che non ha equivalenti in altre schede. MSSQL potrebbe sembrare un buon piano oggi, ma rimarrà tale per 20 anni? Chissà. Un esempio di come aggirare questo per avere un livello dati totalmente separato dalle altre parti dell'applicazione. Quindi, nel peggiore dei casi, devi solo riscrivere l'intero livello dati, il resto dell'applicazione rimarrà inalterato.
In altre parole, pensala come un'auto. La tua auto non ce la farà 20 anni. Ma, con pneumatici nuovi, nuovo motore, nuova trasmissione, nuovi finestrini, nuova elettronica, ecc. Quella stessa macchina può essere sulla strada per molto tempo.