Ну, тут не нужно архитектуру и фичи смешивать. По фичам можно TDD применять. Типа есть задача - написать конвертер одного формата в другой. Вот тут можно сначала написать код, а потом уже порефакторить и получить хорошую архитектуру.
А так я верю только в эволюционирующую архитектуру, а не "ща запилю удобный интерфейс для создания объектов в игре" который с одного раза не осилить. Мне кажется, что надо дизайнить как можно меньше, а потом уже рефакторить, если что-то реально нужно. А то больно видеть, когда люди забывают про YAGNI и KISS и начинают писать всякие MetaProxyFactory, потому что "абстрактно" и "а вдруг кому-то понадобится lazy-evaluation/кастомные коллбеки/итераторы"