154 тысячи строк PHP и 8 тестов на всю систему. Деплой руками, код в мастер напрямую, ни требований, ни описанной архитектуры, ни документации. В таком виде я принял проект девять месяцев назад. Ниже — порядок, в котором я его вытаскивал. Он оказался не тем, который я придумал бы заранее. Сначала — тушить. Первые месяцы никаких процессов вообще. Горела расчётная логика и горела сама разработка. Тесты и ревью посреди пожара не приживаются — они читаются как саботаж: «у нас прод лежит, а ты про покрытие». Потом — деплой и тесты. Не потому что «так правильно», а потому что впервые появились свободные руки. Это единственная причина, которую принимает бизнес, и она же единственная честная. Пайплайн, гонявший восемь тестов на 154 тысячи строк, выглядел смешно. Но добавить в него девятый стало дешевле, чем не добавить. Потом — ревью. Продавил. CI и тесты не стоят команде ничего — они просто появляются. Ревью стоит разработчику времени сегодня ради выигрыша, который наступит не сегодня. Поэтому оно вводится через объяснение зачем, а не через распоряжение. И только потом — ядро. Расчёт остатков и списаний: пять с половиной месяцев, 373 файла. Логика была размазана процедурным кодом по всей системе — марка, накладная, акт, чек, разлив. Ни одно движение объёма нигде не фиксировалось. Склад врал, а проверить, где именно, было нельзя: слишком много связей, и ни одна не оставляла следа. Собрали в агрегат. Движения объёмов стали событиями, появилась история. Склад перестал врать — но ценность не в этом. Ценность в том, что теперь видно, почему там именно это число. Отдельно отмечу: переписывать ядро я пошёл через две недели после того, как заработало ревью. Не раньше. Переписывать ядро без тестов и ревью — это не тушение пожара, это второй пожар. И параллельно — требования. Обычный ответ на «у нас нет документации» — завести вики. Не работает никогда: написание документа это шаг, который можно пропустить, а значит его пропустят. Он проигрывает дедлайну и не ломает сборку. Всё знание жило в головах и в самом коде — то есть нигде: код был сломан, и спросить у него «как должно быть» нельзя. Поэтому документацию мы встроили в контракт. Требования лежат в корне репозитория, а не в вики: границы слоёв, правила, три уровня тестов, соглашения по миграциям и ошибкам. Один файл читает и новый разработчик на онбординге, и LLM как контекст. Разойтись с кодом он не может — приезжает тем же PR. А базовые абстракции обязаны назвать свой документ: в интерфейсе объявлен метод, возвращающий ссылку на документацию. Не реализовал — не собралось. Для нового кода ссылка обязательна, неописанное легаси помечено явной заглушкой. И вот эти заглушки — не стыд, а главная ценность: честный счётчик долга вместо «вроде что-то где-то описано». Что в итоге. 8 тестов → 1415. 217 PR через ревью. И тесты пишет команда, а не один человек — это важнее самой цифры покрытия. Пока тесты пишет только тимлид, это не процесс, а хобби тимлида. Баг в легаси: полдня воспроизвести, час починить, через месяц он возвращается. Баг в новом коде — разбитом по слоям, покрытом тестами, с требованием, от которого можно оттолкнуться — падает точечно, чинится вместе с фиксирующим тестом и больше не повторяется. Документация не должна быть дисциплиной: дисциплина кончается в первый тяжёлый спринт. Она должна быть типом.
Разработчик/ Тех лид
· 19.08 · ред.резюме
Senior/Lead Backend Developer · PHP/Laravel + Go
навыки, опыт и другие подробности — на hh.ru
0 комментов