Muchas de las otras respuestas abordan problemas de diseño más grandes, o son bastante abstractos. Si piensa en términos de lo que sucederá en el futuro, puede definir algunas técnicas claras para ayudar a proteger el código en el futuro .
Principalmente piense que en el futuro alguien intentará agregar una característica al código, o intentará reutilizar su código en otro lugar. También pueden intentar corregir una función en el código. Obviamente, tener un buen código limpio es un punto de partida obligatorio, pero también hay algunas técnicas específicas que se pueden hacer.
Programación defensiva : verifique la entrada más allá de lo que su aplicación actual realmente necesita. Siempre que llame a las API, asegúrese de verificar que su entrada sea algo que esperaría. En el futuro, las personas mezclarán nuevas versiones de código, por lo que el alcance de los errores y las devoluciones de API cambiarán de lo que es ahora.
Comportamiento indefinido de Elliminate : una gran cantidad de código tiene un comportamiento que evoluciona de la nada. Ciertas combinaciones de entrada conducen a cierta salida que nadie realmente pretendía, pero sucede. Ahora, inevitablemente, alguien dependerá de ese comportamiento, pero nadie lo sabrá ya que no está definido. Cualquiera que intente cambiar el comportamiento en el futuro inadvertidamente romperá las cosas. Utilice las comprobaciones de seguridad ahora e intente eliminar / bloquear todos los usos indefinidos del código.
Conjunto de pruebas automatizadas : estoy seguro de que puede encontrar volúmenes escritos sobre la necesidad de pruebas unitarias. Sin embargo, en referencia a pruebas futuras, este es un punto crítico para permitir que alguien refactorice el código. La refactorización es esencial para mantener un código limpio, pero si falta un buen conjunto de pruebas, no puede refactorizar de manera segura.
Aislamiento y segregación : la encapsulación y la modularización adecuada es un buen principio de diseño, pero debe ir más allá. A menudo encontrará que necesita usar una biblioteca, API o producto, que puede tener un futuro cuestionable. Tal vez debido a problemas de calidad, problemas de licencia o desarrollo continuo por parte de los autores. En estos casos, tome más tiempo para poner una capa entre usted y este código. Reduzca la API a lo que necesita para que el acoplamiento sea muy bajo para permitir un reemplazo más fácil en el futuro.