В начале пути мы думаем, что баг — это когда код упал. Пропущенная точка с запятой, неверный синтаксис или обращение к несуществующей переменной.
Но с опытом приходит понимание: настоящий баг — это не поломка кода, а расхождение моделей. Это момент, когда ожидания системы, разработчика и бизнеса разъезжаются в разные стороны.
Код — штука прямолинейная. Он всегда работает ровно так, как его написали. Ему плевать на ваши намерения. Баг возникает там, где написанное перестает соответствовать реальности.
Самое паршивое, что такой баг может не сопровождаться красным текстом в консоли или алармами в мониторинге. Все может отрабатывать идеально чисто, но результат будет неверным.
Тихая деградация логики
Возьмем классику: подкапотка должна вернуть
username в ответе API. Вместо этого из-за кривого условия бэкэнд отдает пустоту (null). Фронтенд получает данные, статус-код — 200, ошибок нет. Но юзер видит пустое место вместо своего имени. Это явный баг, хотя система считает, что всё в порядке.Или пример с бизнес-логикой: скидка на 10-й заказ. Если разработчик ошибся в расчетах и включил текущий, еще не оплаченный заказ в счетчик, клиент получит бонус уже на девятом шаге. С точки зрения кода — это просто математика. С точки зрения бизнеса — это баг, который высасывает бюджет.
Инженерное проектирование ошибок
Мощный инженер не ждет, пока система упадет сама. Он предусматривает точки рассинхрона и закладывает программный выброс ошибок.
Если на этапе выполнения вы понимаете, что логика не сходится с ожидаемым состоянием, выполнение нужно прерывать принудительно. Вы явно проверяете инварианты: «Если здесь должен быть юзер, а его нет — стоп». Записывается лог, выбрасывается исключение, и мы получаем контролируемый упавший процесс вместо «молчаливого» вранья системы.
Чем меньше вы доверяете неявным состояниям, тем меньше багов доедет до продакшна. Баг — это всегда вопрос неоправданных ожиданий. Ваша задача — сделать так, чтобы реальность кода и реальность бизнеса совпадали в каждой точке.
Если что-то всё ещё звучит запутанно — пиши вопросы в комментах, я обязательно отвечу. А если всё разложилось по полочкам — ставь 🔥, так я пойму, что пост был полезен
10МДК
