<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vladimir Tsymbal: writing</title>
    <link>https://tsymbal.dev/en</link>
    <description>Writing about development, architecture, databases, and practical decisions that survive contact with production.</description>
    <language>en</language>
    <lastBuildDate>Sat, 26 Sep 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://tsymbal.dev/en/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>DHH stopped writing code by hand. How one engineer&apos;s opinion moves an industry</title>
      <link>https://tsymbal.dev/en/writing/dhh-and-industry-influence</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/dhh-and-industry-influence</guid>
      <description>In a year DHH went from fearing AI would drain his skill to refusing to write code by hand. Why one engineer&apos;s reversal changes which tools others accept.</description>
      <category>Industry</category>
      <category>AI tools</category>
      <category>Opinion</category>
      <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>PostgreSQL: three sources of time in one table</title>
      <link>https://tsymbal.dev/en/writing/postgres-timezones-three-clocks</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/postgres-timezones-three-clocks</guid>
      <description>A 30-minute reservation expired after only five minutes because the application and PostgreSQL wrote timestamps in different time zones to the same table. How we found it, why staging stayed green, and why the application now verifies the session time zone at startup.</description>
      <category>Development</category>
      <category>PostgreSQL</category>
      <category>Go</category>
      <category>GORM</category>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Priority inflation: if everything is urgent, nothing is</title>
      <link>https://tsymbal.dev/en/writing/priority-inflation</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/priority-inflation</guid>
      <description>Why a high-priority label loses its meaning when almost every ticket is marked urgent, and how to restore a clear order of work for the team.</description>
      <category>Management</category>
      <category>Leadership</category>
      <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Elastic APM: three bugs in one integration</title>
      <link>https://tsymbal.dev/en/writing/apm-sql-spans</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/apm-sql-spans</guid>
      <description>Three silent defaults across Gin, GORM, pgx, and Elastic APM: why SQL spans disappeared and why the same context bug also broke request cancellation.</description>
      <category>Development</category>
      <category>Go</category>
      <category>Elastic APM</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The Ringelmann effect</title>
      <link>https://tsymbal.dev/en/writing/ringelmann-effect</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/ringelmann-effect</guid>
      <description>The larger the group, the smaller the average contribution of each person in it.</description>
      <category>Leadership</category>
      <category>Leadership</category>
      <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Transactions in Go via context: one boundary for multiple repositories</title>
      <link>https://tsymbal.dev/en/writing/transactions-via-context</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/transactions-via-context</guid>
      <description>How to open a transaction at the use-case level, pass it to repositories without coupling business logic to an ORM, and handle nested calls correctly.</description>
      <category>Development</category>
      <category>Go</category>
      <category>Architecture</category>
      <category>PostgreSQL</category>
      <category>GORM</category>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Sentinel errors in Go: preserving meaning across layers</title>
      <link>https://tsymbal.dev/en/writing/sentinel-errors-go</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/sentinel-errors-go</guid>
      <description>Why a shared ErrNotFound conflates distinct failures, where sentinel errors belong, and how to translate GORM or database/sql errors at the repository boundary.</description>
      <category>Development</category>
      <category>Go</category>
      <category>Architecture</category>
      <category>Errors</category>
      <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>River in Go: background jobs in the same PostgreSQL transaction</title>
      <link>https://tsymbal.dev/en/writing/river-background-jobs</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/river-background-jobs</guid>
      <description>How to enqueue a River job in the same transaction as a business record in PostgreSQL, then run it safely in a separate worker.</description>
      <category>Development</category>
      <category>Go</category>
      <category>River</category>
      <category>GORM</category>
      <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Projects in Onplate: why the agent behaves differently next door</title>
      <link>https://tsymbal.dev/en/writing/projects-in-onplate</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/projects-in-onplate</guid>
      <description>A project is a folder, and what the agent receives in it depends on scope, precedence, instruction files, and the directory the session starts in. How to see all four and compare two repositories.</description>
      <category>Products</category>
      <category>Onplate</category>
      <category>AI tools</category>
      <category>Projects</category>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Onplate: an inventory of five AI clients</title>
      <link>https://tsymbal.dev/en/writing/onplate-ai-tools</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/onplate-ai-tools</guid>
      <description>What accumulates in Claude Code, Codex, Cursor, GLM, and OpenCode over a year, and how to audit it: where each file came from, what the scanner finds, what it costs per request, and whether a skill fires at all.</description>
      <category>Products</category>
      <category>Onplate</category>
      <category>AI tools</category>
      <category>Developer Tools</category>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Astro for a blog</title>
      <link>https://tsymbal.dev/en/writing/simple-by-design</link>
      <guid isPermaLink="true">https://tsymbal.dev/en/writing/simple-by-design</guid>
      <description>An engineering blog with no CMS and no database: an article is a file in the repository, local and production builds run the same code, and only nginx runs in production.</description>
      <category>Development</category>
      <category>Astro</category>
      <category>Deployment</category>
      <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
