Kanban и Scrum на одной доске: как устроен syBoard

syBoard — приложение для командной работы, где одна доска работает как Kanban или как Scrum. Как это устроено и на чём сделано.
Серия «Свои инструменты: заметки о разработке», выпуск 2 из 6
syBoard — моё приложение для командной работы над проектами. В нём одна и та же доска может работать в режиме Kanban или Scrum. Задачи при переключении не переезжают в другой проект и не теряют историю.
Зачем два режима
Kanban удобен для непрерывного потока. Scrum добавляет спринт, зафиксированный план и отчёт по завершению. На практике способ работы может меняться даже внутри одной команды. Если для каждого режима нужен отдельный сервис, вместе с задачами приходится переносить комментарии, вложения и историю изменений.
В syBoard модель задачи общая. При смене режима меняются правила доски, но сама карточка остаётся на месте. Ей не приходится узнавать о новом процессе из письма в понедельник утром.
Kanban
Колонки можно переименовывать и переставлять. Карточки двигаются между колонками и внутри них. У задачи есть приоритет, срок, исполнители, метки, вложения и комментарии. Номер складывается из префикса проекта и счётчика, поэтому ссылку на задачу удобно передать вне доски.
Scrum
В бэклоге лежат задачи без спринта; их можно группировать по эпикам. При запуске спринта система фиксирует состав. После завершения незакрытые задачи возвращаются в бэклог или переносятся в другой спринт.
Завершённый спринт доступен только для чтения. Это правило проверяется не только в интерфейсе, но и на сервере. В отчёте остаются план и факт, burndown, переносы и изменения состава.
Время и отчёты
Время учитывается по карточкам с шагом в полчаса. Таймшит собирает записи по дням и участникам. Отчёты проекта показывают velocity, затраченные часы и cycle time; данные можно выгрузить в Excel и PDF.
Изменения приходят участникам сразу через WebSocket, без ручного обновления страницы.
Из чего сделан
Сервер написан на Django 5.2 LTS, Django REST Framework и Channels. Интерфейс — React 19 и TypeScript. Данные хранятся в PostgreSQL, для событий используется Redis. Проверки написаны на pytest, Vitest и Playwright. GitHub Actions не запускает выкладку, пока тесты не пройдут.
Статус
Проект выпущен в production и доступен на syboard.ru. Разрабатываю и развиваю его самостоятельно.
Следующий выпуск: Attest0.