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