> Always design for extensibility. Otherwise you will eventually bury yourself in a tangled source tree full of horrible hacks because you didn't think ahead.
Actually, no. Don't do this. It's a far too common problem of programmers to over-generalize and over-abstract. Don't design in any more extensibility than you will need. It is a waste of time and effort, and you will instead get buried in a abstractions that you do not actually need and that only bloet your code and make it harder to follow.