Миграции базы без простоя: порядок, который работает
Как сделать так, чтобы приложение работало с базой во время любых изменений схемы
502 и 504: кто именно не ответил и что чинить
Как диагностировать и устранять ошибки 502 и 504, чтобы восстановить работу серверной инфраструктуры
Пароли пользователей: как хранить и что проверить сегодня
Как определить уязвимости в хранении паролей и быстро исправить их в своём проекте
Кеширование по HTTP: заголовки, которые действительно работают
Срок годности и проверка — разные механизмы, и путают их чаще всего
Память течёт: как найти и чем мерить
Порядок действий, который доводит до причины, и порядок, который нет
Время в приложении: где оно ломается
Под одним словом прячутся момент, местное время и намерение на будущее. Путаница между ними двигает встречи и ломает суточные отчёты.
Сертификат истёк: почему это повторяется
Почему напоминание в календаре не спасает и чем его заменить
Браузерные тесты: что автоматизировать, а что оставить руками
Что проверять браузером, что оставить глазам и как пережить с этим полгода
Регулярное выражение, которое можно поддерживать
Выражение пишут один раз, а читают годами. Что делает его поддерживаемым и где регулярные выражения — неправильный инструмент.
Скрипт на shell, который не сломается
Shell по умолчанию продолжает работу после ошибки. Четыре строки в начале файла переводят скрипт из режима «молча делает не то» в режим «останавливается и говорит».
Медленный запрос в PostgreSQL: с чего начинать
Порядок действий, который дешевле наугад повешенного индекса: статистика, план выполнения, условие — и только потом индекс.
Образ, который собирается минуту вместо десяти
Время сборки определяется не объёмом работы, а тем, какая её часть выполняется заново. Одна перестановка строк даёт больше, чем подбор базового образа.
Доступность как инженерная задача, а не как галочка
Почему чек-листы и оверлеи не делают сайт доступным, где на самом деле живут барьеры и как найти их обычной клавиатурой
Оценка качества агента до релиза
Почему один успешный прогон агента ничего не доказывает и как выстроить оценку, которая до релиза покажет форму распределения и характерные отказы
Дежурство по агенту: порядок действий
Как дежурному по агенту отличить жёсткий отказ от мягкого, не тратить время на рестарт и откат и найти причину по трассе одного эпизода
Что агент не делает: список, который пишут заранее
Почему перечисление действий и запреты в инструкции не задают границу ответственности агента и как провести её снаружи списком из трёх колонок
Контракты данных: как перестать чинить отчёты
Чем настоящий контракт данных отличается от страницы в вики, из каких четырёх частей состоит и с какого отчёта начинать внедрение
Где проходит граница клиент — сервер
Почему границу между клиентом и сервером нужно проводить не по типам компонентов, а по моменту, когда становятся известны входные данные
Деплой без кластера: что осталось живым
Что кластер даёт на самом деле, почему однонодовый вариант — тупик и как выкатывать сервисы через релиз-каталоги, атомарный симлинк и systemd
Платформенная команда: когда её заводить
Как посчитать на ваших числах, когда платформенная команда окупается, почему стандарты и одиночный инфра-инженер не спасают, и что проверить перед стартом
Как мерить производительность, чтобы себе не соврать
Почему типовой прогон на стенде расходится с продакшеном и как собрать протокол замера: от решения через модель нагрузки до кривой вместо точки
TypeScript в рантайме: что типы не проверяют
Разбираемся, почему типы не защищают внешние данные, где проходит граница процесса и как проверять всё, что её пересекает
Как объяснить совету директоров затраты на ИИ
Почему обещанная окупаемость превращает защиту бюджета в допрос и как сменить форму заявки на измеримую цену одной задачи
Что мерить у модели кроме точности
Почему одна цифра не отражает качество языковой модели и как измерять калибровку и отдельные режимы отказа, чтобы понять, стало ли лучше
Алерты, на которые перестали смотреть
Почему дежурные рационально перестают читать канал алертов и почему подстройка порогов меняет частоту алертов, а не их применимость
Что писать в трассировку, а что нет
Как проектировать трассировку под дежурного: какие поля писать в спанах, а какие выносить в архив, чтобы трейс сразу показывал, где сломался запрос
Политика обновления зависимостей, которую соблюдают
Разбираемся, почему матрицы дедлайнов и дни обновлений не работают и как построить политику, в которой обновлять зависимости дешевле, чем откладывать
Что о вашей компании видно снаружи
Как бесплатно проверить, что о вашей компании видно постороннему: DNS, публичные журналы сертификатов и другие открытые источники, которые выдают забытые активы
Цепочка поставок: перечень, который кто-то читает
Почему перечень состава после генерации не читает никто и какие шаги превращают файл в индекс, отвечающий на запросы по всем сборкам
Git-приёмы, которые перестают быть страшными
Как на самом деле git хранит историю, почему опасные команды почти ничего не удаляют, когда работа теряется безвозвратно и как вернуть её через reflog
Терминал, который экономит часы, а не минуты
Почему быстрые эмуляторы и алиасы не экономят время, где теряются настоящие часы и как проверить это на своём рабочем дне