No planeas durar 20 años. Llano y simple. En cambio, cambias tus objetivos a la compartimentación.
¿Su base de datos de aplicaciones es independiente? Si tuviera que cambiar las bases de datos en este momento, ¿podría? ¿Es su lenguaje lógico agnóstico? Si tuviera que volver a escribir la aplicación en un idioma totalmente nuevo en este momento, ¿podría? ¿Sigue buenas pautas de diseño como SRP y DRY?
He tenido proyectos en vivo durante más de 20 años, y puedo decirles que las cosas cambian. Al igual que las ventanas emergentes. Hace 20 años podía confiar en una ventana emergente, hoy no puede. XSS no era una cosa hace 20 años, ahora tienes que dar cuenta de CORS.
Entonces, lo que debe hacer es asegurarse de que su lógica esté bien separada, y que evite usar CUALQUIER tecnología que lo encierre en un proveedor específico.
Esto puede ser muy complicado a veces. .NET, por ejemplo, es excelente para exponer la lógica y el método para su adaptador de base de datos MSSQL que no tiene equivalentes en otros adaptadores. MSSQL puede parecer un buen plan hoy, pero ¿seguirá siéndolo durante 20 años? Quién sabe. Un ejemplo de cómo solucionar esto para tener una capa de datos totalmente separada de las otras partes de la aplicación. Luego, en el peor de los casos, solo tiene que volver a escribir toda la capa de datos, el resto de su aplicación no se ve afectada.
En otras palabras, piense en ello como un automóvil. Su automóvil no va a cumplir 20 años. Pero, con neumáticos nuevos, motor nuevo, transmisión nueva, ventanas nuevas, electrónica nueva, etc. Ese mismo automóvil puede estar en la carretera durante mucho tiempo.