<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Владимир Цымбал: материалы</title>
    <link>https://tsymbal.dev/</link>
    <description>Пишу о разработке, архитектуре, базах данных и практических решениях, которые выдерживают встречу с продакшеном.</description>
    <language>ru</language>
    <lastBuildDate>Tue, 29 Sep 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://tsymbal.dev/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Продовый REPL: Yaegi поверх composition root</title>
      <link>https://tsymbal.dev/writing/production-repl</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/production-repl</guid>
      <description>Консоль для прода на Go: отдельный процесс с тем же composition root, read-only по умолчанию и REPL на Yaegi</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>PostgreSQL</category>
      <category>Developer Tools</category>
      <pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>DHH перестал писать код руками. Как мнение одного инженера влияет на целую индустрию</title>
      <link>https://tsymbal.dev/writing/dhh-and-industry-influence</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/dhh-and-industry-influence</guid>
      <description>DHH за год прошёл от страха потерять навык из-за AI до отказа писать код руками. Почему разворот одного инженера меняет то, какие инструменты другие считают допустимыми, и где заканчивается применимость его опыта.</description>
      <category>Индустрия</category>
      <category>AI-инструменты</category>
      <category>Мнение</category>
      <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>PostgreSQL: три источника времени в одной таблице</title>
      <link>https://tsymbal.dev/writing/postgres-timezones-three-clocks</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/postgres-timezones-three-clocks</guid>
      <description>Резерв товара сгорал за пять минут вместо тридцати: приложение и база писали в одну таблицу время из разных поясов. Как это найти, почему стейдж молчал и зачем проверять таймзону при старте.</description>
      <category>Разработка</category>
      <category>PostgreSQL</category>
      <category>Go</category>
      <category>GORM</category>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Декомпозиция задач: все части готовы, а результата нет</title>
      <link>https://tsymbal.dev/writing/task-decomposition</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/task-decomposition</guid>
      <description>Как декомпозировать задачу, учесть зависимости между задачами и довести пользовательский сценарий до результата.</description>
      <category>Управление</category>
      <category>Тимлидство</category>
      <pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>ИИ частично ускорил разработку. А что насчёт всего остального?</title>
      <link>https://tsymbal.dev/writing/ai-partially-accelerated-development</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/ai-partially-accelerated-development</guid>
      <description>ИИ помогает быстрее писать код и проверять идеи, но ускорение разработки не означает ускорение всей системы. Что происходит с тестированием, ревью, метриками и выращиванием инженеров.</description>
      <category>Разработка</category>
      <category>ИИ</category>
      <category>Разработка</category>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Онбординг: от собеседования до самостоятельной работы</title>
      <link>https://tsymbal.dev/writing/developer-onboarding</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/developer-onboarding</guid>
      <description>Как провести онбординг разработчика: что подготовить до его выхода, как договориться об ожиданиях и почему это важно для бизнеса.</description>
      <category>Управление</category>
      <category>Тимлидство</category>
      <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Инфляция приоритетов: если всё срочно, ничего не срочно</title>
      <link>https://tsymbal.dev/writing/priority-inflation</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/priority-inflation</guid>
      <description>Почему высокий приоритет перестаёт работать, когда его получают почти все задачи, и как вернуть команде понятный порядок работы.</description>
      <category>Управление</category>
      <category>Тимлидство</category>
      <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Когда разработчик становится ручной админкой</title>
      <link>https://tsymbal.dev/writing/developer-as-admin-panel</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/developer-as-admin-panel</guid>
      <description>Личный опыт ручной поддержки: цена человеческой ошибки, постоянных переключений и внутренних инструментов, которые не успевают за продуктом.</description>
      <category>Управление</category>
      <category>Тимлидство</category>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>River: периодические задачи без cron</title>
      <link>https://tsymbal.dev/writing/river-periodic-jobs</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/river-periodic-jobs</guid>
      <description>Почему самодельный планировщик джоб это костыль и как заменить его периодическими задачами River: расписание у лидера, диспетчер вместо жирной задачи и защита от повторной постановки.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>River</category>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Премия за выполненный план: чему меня научил командный KPI</title>
      <link>https://tsymbal.dev/writing/unuseful-kpi</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/unuseful-kpi</guid>
      <description>Личная история о командном KPI, премии за выполнение плана и о том, почему одной метрики оказалось недостаточно.</description>
      <category>Управление</category>
      <category>Тимлидство</category>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Закон Гудхарта</title>
      <link>https://tsymbal.dev/writing/goodharts-law</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/goodharts-law</guid>
      <description>Когда метрика становится целью, люди начинают улучшать метрику, а не то, ради чего её придумали.</description>
      <category>Тимлидство</category>
      <category>Тимлидство</category>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Границы модулей в Go: интеграционные тесты с PostgreSQL</title>
      <link>https://tsymbal.dev/writing/integration-tests-postgres</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/integration-tests-postgres</guid>
      <description>Интеграционные тесты Go-модуля: изоляция схемой на тест, проверка репозитория на настоящей базе, откат транзакции, участие в чужой транзакции и сквозной тест сценария.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>Архитектура</category>
      <category>Тестирование</category>
      <category>PostgreSQL</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Границы модулей в Go: тесты use case, адаптеров и клиента</title>
      <link>https://tsymbal.dev/writing/testing-module-boundaries</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/testing-module-boundaries</guid>
      <description>Как тестировать модульный монолит на Go: стабы для локальных интерфейсов, табличный unit-тест оркестрации, проверка перевода типов и ошибок в адаптере и тест HTTP-клиента на httptest.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>Архитектура</category>
      <category>Тестирование</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>ElasticAPM: три бага одной интеграции</title>
      <link>https://tsymbal.dev/writing/apm-sql-spans</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/apm-sql-spans</guid>
      <description>Три неочевидных нюанса в связке Gin, GORM и pgx, из-за которых интеграция с Elastic APM работала лишь частично: GORM незаметно игнорировал настройку simple protocol, SQL-спаны не доходили до Kibana, а передача gin.Context вместо request context заодно ломала отмену запросов и таймауты.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>ElasticAPM</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Закон Паркинсона</title>
      <link>https://tsymbal.dev/writing/parkinsons-law</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/parkinsons-law</guid>
      <description>Работа заполняет всё время, которое на неё выделили.</description>
      <category>Тимлидство</category>
      <category>Тимлидство</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Эффект Рингельмана</title>
      <link>https://tsymbal.dev/writing/ringelmann-effect</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/ringelmann-effect</guid>
      <description>Чем больше группа, тем меньше в среднем вклад каждого отдельного человека.</description>
      <category>Тимлидство</category>
      <category>Тимлидство</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Границы модулей в Go: транзакции и контроль импортов</title>
      <link>https://tsymbal.dev/writing/module-boundaries-in-practice</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/module-boundaries-in-practice</guid>
      <description>Как проверить границы Go-модулей на практике: преобразовать модели хранения и DTO, вынести внешний вызов из SQL-транзакции и запретить нежелательные импорты.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>Архитектура</category>
      <category>Модульный монолит</category>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Границы модулей в Go: use case, порты и адаптеры</title>
      <link>https://tsymbal.dev/writing/self-contained-domains</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/self-contained-domains</guid>
      <description>Как описать зависимости use case в Go локальными интерфейсами, перевести типы и ошибки в адаптерах и связать реализации в Composition Root.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>Архитектура</category>
      <category>Модульный монолит</category>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Транзакции в Go через context: одна граница для нескольких репозиториев</title>
      <link>https://tsymbal.dev/writing/transactions-via-context</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/transactions-via-context</guid>
      <description>Как открыть транзакцию на уровне use case, передать её репозиториям без зависимости бизнес-логики от ORM и правильно обработать вложенные вызовы.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>Архитектура</category>
      <category>PostgreSQL</category>
      <category>GORM</category>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Sentinel-ошибки в Go: сохраняем смысл между слоями</title>
      <link>https://tsymbal.dev/writing/sentinel-errors-go</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/sentinel-errors-go</guid>
      <description>Почему общий ErrNotFound смешивает разные причины ошибки, где объявлять sentinel-ошибки и как переводить ошибки GORM или database/sql на границе репозитория.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>Архитектура</category>
      <category>Ошибки</category>
      <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Team Canvas: как договориться о правилах работы команды</title>
      <link>https://tsymbal.dev/writing/team-canvas</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/team-canvas</guid>
      <description>Практический сценарий Team Canvas для инженерной команды. Как обсудить цели, роли, ожидания и превратить ответы в рабочие договорённости.</description>
      <category>Управление</category>
      <category>Тимлидство</category>
      <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>River в Go: фоновые задачи в одной транзакции с PostgreSQL</title>
      <link>https://tsymbal.dev/writing/river-background-jobs</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/river-background-jobs</guid>
      <description>Как поставить задачу River в ту же транзакцию, что и бизнес-запись в PostgreSQL, а затем безопасно выполнить её в отдельном воркере.</description>
      <category>Разработка</category>
      <category>Go</category>
      <category>River</category>
      <category>GORM</category>
      <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Проекты в Onplate: почему агент ведёт себя иначе в соседней папке</title>
      <link>https://tsymbal.dev/writing/projects-in-onplate</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/projects-in-onplate</guid>
      <description>Проект это папка, и то, что получит в ней агент, зависит от области установки, приоритета клиентов, файлов инструкций и каталога запуска. Как увидеть все четыре причины и сравнить два репозитория.</description>
      <category>Продукты</category>
      <category>Onplate</category>
      <category>AI-инструменты</category>
      <category>Проекты</category>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Onplate: инвентаризация пяти AI-клиентов</title>
      <link>https://tsymbal.dev/writing/onplate-ai-tools</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/onplate-ai-tools</guid>
      <description>Что накапливается в Claude Code, Codex, Cursor, GLM и OpenCode за год и как это разобрать: откуда взялся каждый файл, что находит сканер, сколько он стоит на каждом запросе и срабатывает ли скилл вообще.</description>
      <category>Продукты</category>
      <category>Onplate</category>
      <category>AI-инструменты</category>
      <category>Developer Tools</category>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Astro для блога</title>
      <link>https://tsymbal.dev/writing/simple-by-design</link>
      <guid isPermaLink="true">https://tsymbal.dev/writing/simple-by-design</guid>
      <description>Инженерный блог без CMS и базы: статья это файл в репозитории, локальная и production-сборки идут по одному коду, а в бою работает только nginx.</description>
      <category>Разработка</category>
      <category>Astro</category>
      <category>Deployment</category>
      <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
