Дисклеймер: я делаю бесплатную онлайн-доску для ретроспектив Retrospectrix и насмотрелся на ретро в разных командах. Первая половина статьи — про процесс: тайминг, форматы, правила. Вторая — про то, как устроен сам инструмент: стек, где хостится и что происходит с данными. Ссылка на проект в статье одна, выше.
Почему ретро умирают
Симптомы одни и те же в любой команде:
Ретро превращается в жалобную книгу. Все выговорились, всем полегчало, ничего не поменялось. Через три месяца команда решает, что ретро — пустая трата времени, и перестаёт их проводить.
Говорят два человека. Тимлид и самый громкий разработчик. Остальные ждут, когда можно вернуться к работе.
Один пункт съедает всё время. Сорок минут спорили про флаки-тесты, остальные восемь карточек «перенесли на следующий раз». И так каждый раз.
Экшен-айтемы никто не записал. Или записал, но в никуда — через две недели никто не помнит, о чём договорились.
Всё это лечится не мотивацией, а структурой. Ниже — тайминг и правила, которые чаще всего спасают ретро.
Тайминг на 45 минут
Этап | Время | Что происходит |
|---|---|---|
Сбор карточек | 10 мин | Каждый пишет молча, никаких обсуждений |
Голосование | 5 мин | Лайки на чужие карточки, у каждого ограниченный запас голосов |
Обсуждение | 25 мин | Строго по убыванию голосов, максимум 5 минут на карточку |
Экшен-айтемы | 5 мин | У каждого пункта — ответственный и срок |
Два неочевидных момента.
Молчаливый сбор — принципиален. Как только первый человек озвучивает свою боль вслух, остальные начинают писать про то же самое. Десять минут тишины дают более честную картину, чем час свободной дискуссии.
Пять минут на карточку — жёсткий лимит. Есть старое правило: спор, который не решился за пять минут, обсуждением не решится вообще — участникам не хватает фактов. Такой спор надо не продолжать, а конвертировать в экшен-айтем: «Вася собирает статистику по флаки-тестам к четвергу».
Форматы: что писать в колонки и когда какой брать
Формат ретро — это просто набор колонок, которые задают вопросы команде. Разные вопросы вытаскивают разное. Вот четыре формата, которые я поддерживаю в инструменте, — с тем, что именно писать в каждую колонку.
Start / Stop / Continue
Три колонки, каждая требует не чувства, а решения:
Start (Начать) — практики, которых у нас пока нет и которые хотим попробовать в следующем спринте. «Начать писать ADR на архитектурные решения».
Stop (Прекратить) — то, что съедает время и ничего не возвращает. «Прекратить созвон-синк по понедельникам, он дублирует стендап».
Continue (Продолжить) — то, что сработало и тихо исчезнет, если этого никто не назовёт. «Продолжать парное ревью критичных PR».
Карточка изначально сформулирована как действие, поэтому встреча заканчивается списком задач, а не общим настроением. Дефолтный формат: подходит команде, которая делает ретро впервые, и спринту, в котором не было ни катастрофы, ни триумфа. Слабое место: колонка Stop набивается тем, что команде неподвластно — соседние отделы, политика компании, клиент. Такое — в отдельный список на эскалацию.
Mad / Sad / Glad
Формат спрашивает не как прошёл спринт, а как он ощущался:
Mad (Злит) — что вызывало злость: блокеры, невыполненные обещания, повторяющаяся боль. «Третий спринт подряд ждём доступ к стенду».
Sad (Огорчает) — разочарования: то, на что надеялись и что не случилось. «Думали выкатить фичу к демо, не успели».
Glad (Радует) — что искренне порадовало, пусть в мелочи. «Новичок сам закрыл первый баг без помощи».
Это отвечает на вопрос «что значит “с командой нехорошо”». Метрики могут быть здоровыми — velocity растёт, релизы в срок, — а люди выгорают, тихо раздражаются друг на друга, и ваш сильный инженер обновляет резюме. Ни один график velocity этого не покажет: выгорание и обида не попадают в трекер задач. Процессные форматы к этому слепы по устройству, потому что просят назвать проблему процесса, а проблема — не в процессе. Mad/Sad/Glad даёт легальный способ сказать «меня злит, что…» без выяснения отношений. Брать после аврала, провального релиза, реорганизации — или когда ретро стали подозрительно тихими и вежливыми. Читать карточки начинайте с Glad: если открыть встречу злостью, она из этого тона уже не выйдет. И лучше, чтобы вёл не руководитель — при нём люди редактируют себя.
4L: Liked / Learned / Lacked / Longed for
Четыре колонки, и главная ценность — в разделении двух последних:
Liked (Понравилось) — что принесло удовлетворение и стоит сохранить.
Learned (Узнали) — новое знание: техническое, продуктовое или друг о друге. «Оказалось, наша GC-пауза была из-за логгера».
Lacked (Не хватило) — конкретные пробелы: инструменты, доступы, люди, информация, время. «Не хватило тестового стенда с прод-данными».
Longed for (Хотелось бы) — желания за пределами досягаемости команды. «Хотелось бы внятной продуктовой стратегии».
Отсутствующий тестовый стенд — пробел, который закрывается за месяц. Желание внятной стратегии — нет. Разнесённые по колонкам, они перестают выглядеть одинаково решаемыми. Голосуйте только по Lacked — единственная колонка, где у команды есть рычаг, а карточки из Longed for относите тому, кто может по ним действовать. Формат для закрытия длинного спринта или этапа проекта, и для команд, осваивающих новое. Минус: четыре колонки на телефоне — это одна колонка за раз.
Sailboat
Метафора: команда — лодка.
Wind (Ветер) — что двигает вперёд и стоит усилить.
Anchors (Якоря) — что тормозит прямо сейчас.
Rocks (Рифы) — риски впереди, на которые ещё не напоролись. «Сертификат истекает в ноябре, а владельца процесса нет».
Island (Остров) — цель: куда мы на самом деле плывём.
Единственный распространённый формат с колонкой для того, что ещё не сломалось, — поэтому к нему возвращаются. Остров заполняйте первым и вместе: если команда напишет три разные цели — остановите ретро, настоящая проблема уже найдена. Брать в начале квартала или большого релиза. Ловушка: спор «это якорь или риф?» — десять секунд на такое и дальше.
Смена формата раз в несколько месяцев сама по себе оживляет ретро — люди начинают думать в непривычных категориях.
Правила, которые держат ретро живым
Вегас-правило. Всё сказанное на ретро остаётся на ретро. Один пересказ менеджеру — и следующие полгода на ретро будут говорить только про погоду.
Ищем причину, не виноватого. «Почему деплой упал» вместо «кто уронил деплой». Как только появляется виноватый, честность заканчивается.
Максимум три экшен-айтема. Список из десяти пунктов — это ноль выполненных. Три пункта с ответственными — это три выполненных.
Начинайте со статуса прошлых экшен-айтемов. Единственное, что доказывает команде, что ретро — не ритуал.
Как устроен инструмент
Для офисной команды стикеры на стене — до сих пор лучший инструмент. Для распределённой нужна общая доска. Я устал от «зарегистрируйтесь, подтвердите почту, создайте воркспейс» ради встречи на 45 минут и сделал свою. Ниже — что под капотом, потому что для многих команд вопрос «где лежат наши откровения про менеджера» важнее любых фич.
Что умеет. Доска создаётся в один клик и раздаётся ссылкой; участники заходят без регистрации и почты. При создании выбирается формат — классические три колонки («хорошо / не получилось / улучшить») или один из четырёх выше; колонки подстраиваются под формат. Карточки, лайки/дизлайки, комментарии, картинки, drag&drop между колонками — всё обновляется у всех в реальном времени. Режим обсуждения: ведущий нажимает «Обсудить», у всей команды подсвечивается одна и та же карточка, повестка отсортирована по голосам, на карточку идёт таймер 5 минут, пройденные помечаются галочкой. Пространства объединяют серию ретро одной команды и могут закрываться паролем. Итоги выгружаются в Markdown или JSON — есть read-only API по коду доски, чтобы скормить ретро AI-агенту или боту.
Стек. SvelteKit на Svelte 5 (runes) + Tailwind 4 на фронте; Node.js с Socket.IO для реального времени; PostgreSQL 16 через Drizzle ORM; картинки жмёт Sharp в WebP до 1200px. Собирается в Docker, деплой — GitHub Actions по SSH: npm test → сборка → e2e-прогон на Playwright против настоящего Postgres гейтит деплой. Метрики уходят в Netdata по StatsD. Проект открытый, исходники на GitHub (ссылка есть на сайте).
Где данные и что с ними происходит.
Хостинг. Один VPS в Selectel, дата-центр в Санкт-Петербурге. Никаких зарубежных облаков и CDN — шрифты и статика отдаются с того же сервера.
Шифрование. Тексты карточек и комментариев шифруются при хранении AES-256-GCM, ключ — в переменной окружения, в базе лежит шифротекст. Дамп базы без ключа бесполезен. Между браузером и сервером — TLS с HSTS.
Доступ. Доска живёт по неугадываемой ссылке — 21 символ nanoid, около 126 бит энтропии. Она нигде не публикуется, поисковикам доски и пространства закрыты заголовком noindex и robots.txt. Кто знает ссылку — тот на доске: относитесь к ней как к ключу. У создателя есть отдельная админ-ссылка для таймера, обсуждения и удаления.
Что не собирается. Аккаунтов нет, почты нет, рекламных и сквозных трекеров нет. Одна техническая сессионная кука для подсчёта уникальных визитов; язык, тема и имя участника живут в localStorage браузера. Аналитика — анонимные счётчики «сколько зашло, из какого класса источников».
Удаление. Создатель удаляет доску — вместе с ней каскадом уходят карточки, комментарии, голоса и картинки. Картинки, которые не привязались ни к одной карточке, чистятся автоматически через сутки.
Self-hosting. Если и этого мало — код открытый, поднимается одним
docker compose upс Postgres в комплекте; переменные окружения описаны в репозитории. Можно держать ретро полностью внутри своего периметра.Исходный код открыт. Вот репозиторий.
Чего пока нет и что честно стоит знать: нет экшен-айтемов как сущности (ответственный + срок) — записывать их приходится карточкой или комментарием, это следующая большая фича; нет SSO и ролей — модель доступа намеренно плоская, «ссылка = доступ»; английская версия есть, но живёт на тех же адресах.
Бесплатно, без лимитов на участников. Если пригодится — буду рад обратной связи в комментариях. А какие правила и форматы спасают ретро в ваших командах?

