ВОРКШОП · 90 МИНУТ · VANILITIK5

Цифровой двойник команды
в Vanilitik

От выгрузки трекера к решению за полтора часа: почему SQL не отвечает на вопросы о потоке, зачем причинное множество и Datalog, и четыре задания на десяти командах с заложенными историями.

4 задания · 70 минут рукамианалитики · тимлиды · скрам-мастера · владельцы продукта10 команд · эталонный поток
workshop.vanilitik.areals.ru · vanilitik5.areals.ru · данные не покидают браузер · → дальше, ? помощь
Зачем этот воркшоп

Четыре вопроса, на которые дашборд не отвечает

Таблица KPI показывает «сколько». Двойник отвечает «где», «почему» и «откуда знаешь».

1Что происходит

Lead и cycle time, CFD, WIP, пропускная — по вашим статусам, выведенным из данных, а не по шаблону.

2Где теряем

Очереди между этапами почти всегда больше работы. Назвать узкое место статусом, а не ощущением.

3Почему

Журнал команды рядом с метриками: импакт «до → после», изломы трендов, события без эффекта.

4Откуда знаешь

Каждая цифра — проекция над событиями и раскручивается назад до строки выгрузки. Datalog задаёт свой вопрос.

типичная эффективность потока
30–40%
остальное время задача ждёт
возвратов с тестирования
5–15%
фон; больше — сигнал о качестве
WIP на человека без потерь
≤ 3
дальше переключения съедают время
!
Результат дня: у каждой группы одно узкое место, подтверждённое тремя экранами, его объяснение из журнала, один сохранённый запрос и действие на следующий спринт.
workshop.vanilitik.areals.ru · воркшоп «Цифровой двойник команды»
ЧАСТЬ 1 · 10 МИНУТ

Почему SQL
не решает

и что такое причинное множество, проекции и Datalog

Теория · 1 из 5

Трекер хранит состояние. Вопросы — про движение

В таблице задач лежит «статус сейчас». Всё, что нам нужно, лежит между строками истории.

  • Перезапись. UPDATE стирает прошлое значение. История живёт в отдельной таблице изменений, упорядоченной по времени.
  • Время врёт. Два узла, часы, правки задним числом: «предыдущий статус» восстанавливается оконной функцией и иногда неверно.
  • Каждый вопрос — новая таблица. «Текущий статус», «возвраты», «время в статусе»: CTE, временная таблица, представление. Потом ещё одна поверх.
  • Причина не хранится. Почему задача оказалась в «Разработке» второй раз? В SQL это вывод из порядка строк, не факт.
  • Откуда цифра. Дашборд показывает 23 дня. Из каких строк? Через три CTE никто не ответит.

Таблица состояния: UPDATE

BET-1037
status = Открытаstatus = Разработкаstatus = Тестирование

значение перезаписано: откуда взялось новое и что было раньше — потеряно

Журнал событий: только добавление

#a1Открыта ← создание
#a2Разработка ← #a1
#a3Тестирование ← #a2

ничего не стирается; каждая запись цитирует причину

-- «задачи, вернувшиеся из тестирования в разработку»
WITH s AS (SELECT task, status, at,
  LAG(status) OVER (PARTITION BY task ORDER BY at) AS prev
  FROM status_events)
SELECT DISTINCT task FROM s WHERE prev='Тестирование' AND status='Разработка';

промежуточная таблица s нужна только потому, что «предыдущий статус» не хранится

workshop.vanilitik.areals.ru · часть 1 · теория
Теория · 2 из 5

Событие с причиной: шесть полей и ничего больше

Вместо строки, которую можно перезаписать, — неизменяемая запись, которая знает, из чего она следует.

{ $id     "#7976f100"      ; хэш содержимого
  $base   "BET-1037"       ; к кому относится
  $type   "status"         ; что это
  $value  "Разработка"     ; значение
  $cause  ["#658f17d2"]    ; из чего следует
  $actor  "Лебедев И." }
#a1ОткрытаЛебедев · причина: индивид #658f17d2Готова к разработкеЛебедев · причина: #a1 #7976f100РазработкаЛебедев · причина: #658f17d2 $cause$cause стрелка смотрит в прошлое: порядок задан причинами, а не часами

Ничего не удаляется

Новое значение — новое событие с причиной на старое. «Текущее» = событие, у которого нет следующего. История всегда рядом.

Порядок — по причинам, не по часам

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

Схема — тоже события

Статусы, их категории, workflow по типам записаны в тот же граф. Правка схемы — событие с автором, а не перезапись конфига.

