Skip to content

Цикл одного решения · теория

ADI · DDR · Trust Calculus

Три концепции, которые превращают «мы тогда обсуждали» в воспроизводимый процесс. ADI учит выписывать минимум три версии перед фиксом, DDR фиксирует решение и условия пересмотра, Trust Calculus оценивает силу каждого доказательства. Дальше они складываются в один цикл - этот разбор его и показывает.

01 · ADI
Три гипотезы
Abduction → Deduction → Induction
02 · DDR
Мотивировочная часть
6 секций, включая Evidence Decay
03 · Trust Calculus
Сила evidence
F · G · R по шкале 0-9

01 · ADI-цикл - как работает следователь

Концепция 01 · аналогия следователя

Хороший следователь не фиксируется на первой версии

Представьте следователя на месте преступления. Плохой следователь фиксируется на первой версии («это сосед, у них был конфликт») и всё оставшееся расследование ищет подтверждения. Хороший следователь работает иначе: сначала выдвигает три-четыре версии, для каждой формулирует «если это правда, то в таком-то месте должны быть такие-то следы», а потом идёт проверять. Если следы не сходятся - версия выбывает. Остаётся та, которая выдержала все проверки.

ADI-цикл - это ровно такой же способ мышления, только про архитектурные решения.

  • Abduction · генерация гипотез. Минимум три. Не одну, не две - три. Порог именно такой, потому что две гипотезы почти всегда превращаются в ложную дихотомию («либо Redis, либо Postgres»), а третья гипотеза часто ломает эту дихотомию и оказывается самой интересной («in-process LRU без сети вообще»).
  • Deduction · логический вывод. Для каждой гипотезы формулируем «если она верна, то должно наблюдаться вот это». Если ни одно следствие нельзя проверить - это не гипотеза, а красивая фраза.
  • Induction · проверка фактами. Бенчмарк, тест, ссылка на документацию, разговор с командой, замер. Каждое evidence подтверждает или опровергает конкретное предсказание из дедукции. Не «вот статья», а «вот статья, и она опровергает гипотезу 2».
Живой пример · Vault hybrid search

В Knowledge Vault сейчас hybrid search на sqlite-vec. Допустим, через 3 месяца появится требование «искать по 50k заметок с p99 < 100 ms». Без ADI вы или агент уйдёте чинить первое, что пришло в голову - например, «добавим Qdrant». Полчаса работы, и оказывается, что узкое место было не в кэше, а в том, как делается reranking.

С ADI вы сначала выписываете три гипотезы: (1) sqlite-vec не справляется при 50k, (2) reranking на стороне Node занимает 80% времени, (3) RRF с k=60 даёт слишком большое окно. Для каждой формулируете проверяемое следствие. Идёте смотреть EXPLAIN ANALYZE и трейсы. Пять минут - гипотеза 2 подтверждается. Агент не улетает на 30 минут исправлять не то.

Один следователь · одна версия
Плохой следователь - фиксируется на первой версии
Версия (единственная) sqlite-vec не справляется
Действие Идти добавлять Qdrant
Через 30 минут Замер показывает: узкое место было в reranking
✗ исправлено не то
30 мин случайного исправления
Один следователь · три версии
Хороший следователь - три гипотезы перед действием
H1 · индекс sqlite-vec не справляется при 50k
Прогноз: EXPLAIN ANALYZE > 50 ms
✗ опровергнута
H2 · reranking Reranking на Node занимает 80% времени
Прогноз: trace покажет > 60% в rerank
✓ подтверждена
H3 · окно RRF k=60 даёт слишком большое окно
Прогноз: k=20 → −25% latency
✓ подтверждена частично
5 мин диагностики · видно, куда копать
Ключевое отличие

ADI не замедляет работу. Вы тратите 10 минут на диагностику вместо 30 минут на случайное исправление. Это не про замедление - это про то, чтобы не бежать в неправильную сторону.

02 · DDR - судебное решение для архитектурных выборов

Концепция 02 · аналогия суда

Мотивировочная часть для технического решения

Итак, вы прогнали ADI, выбрали решение. Дальше возникает вопрос: что с этим делать, чтобы через три месяца коллега (или вы сами) могли понять, почему было сделано именно так?

Аналогия - судебное решение. Судья не просто говорит «виновен» или «невиновен». Он пишет мотивировочную часть: какие доказательства рассмотрены, какие отвергнуты и почему, на каком основании сделан вывод. Через год, если появятся новые обстоятельства, дело можно пересмотреть - и у следующего судьи есть полная картина, а не «так решили тогда».

DDR (Decision-Driven Record) - это мотивировочная часть к вашему техническому решению. Markdown-файл в репо, в docs/decisions/DDR-NNN-<slug>.md, с шестью обязательными секциями:

