От выгрузки трекера к решению за полтора часа: почему SQL не отвечает на вопросы о потоке, зачем причинное множество и Datalog, и четыре задания на десяти командах с заложенными историями.
Таблица KPI показывает «сколько». Двойник отвечает «где», «почему» и «откуда знаешь».
Lead и cycle time, CFD, WIP, пропускная — по вашим статусам, выведенным из данных, а не по шаблону.
Очереди между этапами почти всегда больше работы. Назвать узкое место статусом, а не ощущением.
Журнал команды рядом с метриками: импакт «до → после», изломы трендов, события без эффекта.
Каждая цифра — проекция над событиями и раскручивается назад до строки выгрузки. Datalog задаёт свой вопрос.
и что такое причинное множество, проекции и Datalog
В таблице задач лежит «статус сейчас». Всё, что нам нужно, лежит между строками истории.
значение перезаписано: откуда взялось новое и что было раньше — потеряно
ничего не стирается; каждая запись цитирует причину
-- «задачи, вернувшиеся из тестирования в разработку» 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 нужна только потому, что «предыдущий статус» не хранится
Вместо строки, которую можно перезаписать, — неизменяемая запись, которая знает, из чего она следует.
{ $id "#7976f100" ; хэш содержимого
$base "BET-1037" ; к кому относится
$type "status" ; что это
$value "Разработка" ; значение
$cause ["#658f17d2"] ; из чего следует
$actor "Лебедев И." }
Новое значение — новое событие с причиной на старое. «Текущее» = событие, у которого нет следующего. История всегда рядом.
Событие младше своей причины по построению. Часы, пояса и правки задним числом перестают быть источником правды.
Статусы, их категории, workflow по типам записаны в тот же граф. Правка схемы — событие с автором, а не перезапись конфига.
Условия на переменные, которые можно назвать правилом и подставлять друг в друга. Промежуточных таблиц нет: движок считает всё до неподвижной точки.
[?e :$base ?task] [?e :$type "status"]
[?e :$value ?s] [?e :$id ?id]
(not [?n :$cause ?id]
[?n :$type "status"])Событие, у которого нет следующего. Одна строка вместо оконной функции в CTE.
[?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 рецептами — на сайте воркшопа.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 = 'Разработка';порядок — по времени; промежуточная таблица; новый вопрос — новая таблица
[:find ?task
:where [?e :$type "status"] [?e :$value "Разработка"]
[?e :$base ?task] [?e :$cause ?c]
[?p :$id ?c] [?p :$type "status"]
[?p :$value "Тестирование"]]порядок — по причине; ни таблицы, ни окна, ни сортировки
| Задача | SQL | Datalog здесь |
|---|---|---|
| Текущее значение | ROW_NUMBER() OVER … = 1 в CTE | (not [?n :$cause ?id]) |
| Цепочка причин любой длины | WITH RECURSIVE, свой на каждый случай | (ancestor ?id ?a) встроено |
| Переиспользовать шаг | представление, временная таблица, права | правило в :rules прямо в запросе |
| Состояние на прошлую дату | фильтр по времени во всех CTE сразу | те же клозы + предикат по :$date |
переходы статусов из трекера
отпуск, ретро, инцидент, процесс
часы на подзадачи
неизменяемые события с причинами · ничего не удаляется
ускорять надо передачи между этапами, а не людей
работа ÷ (работа + очереди); меньше 40% — команда в основном ждёт
lead ≈ WIP ÷ пропускная
самый дешёвый рычаг — ограничить WIP
Проводник ведёт по шагам, ответы ищем экранами
Словарик терминов на каждом шаге. Все вкладки доступны по кнопке. Ключ модели на сервере, вводить ничего не нужно.

| Время | Что делаем | Сдаём |
|---|---|---|
| 0:00 | Теория. Почему не SQL, причинное множество, срезы, Datalog | — |
| 0:10 | Собрать двойника. Команда → pack из потока → проверка → фиксация | события, статусы с категориями, типы |
| 0:25 | Где узкое место. Lead/cycle и створ, CFD с окном, старение, работа vs очереди | статус + команда + дни, три экрана |
| 0:50 | Почему. Журнал, импакт «до → после», изломы с объяснением и без | 2 излома с объяснением, 1 без, строка в журнал |
| 1:05 | Откуда знаешь. Datalog «для решений», AI-аналитик, граф событий | запрос в библиотеке, цепочка причин |
| 1:20 | Итог. По две минуты на группу и куда унести находки по ролям | действие на спринт и экран для проверки |
Поток у всех команд эталонный, но свидетельства разные: у Гаммы один статус покажет «выходы скучены в считаные дни», у Дельты — возвраты. Подзадачи распознаются по «Родителю» и типу, эпики — по типу «Эпик».
Бета — очереди после разработки · Гамма — даты закрытий · Дельта — матрица переходов · Эпсилон — WIP по людям · Дзета — списано vs календарь · Эта — створ до разработки · Тета — минуя тестирование · Йота — очереди по эпикам · Каппа — тренд lead по неделям.
σ — обычный шум ряда: насколько метрика дёргается от недели к неделе сама по себе (медиана модулей разностей соседних недель ÷ 0,6745 ÷ √2, один выброс её не раздувает). Излом — разрез ряда, где сдвиг среднего больше штрафа 2σ²·ln n; показываются сдвиги от 1,5σ: 3σ и выше — уровень сменился почти наверняка. К излому ищется событие журнала в окне −16…+5 дней.
«Минуя тестирование» и «без списаний» — это одно (not …). Если модель вернула 0 строк, назовите статус и срок явно. Шпаргалка с 12 рецептами — на сайте воркшопа.
что застряло прямо сейчас, что вернулось с проверки, у кого открытых больше, чем можно вести: старение WIP, WIP на человека, возвраты за неделю
системное препятствие, а не разовая проблема; что изменилось после прошлой договорённости: время в статусе, эффективность потока, CFD, импакт «до → после»
сколько доходит до заказчика, какое обещание честно дать, когда закроется эпик: пропускная, lead p85, прогноз P50/P85, «минуя этапы»
куда движется lead и пропускная, что произошло на неделе: lead по неделям, CFD, журнал и изломы, 15 минут ритма
workshop.vanilitik.areals.ru: задания, формат файлов с примерами, десять команд отдельными архивами, раздатка «Что и зачем мерить», шпаргалка по Datalog, пример промпта для любой нейросети.
#номер к адресу. Свайп на телефоне работает. Слайды 16:9 — на экране Full HD занимают его целиком.