workshop.vanilitik.areals.ru · часть 1 · теория
Теория · 3 из 5 · анимация

Причинное множество растёт: каждое событие цитирует причину

Нажмите «следующее событие» или →
АТОМ ТЕКУЩЕГО СОБЫТИЯ
$id—$base—$type—$value—$cause—$actor—
появится по стрелке →
событий
0
причин
0
конфликтов
0
созданаработаожиданиезакрытажурнал
workshop.vanilitik.areals.ru · часть 1 · теория
Теория · 4 из 5 · анимация

Срез и проекции: цифры зависят от видимых событий

WIP на срезе
—
Закрыто
—

Текущий статус на срезе

CFD до среза

очередь до работыв работеждётзакрыто
workshop.vanilitik.areals.ru · часть 1 · теория · проекция считается заново от любого среза, события не меняются
Теория · 5 из 5

Datalog: вопрос — отношение, а не таблица-результат

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

Текущее значение

[?e :$base ?task] [?e :$type "status"]
[?e :$value ?s] [?e :$id ?id]
(not [?n :$cause ?id]
     [?n :$type "status"])

Событие, у которого нет следующего. Одна строка вместо оконной функции в CTE.

Переход A → B

[?e :$value "Разработка"]
[?e :$cause ?c]
[?p :$id ?c]
[?p :$value "Тестирование"]

Причина хранится явно: «вернулась из тестирования» читается, а не восстанавливается по часам.

Время в статусе

[?e :$date ?d1] [?e :$id ?id]
[?n :$cause ?id] [?n :$date ?d2]
[(- ?d2 ?d1) ?ms]
[(days ?ms) ?dn] [(> ?dn 5)]

Дата следующего минус дата этого. Функции с результатом, предикаты, рекурсия (ancestor …).

λ
Любой из трёх блоков можно обернуть в правило [(returned ?t ?from ?to) …] и вызывать где угодно, в том числе рекурсивно. В SQL это представление или временная таблица, здесь — строка в запросе. Шпаргалка с 12 рецептами — на сайте воркшопа.
workshop.vanilitik.areals.ru · часть 1 · теория
Сравнение

Одна задача, два языка: «кто вернулся из тестирования»

SQL

WITH s AS (
  SELECT task, status, at,
         LAG(status) OVER (PARTITION BY task
                           ORDER BY at) AS prev
  FROM status_events)
SELECT DISTINCT task FROM s
WHERE prev = 'Тестирование'
  AND status = 'Разработка';

порядок — по времени; промежуточная таблица; новый вопрос — новая таблица

Datalog в Vanilitik

[:find ?task
 :where [?e :$type "status"] [?e :$value "Разработка"]
        [?e :$base ?task] [?e :$cause ?c]
        [?p :$id ?c] [?p :$type "status"]
        [?p :$value "Тестирование"]]

порядок — по причине; ни таблицы, ни окна, ни сортировки

ЗадачаSQLDatalog здесь
Текущее значениеROW_NUMBER() OVER … = 1 в CTE(not [?n :$cause ?id])
Цепочка причин любой длиныWITH RECURSIVE, свой на каждый случай(ancestor ?id ?a) встроено
Переиспользовать шагпредставление, временная таблица, праваправило в :rules прямо в запросе
Состояние на прошлую датуфильтр по времени во всех CTE сразуте же клозы + предикат по :$date
workshop.vanilitik.areals.ru · честно: агрегаты, индексы и терабайты остаются за SQL; здесь 5 секунд и 5000 строк в браузере
Что мерим

Три слоя → граф событий → проекции

Поток задач

переходы статусов из трекера

Журнал команды

отпуск, ретро, инцидент, процесс

Списания времени

часы на подзадачи

Граф событий

неизменяемые события с причинами · ничего не удаляется

Lead p85
24 дн
WIP
7
Эфф. потока
35%
Изломы
2
CFD
▟
Прогноз P85
12.11

Lead = работа + очереди

работа 35%
очереди 65%

ускорять надо передачи между этапами, а не людей

35%

Эффективность потока

работа ÷ (работа + очереди); меньше 40% — команда в основном ждёт

Закон Литтла

lead ≈ WIP ÷ пропускная

самый дешёвый рычаг — ограничить WIP

workshop.vanilitik.areals.ru · раздатка «Что и зачем мерить» · мерим поток, а не людей
ЧАСТЬ 2 · 70 МИНУТ РУКАМИ

Четыре задания
в vanilitik5

