Всем привет! Давно крутится одна мысль: мы очень любим усложнять себе жизнь и называть это профессионализмом. Я не раз ловил себя на этом - вроде стараешься сделать "как правильно", а в итоге просто делаешь слишком сложно.
Речь, конечно, про оверинжиниринг.
Самый опасный момент - это чистый репозиторий. Нет ни дедлайнов, ни легаси, ни ограничений. Кажется, что вот сейчас-то ты наконец сделаешь идеальную систему. И именно в этот момент всё обычно идёт не туда.
Ты хотел просто проверить идею, но вместо этого начинаешь думать наперёд:
А вдруг завтра придет миллион пользователей? Нам нужен нест, причем сразу с микросервисами. Так, здесь будет сервис уведомлений, тут - аутентификация через отдельный инстанс, а общаться они будут через RabbitMQ. И обязательно gRPC, потому что JSON - это слишком медленно для нашего (несуществующего) трафика
И вот ты уже не продукт делаешь, а строишь архитектуру ради архитектуры. Самое коварное - это ощущается как полезная работа. Ты не залипаешь в прокрастинацию, ты инженеришь. Только вот это часто способ не сталкиваться с главным вопросом: а нужен ли вообще кому-то твой продукт.
Особенно часто этот капкан захлопывается, когда ты единственный разработчик на проекте или полностью отвечаешь за всё направление. В этот момент тебя некому остановить. Нет тимлида, который даст по рукам за лишнюю абстракцию, и нет коллег, которые спросят: "А зачем нам тут gRPC, если у нас десять пользователей?".
В итоге вместо проверки гипотез начинаются сложные решения: распределённые базы, продуманные пайплайны, куча интерфейсов. Большая часть времени уходит на обвязку, а не на саму ценность. Во многом это привычки из больших компаний, где такие подходы действительно решают проблемы масштаба и коммуникации сотен людей. Но когда ты один или у тебя маленький проект - это превращается в лишнюю сложность и постоянную боль.
В какой-то момент ловишь себя на том, что пишешь "фреймворк внутри проекта", продумываешь всё на годы вперёд и тратишь кучу энергии на эстетически правильный код, хотя задача была куда проще - сделать что-то, что реально работает и кому-то нужно.
По сути, оверинжиниринг - это такая дорогая форма безделья. Мы решаем задачи будущего, чтобы не сталкиваться с проблемами настоящего. Но будущее наступает только для тех продуктов, которые выжили в настоящем. А выживают обычно самые простые и адаптивные решения.



