Цикл одного решения · теория
ADI · DDR · Trust Calculus
Три концепции, которые превращают «мы тогда обсуждали» в воспроизводимый процесс. ADI учит выписывать минимум три версии перед фиксом, DDR фиксирует решение и условия пересмотра, Trust Calculus оценивает силу каждого доказательства. Дальше они складываются в один цикл - этот разбор его и показывает.
01 · ADI-цикл - как работает следователь
Хороший следователь не фиксируется на первой версии
Представьте следователя на месте преступления. Плохой следователь фиксируется на первой версии («это сосед, у них был конфликт») и всё оставшееся расследование ищет подтверждения. Хороший следователь работает иначе: сначала выдвигает три-четыре версии, для каждой формулирует «если это правда, то в таком-то месте должны быть такие-то следы», а потом идёт проверять. Если следы не сходятся - версия выбывает. Остаётся та, которая выдержала все проверки.
ADI-цикл - это ровно такой же способ мышления, только про архитектурные решения.
- Abduction · генерация гипотез. Минимум три. Не одну, не две - три. Порог именно такой, потому что две гипотезы почти всегда превращаются в ложную дихотомию («либо Redis, либо Postgres»), а третья гипотеза часто ломает эту дихотомию и оказывается самой интересной («in-process LRU без сети вообще»).
- Deduction · логический вывод. Для каждой гипотезы формулируем «если она верна, то должно наблюдаться вот это». Если ни одно следствие нельзя проверить - это не гипотеза, а красивая фраза.
- Induction · проверка фактами. Бенчмарк, тест, ссылка на документацию, разговор с командой, замер. Каждое evidence подтверждает или опровергает конкретное предсказание из дедукции. Не «вот статья», а «вот статья, и она опровергает гипотезу 2».
В 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 не справляется
sqlite-vec не справляется при 50k
EXPLAIN ANALYZE > 50 msADI не замедляет работу. Вы тратите 10 минут на диагностику вместо 30 минут на случайное исправление. Это не про замедление - это про то, чтобы не бежать в неправильную сторону.
02 · DDR - судебное решение для архитектурных выборов
Мотивировочная часть для технического решения
Итак, вы прогнали ADI, выбрали решение. Дальше возникает вопрос: что с этим делать, чтобы через три месяца коллега (или вы сами) могли понять, почему было сделано именно так?
Аналогия - судебное решение. Судья не просто говорит «виновен» или «невиновен». Он пишет мотивировочную часть: какие доказательства рассмотрены, какие отвергнуты и почему, на каком основании сделан вывод. Через год, если появятся новые обстоятельства, дело можно пересмотреть - и у следующего судьи есть полная картина, а не «так решили тогда».
DDR (Decision-Driven Record) - это мотивировочная часть к вашему техническому
решению. Markdown-файл в репо, в docs/decisions/DDR-NNN-<slug>.md,
с шестью обязательными секциями:
Без условий пересмотра 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
Каждое утверждение оценивается по трём независимым осям
Теперь у вас есть 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 - без оформления, но цифры реальные и воспроизводимые.
Среднее у обоих одинаковое - 5.7. Но слабая ось разная: у A провалена R (источник продаёт), у B - F (формулировка нестрогая). Trust Calculus показывает не «насколько в среднем хорошо», а какая именно ось проваливается.
/search latency, плоскость порога F+G+R=12, выбор гипотезы по WLNK
Если решение опирается на утверждения с суммой F+G+R меньше 12 - это слабое решение, и перед тем как коммитить, стоит собрать ещё evidence. Не обязательно всё поднимать до 9/9/9 - это дорого и обычно не нужно. Цель не в перфекционизме, а в честности с собой. Если вы видите у себя 2/2/2 («коллега сказал») - вы знаете, что рискуете, и это осознанное решение, а не самообман.
Цикл на одном примере · Vault hybrid search
Как все три концепции складываются в один проход - от первой версии до записанного DDR с условиями пересмотра.
Три гипотезы, прежде чем что-то трогать
H1: sqlite-vec не справляется при 50k. H2: reranking на Node занимает 80% времени. H3: RRF с k=60 даёт слишком большое окно. Для каждой - проверяемое следствие.
Сбор фактов и оценка по F/G/R
EXPLAIN ANALYZE опровергает H1 (индекс отвечает за 18-24 ms). Trace на тестовом стенде подтверждает H2: 71% времени в rerank. Внутренний бенчмарк уменьшения k показывает −22% latency - это F7 G9 R7, WLNK = 7.
Мотивировочная часть · 6 секций, 280 слов
Решение: переписать reranking в Rust-extension. Альтернативы (Qdrant, k=20) отвергнуты с конкретными причинами. Условия пересмотра: пересмотреть, если заметок > 100k, или если p99 поднимется выше 80 ms, или через 6 месяцев.
Через 6 месяцев решение само возвращается
Когда наступает срок или метрика - DDR открывается, evidence проверяется заново. Может оказаться, что цифры устарели (новый sqlite-vec релиз, рост базы до 200k). Тогда - снова ADI с тремя гипотезами. Цикл замыкается.