Стандарты проектирования
Канбан доска


Канбан доска

Назначение

Канбан-доска — это представление набора объектов, распределённых по колонкам, каждая из которых соответствует этапу процесса. Объект отображается карточкой и перемещается между колонками по мере прохождения этапов. Доска решает две задачи одновременно: даёт обзор распределения объектов по этапам «одним взглядом» и позволяет менять этап объекта прямым действием — перетаскиванием карточки.

Канбан-доска — элемент, характерный именно для процессных приложений. В отличие от учётных систем, где основной задачей является хранение единой версии данных, процессные приложения управляют последовательностью действий, ролями и статусами. Доска визуализирует движение «от действия к результату» и потому не входит в базовый стандарт учётных систем.

Типовые сценарии применения — воронки продаж в CRM, доски задач в трекерах, отслеживание статусов документов в системах документооборота.

Критерии использования

Применимость канбан-доски проверяется в три шага. Порядок обязателен: каждый следующий шаг имеет смысл только при пройденном предыдущем.

Шаг 1. Обязательные условия

Канбан-доска применяется, только если все условия выполняются.

  1. Объект движется по конечному набору дискретных этапов.
  2. Этап — это изменяемый в ходе работы атрибут объекта, а не неизменная категория.
  3. Смена этапа — частое и значимое действие пользователя.

Если условия не выполняются, применяется таблица или реестр.

Шаг 2. Усиливающие признаки

Достаточно выполнения одного признака, чтобы канбан-доска стала основным представлением раздела.

  • Важно видеть распределение объектов по этапам «одним взглядом» — где скопление, где затор.
  • По колонкам осмысленны агрегаты — счётчик объектов и сумма по числовому атрибуту.
  • Количество объектов в каждом этапе умеренное (десятки, не тысячи).
  • Работа коллективная, и важно видеть ответственного по каждому объекту.

Если не выполняется ни один признак, канбан-доска допустима, но как парный режим к таблице, а не как основное представление раздела.

Шаг 3. Стоп-факторы

Любой из перечисленных факторов перевешивает результаты шагов 1 и 2.

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

Стандарты проектирования

Обязательные правила

  • Заголовок раздела используется вместо баннера для экономии полезного пространства.
  • Шапка содержит минимально необходимый набор фильтров и поле поиска.
  • Действия доски размещаются в правой части шапки в фиксированном порядке: обновление, настройка и расширенная фильтрация, переключение представления, основное действие добавления.
  • Кнопка быстрого добавления карточки не дублируется в каждой колонке: добавление вызывается по наведению на колонку или кнопкой добавления в шапке.
  • Цвет этапа выбирается из преднабора палитры и несёт статусную семантику.
  • Карточка строится на доработанном компоненте Q.Palette; по умолчанию выводится только основная информация.
  • Число колонок ограничивается читаемостью доски; при большом числе этапов процесс декомпозируется, а не растягивается по горизонтали.
  • Канбан-доска сопровождается парным табличным представлением того же набора данных.
  • По нажатию на карточку открывается новая вкладка с полным сценарием по объекту.
  • Заголовки колонок остаются закреплёнными при вертикальном скролле.

Настраиваемые параметры

Задаются в настройках доски

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

  • Счётчик карточек в колонке. Включается, когда количество объектов на этапе имеет смысл для команды. На этапах, где счётчик заведомо неинформативен, отключается, чтобы не засорять заголовок.
  • Агрегат по числовому атрибуту. Сумма или иное числовое значение по колонке. Настраивается вместе с выбором атрибута, по которому считается. Включается только там, где агрегат осмыслен — например, сумма сделок в воронке продаж.
  • WIP-лимит этапа. Ограничение количества карточек на этапе. Хранится на уровне доски именно потому, что это договорённость команды о пропускной способности, а не персональное предпочтение: если бы каждый задавал лимит себе, метрика потеряла бы смысл.
  • Состав слотов карточки, доступных для вывода. Определяет, какие атрибуты пользователь вправе вынести на карточку. Задаёт границу, внутри которой действует персональная настройка.

Сохраняются локально у пользователя

  • Состав и порядок атрибутов карточки. Пользователь выбирает, что видеть на карточке, в пределах набора, разрешённого настройками доски. По умолчанию выводится только основная информация.
  • Группировка по атрибуту. Выбранный атрибут группировки и структура групп. Поведение наследуется от стандарта группировки в таблицах, включая локальное хранение.
  • Состав расширенных фильтров. Какие фильтры пользователь вывел в расширенную панель, отмечая их галочками в списке доступных.
  • Сворачивание колонок и групп. Состояние сворачивания восстанавливается при следующем открытии доски.
  • Избранные группы. Группы, поднятые пользователем наверх списка.

