Идеи и инсайты

Исследуем AI-first разработку, кодовые ограждения и архитектуру одноразовости.

Ваши спецификации Gherkin врут вам

Спецификации Gherkin расходятся с кодом, как только вы доверяете людям обновлять их вручную. Вот как автоматизировать проверки, которые заставляют feature files оставаться честными.

Ваши спецификации Gherkin врут вам. Не специально. Изначально они были точными. Но через шесть спринтов кто-то отрефакторил checkout flow и забыл обновить шаг…

Ваш компилятор проверяет синтаксис. Ваши тесты должны проверять архитектуру.

Большинство команд документирует правила архитектуры в вики. Вот как записать их в виде исполняемых тестов, которые ломают CI, когда ваш граф зависимостей уходит от задуманного.

Ваш набор тестов проверяет, что возвращает 42 при правильном входе. Он не проверяет, что может импортировать . Компилятор доволен и тем, и другим. Ваши…

Ваш доменный слой импортирует Postgres. Ваш CI всё равно.

Диаграммы чистой архитектуры отлично смотрятся на доске. Вот как заставить пайплайн сборки принудительно соблюдать направление зависимостей, чтобы доменный код не мог обращаться к инфраструктуре.

Кто-то в вашей команде только что импортировал в . PR компилируется. Тесты проходят. Код-ревью — триста строк, и никто не замечает. Три месяца спустя вы хотите…

Ваша архитектурная диаграмма уже ложь

Архитектурная документация гниёт в тот момент, когда вы её сохраняете. Вот как поддерживать её в актуальном состоянии с помощью диаграмм, генерируемых из кода, ADR и автоматизированных архитектурных тестов.

Каждая архитектурная диаграмма, которую я видел в вики, была неверной. Не катастрофически неверной. Просто тихо, постепенно неверной. Сервис с пометкой «Auth»…

Ваш цикл повторов предполагает, что первый запрос не удался. Скорее всего, это не так.

Таймаут или сбой не означают, что ваш API-запрос был потерян. Вот как ключи идемпотентности делают повторы безопасными, и как паттерн хранения на самом деле предотвращает дублирование.

Ваш сервис падает на полпути при обработке запроса . Клиент видит таймаут и повторяет запрос. Теперь у вас два списания. Клиент злится. База данных…

Блокировка, которая переживает ваш процесс: как на самом деле работают distributed lease

In-memory mutex исчезает при перезапуске сервера. Вот как distributed lease с fencing token и TTL предотвращают дублирование работы при сбоях, и где они всё ещё ломаются.

Ваш не переживает . Он не переживает OOM, deployment rollout и перезагрузку узла. В тот момент, когда процесс завершается, lock пропадает. Если этот lock…

Circuit breaker без goroutine, таймеров и фоновой нагрузки

Большинство библиотек circuit breaker порождают фоновые потоки для проверки восстановления. Они вам не нужны. Вот request-driven дизайн, который устраняет всю фоновую нагрузку без потери корректности.

Каждый production circuit breaker, который я рассматривал, рано или поздно порождает фоновый поток. Это может быть Go goroutine, Java или Rust tokio task.…

У вашего веб-сервиса есть путь корректного завершения. Это и есть баг.

Crash-only софт обрабатывает каждый сбой как крах, а каждый запуск — как восстановление. Для веб-сервисов это означает удаление логики завершения и проектирование состояния, которое переживёт kill -9.

У вашего веб-сервиса есть обработчик завершения. Он сбрасывает буферы, закрывает соединения, записывает чекпоинты. Вы тестировали его раз, может быть. В…

Как убить выжившего мутанта, когда вы не понимаете, что он изменил

Мутационное тестирование нашло выжившего, и вы понятия не имеете, что делает мутация. Вот пошаговый метод написания правильного теста без предварительного понимания мутанта.

Ваш отчёт о мутационном тестировании полон выживших, и хотя бы один из них для вас бессмысленен. Инструмент говорит, что он заменил на в строке 47, или…

Код аутентификации нуждается в 90% покрытии мутациями. Ваши строковые утилиты — нет.

Почему принудительное единое покрытие мутациями для всей кодовой базы — ошибка, и как установить пороговые значения для каждого модуля в соответствии с реальным риском.

Принудительное единое покрытие мутациями для всей кодовой базы — отличный способ заставить вашу команду ненавидеть тестирование. Запустите PIT или Stryker на…