теория
Ты только что видел, как Иван поставил вопрос ребром: почему правка одной строчки — лотерея? Давай спокойно разложим это по полочкам. Начнём с того, что сложность бывает двух сортов, и путать их — дорого.
живёт в том деле, которым мы заняты: скидки новичкам, комиссии, сезонные цены, логистика скоропортящихся сыров. Её не выкинуть, не выкинув бизнес, — можно лишь аккуратно разложить по компонентам. — побочный продукт наших собственных решений: выгрузку, что лезет в чужие таблицы, домен никак не заказывал. Существенную — организуем. Случайную — просто не создаём.
Но что именно делает систему непредсказуемой? Тут прячется красивый и неочевидный ответ. Люди, разбиравшие катастрофы на АЭС и в авиадиспетчерских, заметили странное: дело не в размере системы и не в числе деталей, а в характере взаимодействий между ними.
Линейные взаимодействия предсказуемы: видно, кто от кого зависит, и у правки очевидные последствия. Механические часы — сотни деталей, а путь усилия от пружины к стрелке прослеживается. Потому часовщик их и не боится.
Сложные взаимодействия подкидывают сюрпризы двух сортов:
Общий корень обоих — : предположения, которые нигде не записаны и не видны, пока не сломаются. Инцидент первой недели — прямо из учебника: Reports знал схему Orders, и никто не знал, что он знает.
Отсюда вывод, который стоит повесить на стену: размер — не мера сложности. Пять тысяч компонентов с линейными связями проще пяти компонентов со сложными. Непредсказуемость создаётся не количеством кода, а числом неожиданных путей, по которым в нём разбегается знание.