Проводник ведёт по шагам, ответы ищем экранами

Инструмент

vanilitik5.areals.ru: выбираете команду — двойник собирается сам

1 Команда
2 Двойник
3 Узкое место
4 Почему
5 Вопрос
6 Итог
  1. Команда. Десять карточек; клик — файлы читаются, pack выводится из потока, импорт проверяется и фиксируется. Секунда.
  2. Двойник. Сводка графа и выведенный поток статусов: работа, ожидание, конец.
  3. Узкое место. Пять кнопок подсвечивают нужную карточку отчёта и объясняют, что искать.
  4. Почему. Импакт событий журнала, динамика, изломы.
  5. Вопрос. Готовые запросы «для решений» и AI-аналитик: вопрос своими словами → запрос → диаграмма → объяснение.
  6. Итог. Заметки собираются в три строки, копируются одной кнопкой.

Словарик терминов на каждом шаге. Все вкладки доступны по кнопке. Ключ модели на сервере, вводить ничего не нужно.

vanilitik5, шаг 2: двойник собран
workshop.vanilitik.areals.ru · vanilitik5.areals.ru
Расписание

90 минут: 10 вводной, 70 руками, 10 итог

теория 10
1 · двойник 15
2 · узкое место 25
3 · почему 15
4 · откуда знаешь 15
итог 10
0:000:100:250:501:051:201:30
ВремяЧто делаемСдаём
0:00Теория. Почему не SQL, причинное множество, срезы, Datalog—
0:10Собрать двойника. Команда → pack из потока → проверка → фиксациясобытия, статусы с категориями, типы
0:25Где узкое место. Lead/cycle и створ, CFD с окном, старение, работа vs очередистатус + команда + дни, три экрана
0:50Почему. Журнал, импакт «до → после», изломы с объяснением и без2 излома с объяснением, 1 без, строка в журнал
1:05Откуда знаешь. Datalog «для решений», AI-аналитик, граф событийзапрос в библиотеке, цепочка причин
1:20Итог. По две минуты на группу и куда унести находки по ролямдействие на спринт и экран для проверки
!
Правило воркшопа. Каждая находка показывается экраном приложения и прослеживается до события: «ƒ» у плитки, граф событий, Datalog. «Кажется» не принимается.
workshop.vanilitik.areals.ru · задания текстом: ЗАДАНИЯ.md
Задание 1 · 15 мин

Собрать двойника: от файлов к зафиксированному графу

1 · собрать двойника
2 · узкое место
3 · почему
4 · откуда знаешь
  1. Открыть vanilitik5, выбрать команду своей группы. Дождаться «Шаг 2».
  2. Прочитать сводку: сколько событий, задач, подзадач, списаний, записей журнала.
  3. Прочитать поток, выведенный из данных: сколько статусов, какие — очереди, какой терминальный.
  4. «Посмотреть поток подробнее» → вкладка «Схема»: таблица тип × статус, у каких типов свой workflow.
  5. «Граф событий»: кликнуть любое статусное событие и пройти цепочку причин до корня.
✓
Сдаём: число событий в графе; статусы с категориями; типы с собственным потоком.
pack, выведенный из файлов

Подсказки

Поток у всех команд эталонный, но свидетельства разные: у Гаммы один статус покажет «выходы скучены в считаные дни», у Дельты — возвраты. Подзадачи распознаются по «Родителю» и типу, эпики — по типу «Эпик».

workshop.vanilitik.areals.ru · vanilitik5.areals.ru
Задание 2 · 25 мин

Где команда теряет время: назвать узкое место статусом

1 · собрать двойника
2 · узкое место
3 · почему
4 · откуда знаешь
  1. KPI: lead и cycle p50/p85. Переключить створ cycle «откуда / докуда»: до разработки, в ней, после?
  2. «Работа vs очереди» по периодам: доля ожидания до и после излома.
  3. CFD: найти неделю, где полоса очереди начала расширяться. Сузить окно дат, измерить линейкой Δ задач / Δ дней.
  4. «Старение WIP»: кто и в каком статусе стоит дольше всех. Если застрявших нет — команда здорова сейчас, смотрите назад.
  5. «Среднее время в статусе»: столбик очереди выше остальных — узкое место.
✓
Сдаём: одно узкое место (статус + команда) и число: на сколько дней оно удлиняет lead. Три экрана в доказательство.
CFD с окном дат

Где смотреть

