Начальник говорит: Надо сделать поддержку устройства Х.
Я спрашиваю: А вы можете обещать, что нам не придётся подключать ДВА таких устройства?

И уже бывало, что даже если начальник обещает, то через пару лет оказывается, что это всё-таки нужно.

В этом смысле есть некоторое философское противоречие в архитектуре ПО. С одной стороны, система должна быть расширяемой. С другой стороны -- сделать абсолютно универсальную систему невозможно. Есть аппаратные и программные ограничения.

Поэтому при реализации новых фич я обычно не делаю полную поддержку расширяемости. Но я:
1. Думаю о том, где расширяемость может понадобиться.
2. Думаю о том, легко ли будет её сделать.
3. Если есть возможность сделать быстрый и дешёвый задел под расширение -- я его делаю.

Несмотря на это, у меня всё равно бывают места, которые захардкожены. Увы.