Сложность нельзя отменить…

... её можно только перенести.

Чем дольше я работаю над сложными системами, тем больше убеждаюсь в одной мысли.

Сложность похожа на воду. Она всегда найдет, куда перетечь.

Не написали документацию? Кажется, что стало проще. На самом деле сложность просто переехала в обсуждения команды и бесконечные уточнения.

Не написали тесты? Кажется, что сэкономили время. Но теперь за это придется платить во время регресса, сопровождения и исправления багов.

Отложили рефакторинг? Выиграли один спринт. Но проиграли следующие несколько месяцев разработки.

Разделили монолит на микросервисы? Упростили отдельные компоненты, но сделали сложнее их взаимодействие.

Объединили несколько сервисов в один? Упростили инфраструктуру, но усложнили сам код.

Именно поэтому мне кажется опасной фраза: «Давайте сделаем проще».

Проще — для кого? Для разработчика? Для тестировщика? Для бизнеса? Для сопровождения? Для команды, которая придет в проект через год?

В инженерии почти не бывает бесплатных упрощений. Если где-то стало проще, почти всегда стоит спросить себя, где стало сложнее.

Наверное, именно в этом и заключается одна из главных задач инженера. Не победить сложность — это невозможно. А осознанно выбрать, где за нее придется платить.

Хорошая архитектура, качественная документация, автоматические тесты и понятный код не делают систему простой. Они помогают перенести сложность туда, где ее цена минимальна.

И чем больше у меня опыта, тем реже я задаю вопрос: «Как сделать проще?»

И тем чаще спрашиваю: «Для кого станет проще?»

А как считаете вы? Действительно ли сложность нельзя устранить, а можно только перераспределить? Или вам встречались решения, которые делали систему проще без скрытой цены?

Сложность нельзя отменить… | Сетка — социальная сеть от hh.ru