Русский
Налог на универсальность
Сколько стоит универсальный инструмент — тем, кто на нём строит, и тем, кто им пользуется.
Универсальный инструмент делает любую задачу возможной, но почти никогда — дешёвой. Каждый сценарий использования — это отдельная стройка поверх платформы. Цену этой стройки легко недооценить заранее, а сам процесс легко полюбить сильнее, чем результат. Вот вторая половина и есть ловушка: инструмент приглашает строить инструмент вместо того, чтобы им пользоваться. У социологов для этого есть термин (смещение целей), у каждого второго гаража — Жигули, которые чинят тридцать лет, а у trip2g — квитанция: «простой шаблон канбан-доски», который потребовал шесть заходов правок в ядро. Универсальность — это обещание и налог одновременно. Дисциплина в том, чтобы платить налог осознанно, когда его требует контент, и замечать момент, когда начал платить его для удовольствия.
Это парный текст к «У универсальных инструментов нет короткого питча». Тот говорит: платформу объясняют через дверь. Этот добавляет: двери не бесплатны.
Квитанция за канбан
В чате про Obsidian спросили: может ли что-нибудь отрендерить канбан-доску из заметок? trip2g — универсальная платформа, markdown на входе, что угодно на выходе. Честный ответ: «конечно, это просто шаблон». Я вызвался сделать.
Вот во что «просто шаблон» обошёлся на самом деле, по git-логу:
- Шаблону понадобился «хром» сайта. Кастомный layout заменяет страницу целиком — и теряет стандартную шапку, подвал, логин и поиск. Пришлось добавить в ядро аксессоры для шапки и подвала, хелпер для стандартных виджетов логина и поиска, а заодно вычистить хелперы шаблонизатора до единого стиля именования. Целый ядровой pull request — ещё до самой доски.
- Перетаскивание карточки не должно переписывать заметку целиком. В заметке с доской есть текст, который доска не моделирует; наивное сохранение его бы уничтожило. Шаблон потребовал точечного сохранения через API обновления, а оно — нового режима в ядре: create-only upsert с сигнальным пустым хешем.
- Контракт хеширования всё равно укусил. Шаблон считал хеш в обычном base64, сервер говорит на base64url. Около 74% сохранений молча падали, пока живой тест не нашёл расхождение в один символ алфавита.
- Шаблонизатор съел HTML-комментарий.
{{...}}внутри комментария в layout'е ломал рендеринг полностью. Шаблонизатору всё равно, что вы «просто комментировали». - Два браузера, одна доска, потеря данных. Live-синхронизация вскрыла по-настоящему трудную проблему: одновременные правки затирали друг друга. Ушло три pull request'а: merge на уровне карточек, ядровое изменение — возвращать настоящий id версии на каждое сохранение, и затирание на «успешном» пути, которое нашёл только адверсарный ревью-проход; чинили через тест. Четвёртый остаточный путь известен и отложен.
- Установка должна быть одной командой. Флаг в CLI, который ставит шаблон и заводит образцовую доску, плюс переключатель темы, чтобы доска уважала светлый и тёмный режим сайта.
Итого: один «простой шаблон» — это правки в движке layout'ов, в контракте сохранения и версий, в семантике синхронизации и в CLI, примерно за две недели, с двумя багами, которые могло найти только живое использование. Доска вышла и получилась хорошей: trip2g/kanban_template, ставится одной командой curl, не теряет данные; на этом сайте есть живая демо-доска. Но бесплатным не было ничего. Универсальность была «заложена в дизайн» — а дверь всё равно пришлось строить, вместе с петлями.