Ограничения

  • Произвольные значения цвета этапа не допускаются — только преднабор палитры.
  • Превышение WIP-лимита не окрашивает колонку целиком: цвет колонки занят статусной семантикой этапа.
  • WIP-лимит не блокирует перенос карточки.
  • Мультивыбор карточек и массовые операции на доске не поддерживаются — это сценарий парного табличного представления.
  • Группировка по атрибуту на доске допускается только одноуровневая.
  • Карточка не раскрывается поверх доски модальным окном.

Состав и компоненты

Канбан-доску образуют вложенные уровни. Их состав зависит от режима: при включённой группировке появляются два дополнительных уровня, и контейнером карточек становится не колонка, а ячейка.

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

Доска

Корневой контейнер. Занимает основную рабочую область.

Состав

Обязательно:

  1. Шапка
  2. Область колонок

Опционально:

  1. Фильтр группировки

Поведение. Область колонок скроллируется по горизонтали. При подведении перетаскиваемой карточки к краю области выполняется автоскролл.

Состояния. Загрузка, пустая доска, нет результатов после фильтрации, ошибка загрузки.

Шапка доски (селектор доски, фильтры, поиск, блок действий)

Состав

Обязательно:

  1. Заголовок раздела
  2. Базовые фильтры
  3. Поле поиска
  4. Кнопка «Обновить»
  5. Кнопка «Добавить»

Опционально:

  1. Селектор доски или воронки
  2. Быстрые персональные фильтры-чипы («Мои», «Задачи моей команды»)

Поведение. Изменение любого фильтра перестраивает колонки и пересчитывает счётчики и агрегаты. Поиск выполняется по атрибутам, выведенным на карточку.

Состояния. Количество применённых расширенных фильтров отображается индикатором на кнопке фильтрации.

Колонка (этап)

Соответствует одному этапу процесса.

Состав. Обязательно:

  1. Заголовок этапа (статуса) с цветовой индикацией.

Опционально:

  1. Счётчик карточек
  2. Агрегат по числовому атрибуту (в примере — сумма)
  3. Контекстное меню колонки
  4. Элемент быстрого добавления
  5. WIP-лимит
  6. Сворачивание

Поведение. Список карточек скроллируется по вертикали. Заголовок остаётся закреплённым. В режиме без группировки колонка является зоной сброса карточки.

Состояния. Пустая, активная зона сброса, сброс запрещён, WIP-лимит достигнут, WIP-лимит превышен, свёрнутая.

Группа (swimlane)

Горизонтальное деление доски по значению выбранного атрибута.

Состав. Обязательно:

  1. Заголовок группы со значением атрибута и счётчиком
  2. Кнопка сворачивания, ряд ячеек

Опционально:

  1. Аватар или иконка
  2. Уточняющая подпись
  3. Агрегат по группе

Поведение. Группировка настраивается той же панелью, что и группировка в таблицах. Состояние сворачивания сохраняется локально у пользователя. Избранные группы располагаются вверху списка.

Группа «Без значения» собирает объекты с незаполненным атрибутом группировки, всегда располагается последней и не принимает перетаскивание: очистить атрибут переносом карточки нельзя.

Состояния. Развёрнута, свёрнута, пустая.

Ячейка

Пересечение колонки и группы. Существует только при включённой группировке. Является реальным контейнером карточек и зоной сброса.

Состояния. Пустая, активная зона сброса, сброс запрещён.

Карточка

Переиспользуемый компонент Q.Palette, доработанный под нужды канбан-доски. Отображает объект в минимальном объёме, достаточном для принятия решения о перемещении.

Состав по слотам, сверху вниз.

  1. Строка метаданных — иконка типа и метка времени.
  2. Заголовок — наименование объекта. Обязателен.
  3. Одна–две строки ключевых атрибутов, например контакт и организация.
  4. Выделенное числовое значение, например сумма.
  5. Чипы и теги.
  6. Нижняя строка — счётчики связанных сущностей, аватар и имя ответственного.
  7. Меню карточки. Обязательно.

Обязательный минимум — заголовок и меню. Остальные слоты включаются настройками доски.

Поведение. Наведение подсвечивает карточку. Нажатие открывает новую вкладку с полным сценарием по объекту — карточка раскрывается как отдельный сценарий в соответствии со стандартом вкладок технологических платформ.

Состояния. Обычная, наведение, перетаскиваемая, место-заполнитель на исходной позиции, содержит просроченное значение, заблокирована для перемещения.

Сквозные сценарии

Перемещение карточки

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

Изменение обоих атрибутов выполняется как одна операция. Отклонение на стороне сервера откатывает оба изменения и возвращает карточку на исходную позицию.

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

Наведение перетаскиваемой карточки на заголовок свёрнутой группы разворачивает её с задержкой, после чего группа принимает сброс.

Валидация перехода

Валидация выполняется в два этапа и в фиксированном порядке.

  1. Допустимость перехода по этапу согласно логике процесса.
  2. Допустимость смены атрибута группировки, как правило — по правам пользователя.

Недопустимый переход блокируется. Зона сброса подсвечивается как запрещённая, сообщение называет конкретную причину отказа: пользователь должен понимать, какое из двух изменений отклонено.