Бета — очереди после разработки · Гамма — даты закрытий · Дельта — матрица переходов · Эпсилон — WIP по людям · Дзета — списано vs календарь · Эта — створ до разработки · Тета — минуя тестирование · Йота — очереди по эпикам · Каппа — тренд lead по неделям.

workshop.vanilitik.areals.ru · vanilitik5.areals.ru
Задание 3 · 15 мин

Почему: события команды рядом с метриками

1 · собрать двойника
2 · узкое место
3 · почему
4 · откуда знаешь
  1. «Анализ событий и трендов»: окно 14 / 28 дней. Для каждого события журнала — импакт «до → после» по lead, WIP, пропускной.
  2. Найти излом, рядом с которым в журнале есть событие, и объяснить им узкое место из задания 2.
  3. Найти излом, у которого объяснения в журнале нет.
  4. Найти событие, которое есть, но метрик не изменило. Событие ≠ причина.
  5. Написать одну строку, которой не хватает в журнале: дата, категория, текст.
✓
Сдаём: два излома с объяснением, один без, одна строка для журнала.
анализ событий и трендов

Как считаются изломы и что такое σ

σ — обычный шум ряда: насколько метрика дёргается от недели к неделе сама по себе (медиана модулей разностей соседних недель ÷ 0,6745 ÷ √2, один выброс её не раздувает). Излом — разрез ряда, где сдвиг среднего больше штрафа 2σ²·ln n; показываются сдвиги от 1,5σ: 3σ и выше — уровень сменился почти наверняка. К излому ищется событие журнала в окне −16…+5 дней.

workshop.vanilitik.areals.ru · vanilitik5.areals.ru
Задание 4 · 15 мин

Откуда знаешь: Datalog, AI-аналитик, граф событий

1 · собрать двойника
2 · узкое место
3 · почему
4 · откуда знаешь
  1. Группа «Для решений»: выполнить «Где сейчас стоят открытые задачи», «Закрыты, минуя тестирование», «В работе без списаний».
  2. Переписать один запрос под свою команду, «Сохранить отчёт».
  3. AI-аналитик: вопрос своими словами про находку из задания 2 → запрос, диаграмма, объяснение. Например: «какие задачи ждали тестирования дольше 5 дней и кто их делал?»
  4. «Граф событий»: кликнуть статусное событие из результата, пройти цепочку причин до корня.
✓
Сдаём: один запрос в библиотеке; цепочка причин одного события до корня.
AI-аналитик

Подсказки

«Минуя тестирование» и «без списаний» — это одно (not …). Если модель вернула 0 строк, назовите статус и срок явно. Шпаргалка с 12 рецептами — на сайте воркшопа.

workshop.vanilitik.areals.ru · vanilitik5.areals.ru
Итог · 10 мин

По две минуты на группу — и куда унести находки

К

Команда

на Дейли

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

СМ

Скрам-мастер

на ретро

системное препятствие, а не разовая проблема; что изменилось после прошлой договорённости: время в статусе, эффективность потока, CFD, импакт «до → после»

ВП

Владелец продукта

Обзор спринта, планирование

сколько доходит до заказчика, какое обещание честно дать, когда закроется эпик: пропускная, lead p85, прогноз P50/P85, «минуя этапы»

ТЛ

Тимлид / PM

еженедельно

куда движется lead и пропускная, что произошло на неделе: lead по неделям, CFD, журнал и изломы, 15 минут ритма

Что говорит группа

  • Узкое место: статус, команда, число дней — и три экрана
  • Объяснение: событие журнала с импактом; что осталось необъяснённым
  • Откуда знаем: сохранённый запрос и цепочка причин
  • Что сделать на спринт и каким экраном измерить
⌂
Домашнее задание. Те же четыре шага на своей выгрузке за три месяца, завести журнал команды, один эксперимент на спринт и экран, которым его измерят через две недели тем же методом.
workshop.vanilitik.areals.ru · воркшоп «Цифровой двойник команды»
МАТЕРИАЛЫ

Всё — на сайте воркшопа

workshop.vanilitik.areals.ru: задания, формат файлов с примерами, десять команд отдельными архивами, раздатка «Что и зачем мерить», шпаргалка по Datalog, пример промпта для любой нейросети.

AREAL Flow Analytics · данные не покидают браузер
Управление

→пробел дальше (сначала раскрывает пункты и шаги анимации)
← назад
F во весь экран · M оглавление · Home End
? эта подсказка · Esc закрыть

Ссылка на слайд: добавьте #номер к адресу. Свайп на телефоне работает. Слайды 16:9 — на экране Full HD занимают его целиком.