Налог в одном предложении: платформа гарантирует, что дверь возможна, а не что она есть.
Есть ли этому название?
Частично. Что-то — именованная академическая теория, что-то — народное наблюдение с хорошими источниками. Честно разделим.
Смещение целей — настоящая теория. Роберт Мертон, «Bureaucratic Structure and Personality» (1940): правила, задуманные как средство, становятся целью, и организация оптимизирует средство, пока цель голодает. Придумано про бюрократов, но механизм — ровно про возню с инструментом: хранилище заметок было средством думать, а теперь вы обслуживаете хранилище. Самая близкая теория ко всему этому тексту.
Закон тривиальности Паркинсона («велосипедный сарай») — настоящий, именованный, полусатирический. Сирил Паркинсон, 1957: комитет утверждает атомный реактор за минуты и 45 минут спорит о сарае для велосипедов — потому что сарай помещается в голове у каждого. Стройка инструмента — велосипедный сарай умственного труда: посильная, наглядная, до конца понятная. В отличие от самого текста.
Yak shaving — настоящий термин, народное понятие. Придумал Карлин Виери в MIT AI Lab (1993–98), по мотивам серии «Рена и Стимпи»; популяризовал Сет Годин. Рекурсивная цепочка предпосылок: чтобы написать заметку, чинишь шаблон; чтобы починить шаблон, патчишь ядро; чтобы пропатчить ядро, чинишь кодировку хеша. Квитанция за канбан выше — журнал yak shaving. В виде дерева:
flowchart TD
A["Отрендерить канбан-доску из заметки"]
A --> B["Кастомный layout теряет «хром» сайта<br/>→ аксессоры шапки, подвала, логина и поиска в ядре"]
A --> C["Перетаскивание — это сохранение, а в заметке есть текст вне доски<br/>→ точечное сохранение через API обновления"]
C --> D["API обновления нужен режим «только создать»<br/>→ новый режим upsert в ядре"]
C --> E["base64 против base64url<br/>→ 74% сохранений молча падали"]
A --> F["Два браузера, одна доска<br/>→ merge карточек + настоящие id версий + затирание на «успешном» пути, 3 PR"]
A --> G["Установка одной командой<br/>→ флаг в CLI + переключатель темы"]
Каждый прямоугольник — предпосылка, которая доске действительно была нужна. А форма дерева объясняет, почему оценка промахнулась: оцениваешь корень, а платишь за ветки. Важное отличие от смещения целей: yak shaving — предпосылки, которые действительно нужны; смещение — когда они уже не нужны, а ты продолжаешь.
Структурная прокрастинация — настоящее, опубликованное. Джон Перри, философ из Стэнфорда, эссе 1996 года; Шнобелевская премия по литературе 2011-го. Прокрастинатор делает трудные и полезные вещи — как способ не делать самую важную. Построить красивый пайплайн публикации — мировой класс способа не писать.
Ошибка коллекционера — именованная, из сообщества. Кристиан Титце (zettelkasten.de): «знать о чём-то — не то же самое, что знать что-то». Сбор и раскладывание заметок даёт сигнал вознаграждения от работы — без работы. Возня с инструментом — та же ошибка уровнем выше: настраиваешь систему, которая разложит заметки, которые ты потом не прочтёшь.
«Productivity porn» / ловушка идеального инструмента — фольклор, но массовый. Ness Labs и другие описывают возню с PKM как «изощрённую прокрастинацию»: состояние вечной подготовки, которое ощущается как прогресс. Контролируемых исследований не нашлось; сходящихся свидетельств — много.
3D-принтер — фольклор с самоиронией. Идеал проекта RepRap — принтер, печатающий собственные детали; шутка написала себя сама. Типичное признание из сообщества: «Я трачу больше времени на печать апгрейдов для принтера, чем на печать всего остального». Идеал самовоспроизводства сделал сбой структурным: самый естественный продукт машины — ещё немного машины.
Вечный гаражный проект — наблюдение, не исследование. Паттерн старше софта. Мужчина держит старую машину вечно — канонический случай: Жигули. Машина, которая всегда требует ремонта, и он всегда её ремонтирует. Как транспортная экономика это безумие: исправная машина обошлась бы дешевле. Как ремонт — всё сходится: продукт и есть ремонт. Гараж — свой угол, ритуал — отдых, «я сам держу её на ходу» — идентичность. Контролируемых исследований жигулеводства никто не публиковал, но это рифмуется с тем, что психология хобби говорит о мотивации «процесс важнее результата» и о потоке: людям нужен ограниченный, подвластный мир, и бесконечно чинимая машина — ровно он.
И это то, чего не хватает всем «прокрастинационным» объяснениям. Возня — часто не окольный путь к награде. Возня и есть награда.
Итого: статьи «почему универсальные инструменты заставляют строить инструмент» не существует. Но составные части именованы и складываются. Мертон объясняет дрейф (средство становится целью), Паркинсон — направление (к посильному), Перри — почему это не мучает совесть (ты же работаешь), Титце — петлю вознаграждения (видимые артефакты без результата), а гараж — почему не хочется останавливаться (петля и есть смысл).
Два налога с одной платформы
История с канбаном и история с Жигулями похожи, но налог платят разные люди.
Налог строителя — структурный и честный. Платформа — это примитивы, а примитивы не решают задачи; задачи решают композиции. Каждая дверь, которую кто-то хочет (доска, журнальная вёрстка, canvas), — настоящая инженерия поверх, и универсальность платформы часто делает её труднее: дверь обязана уживаться со всем остальным, что платформа обещает. Здесь — с произвольным текстом в той же заметке, live-синхронизацией, версиями и правами. «Это просто шаблон» промахнулся на порядок именно потому, что платформа была достаточно универсальна, чтобы сказать «да». Этот налог неизбежен. Выбор только в том, когда его платить.
Налог пользователя — психологический и коварный. Та же открытость, что делает возможными одиннадцать дверей, делает стройку дверей самым соблазнительным занятием в здании. Человек в гараже не «не может получить машину» — машина у него есть, более-менее. Он получает другое: ограниченный, подвластный мир, свой угол, где проблемы посильные, прогресс видимый и никто не двигает требования. Это по-настоящему хорошая вещь; беда только в том, что она носит костюм работы. Результат был предлогом, возня — наградой, и потому остановиться так трудно: силой воли не выйти из того, что тебе тихо платит.
И так — везде, не только в гараже:
- homelab / self-hosting: стойка с Proxmox и k8s дома, чтобы хостить то, что бесплатно в облаке;
- механические клавиатуры: собирают и смазывают чаще, чем печатают;
- dotfiles и «ricing»: годами полировать конфиг neovim вместо кода; Emacs — по старой шутке, отличная ОС, которой не хватает только приличного редактора;
- 3D-принтер, который печатает апгрейды для себя;
- «космолёты из Obsidian»: сорок плагинов, dataview-дашборд для дашбордов — и ни одной написанной заметки.
Это смещение целей с улыбкой хоббиста: сбой пользователя, приглашённый дизайном. Ограниченные инструменты такого не предлагают: никто не превращает пишущую машинку в образ жизни, и никто не лежит каждые выходные под машиной, которая не ломается.
Продавец универсального инструмента продаёт оба налога как достоинство. «На этом можно построить что угодно» — правда. И она же значит: «всё, что вы захотите, придётся строить» и «стройка может понравиться вам больше, чем что угодно».
Как платить налог осознанно
Не «избегать универсальности». Ставка на платформу — правильная ставка; почему — уже разобрано в тексте про позиционирование. Но если вы строите на платформе — или держите её, или просто в ней живёте, — из налога следуют три правила.
Платите, когда тянет контент, а не когда манит инструмент. Канбан-доску стоило строить: живой человек задал живой вопрос, а получилась переиспользуемая дверь — и ядровые изменения, которые она вытянула (хром, точечные сохранения, корректная синхронизация), удешевили все будущие двери. Стройте дверь, когда перед ней кто-то стоит. Не стройте впрок: дизайн-доки trip2g для canvas, data-views и grid layouts лежат непостроенными ровно поэтому — и это правильно.
Считайте налог честно. «Можно отрендерить канбан-доску» и «есть шаблон канбан-доски, ставится одной командой» — разные утверждения, и дверью является только второе. Непостроенная дверь — это стена с табличкой. Помните это, когда оцениваете универсальный инструмент — и когда продаёте его.
Вот налог за канбан, посчитанный:
Один шаблон — правки в четырёх подсистемах. Дверь, которую платформа «гарантировала», всё равно пришлось строить в каждой.
И ещё один честный подсчёт. Скриншот доски — картинка; схема и график в этом тексте — нет. Это fenced-блоки прямо в заметке, их отрендерил trip2g: mermaid и datachart — две его двери, и они — противоположность непостроенным дизайн-докам: их «зачем» не нужно объяснять. «Покажи схему», «покажи график» — питч совпадает с названием. Налог они всё равно заплатили. У mermaid «просто отрендерить fenced-блок» вытянул в ядро общий механизм: сервер сам решает, какие скрипты виджетов нужны каждой странице. У datachart «просто нарисовать столбики» вытянул серверную загрузку данных, кэш по версии заметки и библиотеку графиков, которая грузится только на страницах с графиками. Очевидные двери — те же петли. От таблички на стене их отличает одно: их результат вы сейчас видите.
Не записывайте возню в работу. Тест, который переживает и Мертона, и гараж: это изменение существует потому, что его потребовал контент, — или потому, что строить приятнее, чем писать? Канбан-доска тест проходит: живой человек спросил, живая доска вышла. Не всё в вашем списке пройдёт. А когда изменение тест не проходит, честный ход — не стыдиться, а назвать: это мои Жигули, я делаю это, потому что нравится. Так можно. Только не записывайте это в результат.
Тезис «выбери дверь» и этот — одна монета. Двери — то, как платформу объясняют; налог — то, чего двери стоят. Платформу без построенных дверей нельзя объяснить вовсе, а тот, кто только строит двери, ничего сквозь них не выносит.
А если весь этот налог звучит как слишком много инструмента ради одного сада — это и есть следующая дверь: агент, который ведёт сад за вас, без погружения в Obsidian. fleetbox.cc — скоро.
Источники
- Мертон, смещение целей: обзор, текст Мертона 1957
- Закон тривиальности Паркинсона: Wikipedia
- Происхождение yak shaving (Виери, MIT AI Lab): Wiktionary, Hanselman
- Перри, структурная прокрастинация: structuredprocrastination.com, Stanford Daily о Шнобелевской премии
- Титце, ошибка коллекционера: zettelkasten.de
- Productivity porn: Ness Labs
- RepRap, апгрейды вместо объектов: RepRap, Atlas Obscura