DDR-042 · Уменьшение candidateLimit в поиске active
01 · Контекст
Какая ситуация, какие ограничения, какие требования. Один-два абзаца.
02 · Рассмотренные гипотезы
Минимум три - это выход из Abduction.
03 · Предсказания и evidence
«Если X, то Y; вот замер / ссылка». Это Deduction + Induction вместе.
04 · Принятое решение
Одно предложение.
05 · Отвергнутые альтернативы
Каждая с конкретной причиной отказа. Не «не подошло», а «не подошло, потому что требует отдельного DevOps-ресурса, а у нас один».
06 · Условия пересмотра
При каком событии, метрике или дате это решение надо открыть заново. Например: «пересмотреть, если заметок > 100k, или если p99 опустится ниже 50 ms, или через 6 месяцев».
⚡ Evidence Decay
Шестой пункт - самая важная часть

Без условий пересмотра DDR превращается в памятник: решение принято, зафиксировано в коде и забыто. Через год RPS вырос в 10 раз, но «у нас же есть DDR про кэш», и никто в него не смотрит. С условиями пересмотра DDR становится живым - у него есть срок годности.

Это и называется Evidence Decay: любое evidence устаревает. Бенчмарк 2023 года про Redis 6.x не валиден для Redis 7.4. Цифры для вашего Vault на 50 заметках не валидны на 50 000. Хороший DDR это признаёт заранее.

Про длину

DDR должен быть коротким - 200-400 слов, одна страница. Если получается 2000 слов, вы уже не вернётесь к этому документу через месяц, и смысл пропадает. Это не ADR, не RFC, не технический документ для review. Это заметка будущему себе.

03 · Trust Calculus - инспекция качества evidence

Концепция 03 · аналогия инспектора

Каждое утверждение оценивается по трём независимым осям

Теперь у вас есть DDR. Как понять, что evidence в нём достаточно сильное, чтобы на нём основывать решение?

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

Trust Calculus - то же самое для ваших утверждений. Каждое утверждение, на которое опирается решение, оценивается по трём независимым осям, каждая по шкале 0-9:

  • F · Formality - насколько строго сформулировано. 0: «мне кажется». 5: явное утверждение с условиями («при нагрузке X метрика Y»). 9: формальная спецификация или доказательство.
  • G · Granularity - насколько конкретно. 0: «это медленно». 5: «быстрее на 15%». 9: «p99 = 47 ms на 10k RPS, payload 1 KB, setup описан».
  • R · Reliability - откуда источник. 0: анекдот из Slack. 5: несколько независимых источников. 9: peer-reviewed paper или ваш продакшен-бенчмарк.

Оси независимы. Красивый маркетинговый whitepaper от вендора может быть F7 G8 R2 - формально, подробно, но источник продаёт вам свой продукт. Скриншот из Slack от коллеги с reproducible benchmark может быть F2 G8 R7 - без оформления, но цифры реальные и воспроизводимые.

Evidence A · вендорский источник
Маркетинговый whitepaper
F
7
G
8
R
2
Average · 5.7WLNK · 2
Evidence B · внутренний источник
Скриншот Slack + reproducible benchmark
F
2
G
8
R
7
Average · 5.7WLNK · 2

Среднее у обоих одинаковое - 5.7. Но слабая ось разная: у A провалена R (источник продаёт), у B - F (формулировка нестрогая). Trust Calculus показывает не «насколько в среднем хорошо», а какая именно ось проваливается.

3D-разбор · подробный сценарий Trust Calculus в F/G/R-пространстве - 7 evidence на сцене ADI про /search latency, плоскость порога F+G+R=12, выбор гипотезы по WLNK
Правило большого пальца для DDR

Если решение опирается на утверждения с суммой F+G+R меньше 12 - это слабое решение, и перед тем как коммитить, стоит собрать ещё evidence. Не обязательно всё поднимать до 9/9/9 - это дорого и обычно не нужно. Цель не в перфекционизме, а в честности с собой. Если вы видите у себя 2/2/2 («коллега сказал») - вы знаете, что рискуете, и это осознанное решение, а не самообман.

Цикл на одном примере · Vault hybrid search

Как все три концепции складываются в один проход - от первой версии до записанного DDR с условиями пересмотра.

01 · ADI

Три гипотезы, прежде чем что-то трогать

H1: sqlite-vec не справляется при 50k. H2: reranking на Node занимает 80% времени. H3: RRF с k=60 даёт слишком большое окно. Для каждой - проверяемое следствие.

02 · Evidence

Сбор фактов и оценка по F/G/R

EXPLAIN ANALYZE опровергает H1 (индекс отвечает за 18-24 ms). Trace на тестовом стенде подтверждает H2: 71% времени в rerank. Внутренний бенчмарк уменьшения k показывает −22% latency - это F7 G9 R7, WLNK = 7.

03 · DDR

Мотивировочная часть · 6 секций, 280 слов

Решение: переписать reranking в Rust-extension. Альтернативы (Qdrant, k=20) отвергнуты с конкретными причинами. Условия пересмотра: пересмотреть, если заметок > 100k, или если p99 поднимется выше 80 ms, или через 6 месяцев.

04 · Decay

Через 6 месяцев решение само возвращается

Когда наступает срок или метрика - DDR открывается, evidence проверяется заново. Может оказаться, что цифры устарели (новый sqlite-vec релиз, рост базы до 200k). Тогда - снова ADI с тремя гипотезами. Цикл замыкается.