<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Workflow on Mikhail Shogin</title><link>https://mshogin.com/tags/workflow/</link><description>Recent content in Workflow on Mikhail Shogin</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>Mikhail Shogin</copyright><lastBuildDate>Wed, 29 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mshogin.com/tags/workflow/index.xml" rel="self" type="application/rss+xml"/><item><title>Спека как живой контракт: SPDD, archlint и двусторонний sync</title><link>https://mshogin.com/notes/spdd-and-archlint-living-spec/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://mshogin.com/notes/spdd-and-archlint-living-spec/</guid><description>&lt;h2 id="симптом"&gt;Симптом
&lt;/h2&gt;&lt;p&gt;LLM в кодовой базе ускоряет одного разработчика. Команда от этого не ускоряется — наоборот, на ревью обрушивается поток сгенерированного кода, который никто не успевает понять. Спека, написанная на старте задачи, через неделю уже не описывает то, что в master. Кто-то правит код, кто-то правит .md, через месяц расхождение замолчано.&lt;/p&gt;
&lt;p&gt;Это не про дисциплину команды. Это про архитектуру процесса, в которой &amp;ldquo;спека&amp;rdquo; и &amp;ldquo;код&amp;rdquo; не имеют формальной связи.&lt;/p&gt;
&lt;h2 id="диагноз-от-thoughtworks"&gt;Диагноз от Thoughtworks
&lt;/h2&gt;&lt;p&gt;28 апреля 2026 на сайте Мартина Фаулера вышла статья &lt;a class="link" href="https://martinfowler.com/articles/structured-prompt-driven/" target="_blank" rel="noopener"
&gt;Structured Prompt-Driven Development&lt;/a&gt; от Wei Zhang и Jessie Xia. Они формулируют проблему точнее, чем я: &amp;ldquo;Local speed improves. But that doesn&amp;rsquo;t automatically translate into system-level throughput.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Их предложение в трёх пунктах:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Промпт — это first-class артефакт.&lt;/strong&gt; Версионируется, ревьюется, переиспользуется как код. Не реплика в чате.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;REASONS Canvas&lt;/strong&gt; — 7-частная структура промпта: Requirements, Entities, Approach, Structure, Operations, Norms, Safeguards. Первые четыре — абстракция, пятый — исполнение, последние два — governance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Замкнутая петля между промптом и кодом&lt;/strong&gt; с правилом, что обновлять первым:
&lt;ul&gt;
&lt;li&gt;изменение поведения -&amp;gt; сначала промпт, потом код&lt;/li&gt;
&lt;li&gt;рефакторинг -&amp;gt; сначала код, потом sync обратно в промпт&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Третий пункт — главное. Он превращает вечный спор &amp;ldquo;что source of truth&amp;rdquo; в процедуру.&lt;/p&gt;
&lt;h2 id="где-это-совпало-с-моей-практикой"&gt;Где это совпало с моей практикой
&lt;/h2&gt;&lt;p&gt;У меня уже был свой spec-driven workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/my/archlint/templates/specifications/spec-template.md&lt;/code&gt; — шаблон спеки с разделами Architecture, Requirements, Acceptance Criteria, Implementation Steps. Размерные градации XS/S/M/L/XL.&lt;/li&gt;
&lt;li&gt;Правило в &lt;code&gt;~/.claude/rules/spec-workflow.md&lt;/code&gt;: &amp;ldquo;задача &amp;gt;30 минут или &amp;gt;3 шагов — обязательно спека до старта&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Команда &lt;code&gt;/ms-add-spec&lt;/code&gt; в Claude Code, которая генерирует спеку под задачу.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archlint&lt;/code&gt; — статический анализатор, который валидирует архитектурные правила (200+) на графе из AST.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;REASONS Canvas почти один в один ложится на мой шаблон:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;REASONS&lt;/th&gt;
&lt;th&gt;Мой шаблон&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R Requirements&lt;/td&gt;
&lt;td&gt;## Requirements (FR1, FR2, &amp;hellip;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E Entities&lt;/td&gt;
&lt;td&gt;## Architecture / Data Model (UML Class)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A Approach&lt;/td&gt;
&lt;td&gt;## Overview / Solution Summary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S Structure&lt;/td&gt;
&lt;td&gt;## Architecture / Component Overview (C4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O Operations&lt;/td&gt;
&lt;td&gt;## Implementation Steps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;N Norms&lt;/td&gt;
&lt;td&gt;(не было отдельного раздела)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S Safeguards&lt;/td&gt;
&lt;td&gt;(не было отдельного раздела)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Совпадение на 70-80%. Архитектурный governance у меня вообще сильнее — &lt;code&gt;archlint&lt;/code&gt; проверяет автоматически то, что в SPDD держится на ревьюере-человеке.&lt;/p&gt;
&lt;h2 id="где-spdd-добавил-то-чего-не-было"&gt;Где SPDD добавил то, чего не было
&lt;/h2&gt;&lt;p&gt;Два пункта, которые у меня отсутствовали или были сформулированы неверно.&lt;/p&gt;
&lt;h3 id="1-спека-неизменна-в-процессе"&gt;1. Спека &amp;ldquo;неизменна в процессе&amp;rdquo;
&lt;/h3&gt;&lt;p&gt;В моём &lt;code&gt;spec-workflow.md&lt;/code&gt; буквально стояла формулировка:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Спека = ЧТО делать (неизменна в процессе)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Это противоположно идее живого артефакта. Спека написана, согласована, перенесена в &lt;code&gt;inprogress/&lt;/code&gt; — и потом никем не трогается, пока задача не закроется. На практике это значит, что любая правка реализации, отличающаяся от плана, проваливается между спекой и кодом.&lt;/p&gt;
&lt;h3 id="2-norms-и-safeguards-неявные"&gt;2. Norms и Safeguards неявные
&lt;/h3&gt;&lt;p&gt;Стандарты команды (как именно мы оборачиваем ошибки, какой logger, какие naming-конвенции) у меня живут в куче .md файлов: &lt;code&gt;~/.claude/rules/architecture.md&lt;/code&gt;, проектные CLAUDE.md, в чате. На уровне отдельной спеки их явно никто не выносит. Авторы SPDD выделяют:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Norms&lt;/strong&gt; — стандарты как принято писать. Часть автоматизирована (golangci-lint, archlint), часть нет.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safeguards&lt;/strong&gt; — неприкосновенные инварианты. Нарушение — стоп, не warning. Обратная совместимость, perf budgets, security boundaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Когда они в одной странице со спекой, тихий рефактор поперёк стандарта становится заметным на ревью.&lt;/p&gt;
&lt;h2 id="что-я-в-итоге-сделал"&gt;Что я в итоге сделал
&lt;/h2&gt;&lt;p&gt;Два патча, оба сегодня.&lt;/p&gt;
&lt;h3 id="патч-1-clauderulesspec-workflowmd"&gt;Патч 1: &lt;code&gt;~/.claude/rules/spec-workflow.md&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Удалил &amp;ldquo;Спека неизменна&amp;rdquo;. Заменил на &amp;ldquo;Спека — живой контракт, синхронизирован с кодом всегда&amp;rdquo;. Добавил раздел &amp;ldquo;Двусторонняя синхронизация&amp;rdquo; с явным правилом prompt-first vs code-first:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Изменение поведения (publicly-exposed контракт, бизнес-логика, валидация)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; сначала спека, потом код
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Рефакторинг (поведение не меняется)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; сначала код, потом sync обратно в спеку
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;И отдельный раздел &amp;ldquo;Norms и Safeguards: governance внутри спеки&amp;rdquo; с примерами и привязкой к archlint/golangci-lint.&lt;/p&gt;
&lt;h3 id="патч-2-myarchlinttemplatesspecificationsspec-templatemd"&gt;Патч 2: &lt;code&gt;~/my/archlint/templates/specifications/spec-template.md&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Добавил две секции после Acceptance Criteria:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Norms
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; N1: error wrapping через fmt.Errorf(&amp;#34;%w&amp;#34;) или errtrace.Wrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; N2: логирование через slog с контекстом
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; N3: naming - DB snake_case, JSON camelCase
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Автоматизировано:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; golangci-lint passes (errcheck, errorlint, sloglint)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; archlint passes (layered, fan-out, ISP)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Safeguards
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; S1: обратная совместимость публичного API в рамках minor релиза
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; S2: p99 latency endpoint X не растёт более чем на 10%
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; S3: нет утечки PII в логи и метрики
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Проверка:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Smoke test на обратную совместимость
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Бенчмарк до/после
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Аудит логов на чувствительные поля
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Размерные градации те же: для XS Safeguards обычно не нужны, для M/L/XL — обязательны.&lt;/p&gt;
&lt;h2 id="что-я-не-взял"&gt;Что я НЕ взял
&lt;/h2&gt;&lt;p&gt;Не взял CLI &lt;code&gt;openspdd&lt;/code&gt; и команду &lt;code&gt;/spdd-prompt-update&lt;/code&gt;. Слишком много церемонии для одиночной работы и для команды без отдельного workflow-инженера. У меня та же дисциплина держится на:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/ms-add-spec&lt;/code&gt; — создать спеку&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/ms-checkpoint&lt;/code&gt; — зафиксировать прогресс на длинной задаче&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archlint&lt;/code&gt; — валидация Norms+Safeguards автоматически где можно&lt;/li&gt;
&lt;li&gt;Code review через GitLab — двусторонний sync проверяется на ревью&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Не взял правило &amp;ldquo;никогда не редактировать промпт руками&amp;rdquo;. У них это compensation за CLI-managed lifecycle. У меня его нет, и руками править .md спеку — нормальная операция.&lt;/p&gt;
&lt;p&gt;Не взял заявление про &amp;ldquo;~99% intent alignment&amp;rdquo;. Это маркетинг, кейс N=1.&lt;/p&gt;
&lt;h2 id="двойная-оптика"&gt;Двойная оптика
&lt;/h2&gt;&lt;p&gt;Технический слой статьи: дисциплина для AI-кодинга в команде.&lt;/p&gt;
&lt;p&gt;Архитектура мышления за этим: проблема, которую решают авторы — не &amp;ldquo;AI пишет неправильный код&amp;rdquo;, а &amp;ldquo;bandwidth ревьюера не растёт со скоростью генератора&amp;rdquo;. Когда LLM выдаёт результат быстрее, чем человек успевает его понять, узкое место — когнитивная пропускная способность того, кто принимает изменения. SPDD сжимает то, на чём держится ревью, до одного артефакта (Canvas), чтобы он влезал в bandwidth.&lt;/p&gt;
&lt;p&gt;Это та же задача, про которую я говорил на Стачке — контроль сложности через граф. Только на уровне процесса, а не статического анализа.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;archlint&lt;/code&gt; = governance внутри кода (граф, правила, инварианты).
SPDD/спека = governance над изменениями (контракт между намерением и реализацией).&lt;/p&gt;
&lt;p&gt;Эти две вещи комплементарны, не конкурируют. Если у тебя есть один без другого, ты получаешь либо красивые архитектурные правила без контракта на изменения, либо пухлые спеки без автоматической проверки.&lt;/p&gt;
&lt;p&gt;Когда есть оба — каждый коммит проходит и через &amp;ldquo;не сломал ли архитектуру&amp;rdquo; (archlint), и через &amp;ldquo;соответствует ли намерению&amp;rdquo; (спека). На ревьюера падает только то, что обе автоматизации пропустили.&lt;/p&gt;
&lt;h2 id="ссылки"&gt;Ссылки
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Оригинал статьи: &lt;a class="link" href="https://martinfowler.com/articles/structured-prompt-driven/" target="_blank" rel="noopener"
&gt;Structured Prompt-Driven Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openspdd&lt;/code&gt; (Thoughtworks-affiliated CLI): &lt;a class="link" href="https://github.com/gszhangwei/open-spdd" target="_blank" rel="noopener"
&gt;https://github.com/gszhangwei/open-spdd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;archlint: &lt;a class="link" href="https://github.com/mshogin/archlint" target="_blank" rel="noopener"
&gt;https://github.com/mshogin/archlint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>AI Doesn't Replace - AI Changes the Role</title><link>https://mshogin.com/notes/ai-analyst-role-shift/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://mshogin.com/notes/ai-analyst-role-shift/</guid><description>&lt;p&gt;Recently stumbled upon a stat: &lt;a class="link" href="https://hrexecutive.com/the-ai-layoff-trap-why-half-will-be-quietly-rehired/" target="_blank" rel="noopener"
&gt;55% of companies&lt;/a&gt; that laid off people because of AI now regret it. And a &lt;a class="link" href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" target="_blank" rel="noopener"
&gt;METR study&lt;/a&gt; showed something weird - developers think they work 20% faster with AI, but actually turned out to be 19% slower.&lt;/p&gt;
&lt;p&gt;Then I read Hinton saying that in a couple years AI will do in minutes what takes an engineer a month. And &lt;a class="link" href="https://www.technologyreview.com/2025/12/15/1128352/rise-of-ai-coding-developers-2026/" target="_blank" rel="noopener"
&gt;AWS CEO&lt;/a&gt; responds calling the refusal to hire juniors &amp;ldquo;one of the dumbest things I&amp;rsquo;ve heard.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So who&amp;rsquo;s right?&lt;/p&gt;
&lt;p&gt;My experience says - both are wrong. AI doesn&amp;rsquo;t replace people. And it doesn&amp;rsquo;t slow work down. It just changes what we do.&lt;/p&gt;
&lt;h2 id="what-ive-given-to-ai"&gt;What I&amp;rsquo;ve Given to AI
&lt;/h2&gt;&lt;p&gt;Honestly - almost all analytics. Draft diagrams, text editing, searching and analyzing information. I&amp;rsquo;ve practically stopped coding by hand - always work with an agent now. Need some expertise - AI is my first stop.&lt;/p&gt;
&lt;p&gt;Sounds like I&amp;rsquo;ve given everything away. But no.&lt;/p&gt;
&lt;h2 id="what-i-wont-give-up"&gt;What I Won&amp;rsquo;t Give Up
&lt;/h2&gt;&lt;p&gt;Health. This is clear for me. I don&amp;rsquo;t mind if a doctor uses AI - actually, that&amp;rsquo;s good. But it should be a doctor. With education. With experience. AI as a tool - yes. AI instead of a doctor - no.&lt;/p&gt;
&lt;p&gt;Same with a psychologist. I like working with a real person, and I don&amp;rsquo;t see how that can be replaced. Same with a coach.&lt;/p&gt;
&lt;p&gt;Everything related to my health, consciousness, awareness - only to professionals. Who can use AI in their work, but professionals nonetheless.&lt;/p&gt;
&lt;h2 id="about-this-productivity-paradox"&gt;About This &amp;ldquo;Productivity Paradox&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;That METR study got me thinking. People think they&amp;rsquo;re faster, but actually slower. A paradox, they say.&lt;/p&gt;
&lt;p&gt;I disagree.&lt;/p&gt;
&lt;p&gt;How did it used to work? You could try one or two implementation options. Picked something, went ahead. Hit problems - made a third version. Then fourth. And it all piled up. First version lying around somewhere, second, third - and you&amp;rsquo;re already on the fifth, dragging legacy behind.&lt;/p&gt;
&lt;p&gt;Now I try a bunch of options at once in the same time. Yes, each specific option takes more time. But I&amp;rsquo;m not dragging three failed attempts behind me. I pick the best option before I start burying it in production.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not slowing down. That&amp;rsquo;s a different way of working.&lt;/p&gt;
&lt;h2 id="juniors"&gt;Juniors
&lt;/h2&gt;&lt;p&gt;AWS CEO put it well: &amp;ldquo;How&amp;rsquo;s that going to work ten years from now when nobody&amp;rsquo;s learned anything?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Completely agree. There has to be knowledge transfer. Generational turnover of specialists.&lt;/p&gt;
&lt;p&gt;Yes, with AI you can make websites and telegram bots without much education. But the industry isn&amp;rsquo;t just websites and bots. There&amp;rsquo;s tons of stuff that needs higher math. That needs computer science. Juniors are needed. And they need to be trained.&lt;/p&gt;
&lt;h2 id="how-my-role-has-changed"&gt;How My Role Has Changed
&lt;/h2&gt;&lt;p&gt;Writing code by hand - no point anymore. Now I think about architecture. Design systems. Do reviews. Validate what came out.&lt;/p&gt;
&lt;p&gt;And the design itself is also with AI - you talk to the agent, break down the task. Then hand it off for implementation and check the result.&lt;/p&gt;
&lt;p&gt;Basically, the role has shifted. Before - executor. Now - designer and validator.&lt;/p&gt;
&lt;h2 id="whats-become-more-important"&gt;What&amp;rsquo;s Become More Important
&lt;/h2&gt;&lt;p&gt;Systematic approach. These stories about the &amp;ldquo;hero developer&amp;rdquo; who fixed everything at night, or the &amp;ldquo;firefighter&amp;rdquo; who&amp;rsquo;s everywhere at once - that&amp;rsquo;s going away. People who solve problems systematically are valued.&lt;/p&gt;
&lt;p&gt;And another skill has emerged: building your own system for working with AI. Just dictating a prompt - doesn&amp;rsquo;t work. You need an actual system. Your own prompts, rules, skills, agents.&lt;/p&gt;
&lt;p&gt;I spend time not just on work tasks, but on this system. It&amp;rsquo;s my asset. My intellectual property, if you will.&lt;/p&gt;
&lt;h2 id="whats-the-point"&gt;What&amp;rsquo;s the Point
&lt;/h2&gt;&lt;p&gt;AI doesn&amp;rsquo;t replace specialists. It changes what they do.&lt;/p&gt;
&lt;p&gt;55% of companies regret layoffs not because AI doesn&amp;rsquo;t work. But because they didn&amp;rsquo;t understand - people&amp;rsquo;s role has changed, not disappeared.&lt;/p&gt;
&lt;p&gt;Less execution, more design. Less heroics, more system. Less hand-coding, more work on your own tools.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s how it looks right now. At least for me.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;More on AI in development and architecture: &lt;a class="link" href="https://t.me/MikeShogin" target="_blank" rel="noopener"
&gt;Telegram&lt;/a&gt;&lt;/p&gt;</description></item><item><title>$HOME in Git: One Config for Claude Code</title><link>https://mshogin.com/notes/claude-config-consolidation/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://mshogin.com/notes/claude-config-consolidation/</guid><description>&lt;p&gt;Multiple projects. Each with its own CLAUDE.md, its own rules. You improve something in one place - you want it elsewhere. Copy. Improve there. Copy back. Round and round.&lt;/p&gt;
&lt;p&gt;At some point I had a mess of different versions of the same rules scattered across a dozen projects. The copy-paste circus was annoying, but I kept putting it off.&lt;/p&gt;
&lt;p&gt;During the New Year holidays, I decided to fix it.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The Solution
&lt;/h2&gt;&lt;p&gt;Moved everything to my home directory &lt;code&gt;~/.claude/&lt;/code&gt;. One config for all projects.&lt;/p&gt;
&lt;p&gt;Yes, I&amp;rsquo;m now coupled to my home directory structure. But that structure hasn&amp;rsquo;t changed in years - &lt;code&gt;~/my/&lt;/code&gt; for projects, &lt;code&gt;~/education/&lt;/code&gt; for learning, &lt;code&gt;~/family/&lt;/code&gt; for family stuff. Risk is minimal.&lt;/p&gt;
&lt;h2 id="structure"&gt;Structure
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;claude&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CLAUDE&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Core principles (task confirmation, formatting)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;HOME_MAP&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Home directory map for navigation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rules&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Rules (auto-loaded)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;architecture&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Architecture principles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;coaching&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Coaching questions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dna&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Writing style&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;navigation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Context detection by keywords&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Project-specific rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;aitrader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Rules for aitrader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Slash commands&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;todos&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# /ms-todos - task list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;note&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# /ms-add-note - add note&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Skills&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;writing&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Blog post writing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;go&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Go code review&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;social&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Social media content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Custom agents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;go&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;reviewer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="c1"&gt;# Go code reviewer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hooks&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="c1"&gt;# Hooks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="c1"&gt;# Session logging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="how-navigation-works"&gt;How Navigation Works
&lt;/h2&gt;&lt;p&gt;The key file is &lt;code&gt;HOME_MAP.md&lt;/code&gt;. It&amp;rsquo;s a map of the entire home directory with context detection rules.&lt;/p&gt;
&lt;p&gt;Claude sees keywords in your request and knows which directory to work in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aitrader&lt;/code&gt;, &lt;code&gt;archlint&lt;/code&gt;, &lt;code&gt;blog&lt;/code&gt; -&amp;gt; &lt;code&gt;~/my/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;course&lt;/code&gt;, &lt;code&gt;book&lt;/code&gt;, &lt;code&gt;learning&lt;/code&gt; -&amp;gt; &lt;code&gt;~/education/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memory&lt;/code&gt;, &lt;code&gt;remember&lt;/code&gt;, &lt;code&gt;mission&lt;/code&gt; -&amp;gt; &lt;code&gt;~/my/org-roam/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If context is ambiguous - it asks.&lt;/p&gt;
&lt;h2 id="project-specific-rules"&gt;Project-Specific Rules
&lt;/h2&gt;&lt;p&gt;Need specific rules for a project? Add them to &lt;code&gt;rules/projects/&lt;/code&gt;. For example, &lt;code&gt;aitrader.md&lt;/code&gt; contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to run the collector (without proxy for Tinkoff API)&lt;/li&gt;
&lt;li&gt;Test commands&lt;/li&gt;
&lt;li&gt;Project specifics&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These rules load globally but apply only when working in the aitrader context.&lt;/p&gt;
&lt;h2 id="git"&gt;Git
&lt;/h2&gt;&lt;p&gt;Everything under git. One repository, one history.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt; is large - it excludes almost everything that shouldn&amp;rsquo;t be versioned: credentials, caches, Downloads, Documents, Library, .ssh. But everything else - configs, &lt;code&gt;.claude/&lt;/code&gt;, dotfiles - is tracked. Planning to add private repos as submodules, so one &lt;code&gt;git clone&lt;/code&gt; restores the entire home directory.&lt;/p&gt;
&lt;p&gt;No more copying between projects. Improve a rule once - it works everywhere.&lt;/p&gt;
&lt;h2 id="result"&gt;Result
&lt;/h2&gt;&lt;p&gt;Before: a dozen projects with scattered CLAUDE.md files, constant copying, different versions of the same thing.&lt;/p&gt;
&lt;p&gt;After: one &lt;code&gt;~/.claude/&lt;/code&gt;, structured rules, git for versioning. Improve once - works everywhere.&lt;/p&gt;
&lt;p&gt;Downside: tight coupling to home directory structure. For me it&amp;rsquo;s not a problem - the structure is stable.&lt;/p&gt;</description></item></channel></rss>