Tem que cuidar com os dois extremos, nem código ruim demais nem over engineering.

Acredito que desde dia 0 tem de ser escrito um código extensível, não necessariamente você deva prever todas as features possíveis, mas sim seguir bons princípios para que possa ser incrementado quando necessário.