Design software with migration in mind

Always design your programs as a member of a whole family of programs, including those that are likely to succeed it.

Edsger W. Dijkstra