При незаполненных обязательных данных система запрашивает их перед сменой этапа.

WIP-лимиты

WIP-лимит ограничивает количество карточек на этапе. Задаётся на уровне колонки в настройках доски и действует на всех пользователей.

Лимит предупреждает, но не блокирует перенос. Это принципиальное разграничение: блокирующая валидация уже используется для нарушений логики процесса, и приравнивать к ней командную договорённость нельзя. Разграничение опирается на стандарт цветовой индикации — красный означает запрет, оранжевый означает предупреждение.

Индикация. Счётчик колонки принимает формат n / лимит и меняет состояние:

УсловиеСостояние чипа
n < лимитНейтральное
n = лимитWarning
n > лимитDanger

Состояние warning наступает при достижении лимита, а не при превышении: смысл индикации — предупредить заранее.

Если лимит не задан, чип отображает обычный счётчик карточек. Цвет колонки при любом состоянии лимита не меняется.

Перенос с превышением. Выполняется, сопровождается warning-тостом с указанием этапа и значения лимита. Блокирующий диалог не используется.

Взаимодействие с фильтрами. Счётчик колонки отражает отфильтрованный набор, а лимит относится к полному. При активном фильтре или поиске индикация лимита подавляется: чип возвращается к обычному счётчику, рядом отображается подсказка о причине. Проверка при переносе продолжает выполняться по полному набору.

Где не задаётся. Лимит не предлагается для терминальных этапов и входного этапа-бэклога — они накапливают объекты по своей природе. Настройка помечается подсказкой, но не блокируется: модель процесса у продуктов различается.

Ограничения текущей версии. Лимит на ячейку и лимит на группу целиком не поддерживаются.

Группировка по атрибуту

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

Ограничение канбан-доски: допускается только один уровень группировки. Двухуровневая иерархия в сочетании с колонками образует трёхмерную сетку и нечитаема.

Фильтрация

Изначально пользователю доступен ограниченный набор фильтров — только самое необходимое. Набор одинаков для канбан-доски и парного табличного представления.

Кнопка фильтрации в правой части шапки раскрывает расширенную панель со всеми доступными фильтрами. Состав расширенной панели настраивается: внутри неё доступен выбор фильтров, которые будут выводиться в расширенном режиме.

Переключение представления

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

Табличное представление — парный режим к доске, применяется для массовых операций, сортировки и плотного просмотра данных.

Открытие карточки

По нажатию на карточку открывается новая вкладка с полным сценарием работы по объекту. Карточка раскрывается не поверх доски, а как отдельный сценарий.

Состояния доски

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

Загрузка

Отображаются скелетоны колонок с заголовками. Каркас доски показывается сразу — пользователь видит структуру этапов до того, как загрузятся карточки.

Пустая доска

Данных нет вообще, фильтры не применены. Иллюстрация, пояснение и основное действие добавления в центре рабочей области. Колонки при этом отображаются: пользователь должен видеть, в какой процесс он попал.

Нет результатов после фильтрации

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

Ошибка загрузки

Сообщение с действием повторной загрузки.

Состояния колонки и группы

Пустая колонка

Пустая область, принимающая сброс карточки. Заголовок с цветовой индикацией и счётчиком «0» сохраняется — колонка остаётся видимой, чтобы пользователь понимал полный состав этапов процесса и мог перенести в неё карточку.

Пустая группа

Отображается свёрнутым заголовком со счётчиком «0». В отличие от колонки, разворачивать пустую группу не нужно: перечень групп определяется данными, а не моделью процесса.

Цветовая индикация

Применяется стандарт цветовой индикации Q.Palette со следующими уточнениями для канбан-доски.

  • Цвет этапа задаётся из заранее определённого набора цветов палитры. Произвольные значения не допускаются.
  • Цвет этапа несёт статусную семантику — обозначает этап, а не служит украшением.
  • Цвет этапа не используется для отображения других состояний колонки, включая превышение WIP-лимита.
  • Просроченные даты и превышенные значения на карточке выделяются красным — по общему правилу выделения текста цветом.

Чек-лист проверки

  • Пройдены все три шага критериев использования, стоп-факторы отсутствуют.
  • Число колонок не превышает 7–9.
  • Каждой доске соответствует парное табличное представление.
  • Заголовок раздела используется вместо баннера.
  • Действия в шапке размещены в стандартном порядке.
  • Кнопка добавления не продублирована в колонках.
  • Цвета этапов взяты из преднабора палитры.
  • На карточке по умолчанию выведен только минимально необходимый набор атрибутов.
  • Недопустимые переходы блокируются с указанием причины.
  • WIP-лимит предупреждает, но не блокирует перенос.
  • При активном фильтре индикация WIP-лимита подавлена.
  • Определены пустые состояния доски, колонки и результата фильтрации.
  • Нажатие на карточку открывает новую вкладку, а не модальное окно.