<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Latest posts on Ilya Kaznacheev</title>
    <link>https://www.kaznacheev.me/posts/en/</link>
    <description>Recent content in Latest posts on Ilya Kaznacheev</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 30 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.kaznacheev.me/posts/en/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Agentic workflows for non-coding tasks</title>
      <link>https://www.kaznacheev.me/posts/en/workflow_skills/</link>
      <pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/workflow_skills/</guid>
      <description>&lt;p&gt;Writing code with AI is definitely cool and fun, but it doesn&amp;rsquo;t really impress me. After all, not having the code written automatically before is a lack of tooling, not a core constraint — there is nothing sacred in coding.&lt;/p&gt;&#xA;&lt;p&gt;What fascinates me — other &amp;ldquo;human processes&amp;rdquo;, which require a lot of effort, a lot of brain power, but are often less visible than coding or meetings.&lt;/p&gt;&#xA;&lt;p&gt;I like to apply the power of AI where the process itself is non-deterministic (unlike coding) — and leverage the nature of LLM to make the process better. And here I&amp;rsquo;m going to share with you how I do it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gazing at a Crystal Ball</title>
      <link>https://www.kaznacheev.me/posts/en/gazing-at-a-crystal-ball/</link>
      <pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/gazing-at-a-crystal-ball/</guid>
      <description>&lt;p&gt;What is software engineering? A mixture of science and craftsmanship, built on rules and logic. Once done, we expect a program to run the same predictable way, over and over again.&lt;/p&gt;&#xA;&lt;p&gt;Applications therefore are deterministic: the same input leads to the same output (if we treat state and side effects as input). But we still somehow have bugs, not because the app magically changes its behavior, but because programs are complex, and because we are humans.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How IaC Improves Business Profitability</title>
      <link>https://www.kaznacheev.me/posts/en/how-iac-improves-business-profitability/</link>
      <pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/how-iac-improves-business-profitability/</guid>
      <description>&lt;p&gt;As a platform architect, I often discuss Infrastructure as Code (IaC) with my clients. This simple shift in IT infrastructure management, which has been widely adopted by the modern tech industry, has many implicit benefits. In this article, I will explain what adopting IaC means for businesses and how it can help reduce costs and increase profits for the whole organisation, whether technical or non-technical.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Many Layers of Availability</title>
      <link>https://www.kaznacheev.me/posts/en/many-layers-of-availability/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/many-layers-of-availability/</guid>
      <description>&lt;p&gt;Today’s world is very different from what it was 20 years ago. We are used to a website loading in a second, a mobile app calculating a complex route in moments, or ordering a taxi with one button. This is made possible by combining many technologies and approaches that ensure smooth and fast operation.&lt;/p&gt;&#xA;&lt;p&gt;It is hard to imagine a taxi service suddenly stopping for 10 minutes. It is equally hard to picture a map or GPS navigator that suddenly stops updating, or a major online store freezing during payment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Step outside the Happy Path</title>
      <link>https://www.kaznacheev.me/posts/en/happy-path/</link>
      <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/happy-path/</guid>
      <description>&lt;p&gt;In software engineering, the term &lt;em&gt;happy path&lt;/em&gt; refers to the ideal scenario where everything works as planned. It&amp;rsquo;s natural to begin system design by focusing on these positive scenarios - they’re simple, straightforward, and align with how most people envision their product functioning.&lt;/p&gt;&#xA;&lt;p&gt;However, stopping at the happy path is a mistake. While it’s often sufficient for stakeholders from business backgrounds who lack technical expertise, it fails to address the majority of a system’s complexity. Robust systems excel not in perfect conditions but in their ability to handle problems and recover from failures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Product Architecture Cheat Sheet</title>
      <link>https://www.kaznacheev.me/posts/en/product-architecture-cheat-sheet/</link>
      <pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/product-architecture-cheat-sheet/</guid>
      <description>&lt;p&gt;In this article, I will give you a no-brainer for choosing the right architecture for any project. Right doesn&amp;rsquo;t mean perfect, but it does mean good enough.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Virtual Machine Scaling</title>
      <link>https://www.kaznacheev.me/posts/en/virtual_machine_scaling/</link>
      <pubDate>Mon, 25 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/virtual_machine_scaling/</guid>
      <description>&lt;p&gt;Virtual machines (VMs) are the basic building block of cloud infrastructure - all cloud products like databases, orchestrators, message queues, functions and others are based on them. Many companies also use virtual machines as the foundation of their cloud landscape, running all sorts of services and applications on them.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I will explain ways and approaches for scaling VMs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Where to Place Logger in Golang?</title>
      <link>https://www.kaznacheev.me/posts/en/where-to-place-logger-in-golang/</link>
      <pubDate>Fri, 24 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/where-to-place-logger-in-golang/</guid>
      <description>&lt;p&gt;Logging is an integral part of any application. However, the correct location and use of the logger in the project structure raises questions even for experienced developers.&lt;/p&gt;&#xA;&lt;p&gt;There are several ways of doing this, of which I give preference to one. I will explain why.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basics of cloud scaling</title>
      <link>https://www.kaznacheev.me/posts/en/basics_of_cloud_scaling/</link>
      <pubDate>Sat, 28 May 2022 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/basics_of_cloud_scaling/</guid>
      <description>&lt;p&gt;In this article, you will learn what application scaling is, and how cloud infrastructure simplifies the process and makes it more useful for business.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clean Transactions in Golang Hexagon</title>
      <link>https://www.kaznacheev.me/posts/en/clean-transactions-in-hexagon/</link>
      <pubDate>Sun, 13 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/clean-transactions-in-hexagon/</guid>
      <description>&lt;p&gt;How to implement transaction management in a hexagonal microservice? How to keep the isolation of the application layer and the database adapter? In this article I will share my experience in solving this problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Practical Use of Finite-State Machines</title>
      <link>https://www.kaznacheev.me/posts/en/practical-use-finite-state-machines/</link>
      <pubDate>Mon, 29 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/practical-use-finite-state-machines/</guid>
      <description>&lt;p&gt;This is the first article in a series dedicated to FSM usage in distributed system architecture. We will talk about domains, transactions, and sagas. But let&amp;rsquo;s start with the basics.&lt;/p&gt;&#xA;&lt;h2 id=&#34;finite-state-machine&#34;&gt;Finite-State Machine&lt;/h2&gt;&#xA;&lt;p&gt;When we think about the finite-state machine, we probably imagine some computer science-related entities, math, and diagrams like that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8egg9mj6k8b7o7yu1bh6.png&#34; alt=&#34;Boring FSM&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Besides scientific language, a finite-state machine is a final set of states and the transitions between them. When it comes to real engineering, states are a set of consistent states in which the model can be. Normally the set is not huge - having an FSM of a hundred states will cause really complex code. In my experience, it is something between three for the simplest models and 20-30 for most complex ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go-Swagger Tricks. Standard HTTP handler</title>
      <link>https://www.kaznacheev.me/posts/en/go_swagger_tricks/</link>
      <pubDate>Wed, 29 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/go_swagger_tricks/</guid>
      <description>&lt;p&gt;Hey, reader! Maybe you had tried &lt;code&gt;go-swagger&lt;/code&gt; library so far. If yes, you may notice that sometimes it&amp;rsquo;s not so easy to use. And it may look a bit complicated to start using it.&lt;/p&gt;&#xA;&lt;p&gt;In this number of small articles, I will share my experience on how to make go-swagger more friendly. Let&amp;rsquo;s start.&lt;/p&gt;&#xA;&lt;h2 id=&#34;handling-requests-in-go-swagger&#34;&gt;Handling requests in go-swagger&lt;/h2&gt;&#xA;&lt;p&gt;By default, go-swagger generates a specific handler type for each endpoint in your Swagger scheme - that is, you will get a code-generated structure with all import parameters kindly parsed for you and a number of responders for each response type (with pre-generated structures as well).&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I write my unit tests in Go quickly</title>
      <link>https://www.kaznacheev.me/posts/en/how-i-write-my-unit-tests-in-go-quickly/</link>
      <pubDate>Sun, 03 May 2020 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/how-i-write-my-unit-tests-in-go-quickly/</guid>
      <description>&lt;p&gt;We all love unit tests because they help us to keep our software workable. And we all hate them because they don&amp;rsquo;t appear magically - someone needs to write them. And when it comes to writing, it often takes a huge amount of time to cover the simplest cases.&lt;/p&gt;&#xA;&lt;p&gt;But I found my way to do that without pain (okay, with less pain). And I will share it with you like a simple illustrated guide.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clean Configuration Management in Golang</title>
      <link>https://www.kaznacheev.me/posts/en/clean-configuration-management-golang/</link>
      <pubDate>Sun, 15 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/clean-configuration-management-golang/</guid>
      <description>&lt;p&gt;There are many good approaches to handle configuration in a modern application. Now we use such things as configuration files, environment variables, command-line parameters, as well as CI configuration patterns and on-fly config file builds, remote config servers, specific mapping, and binding services and even more complex things.&lt;/p&gt;&#xA;&lt;p&gt;But the target is the same - provide the app with a configuration, which is fast to get and easy to use. But how to do that?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup, build, automate</title>
      <link>https://www.kaznacheev.me/posts/en/setup-build-automate/</link>
      <pubDate>Sun, 07 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/setup-build-automate/</guid>
      <description>&lt;h2 id=&#34;deploy-a-dockerized-app-to-heroku-fast&#34;&gt;deploy a dockerized app to Heroku fast!&lt;/h2&gt;&#xA;&lt;p&gt;Heroku is a beautiful service. Although it doesn’t support Kubernetes or give a so bright range of cloud infrastructure options, it still does a great job by hosting small applications (even for free).&lt;/p&gt;&#xA;&lt;p&gt;But the remote cloud configuration may be painful. It’s easy and nice until something goes wrong. It’s ok to dive into manuals and documentation, spend hours to understand how things work and so on. You are a developer after all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s wrong with godoc?</title>
      <link>https://www.kaznacheev.me/posts/en/whats-wrong-with-godoc/</link>
      <pubDate>Sun, 02 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/whats-wrong-with-godoc/</guid>
      <description>&lt;p&gt;Like many modern languages, Golang has built-in inline documentation support tool called &lt;code&gt;godoc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To be honest, it’s awesome. It is a really great tool, that has a real impact on the everyday coding process. At least if you use plugins with function call tips as I do.&lt;/p&gt;&#xA;&lt;p&gt;But there is the big problem of the majority Go-projects that is tightly related to &lt;code&gt;godoc&lt;/code&gt; but lays outside of it.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;godoc&lt;/code&gt; is really cool. You can document your methods and packages, paste a code snippet, that will have highlighting on the web page. Some IDE plugins will give you signature tips based on function documentation, e.g. description of parameters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clean way to pass configs in a Go application</title>
      <link>https://www.kaznacheev.me/posts/en/clean-way-pass-configs-go-application/</link>
      <pubDate>Sun, 12 May 2019 00:00:00 +0000</pubDate>
      <guid>https://www.kaznacheev.me/posts/en/clean-way-pass-configs-go-application/</guid>
      <description>&lt;p&gt;There are many concurrent approaches to organize application configuration nowadays.&lt;/p&gt;&#xA;&lt;p&gt;Classic &lt;code&gt;.ini&lt;/code&gt; files, &lt;code&gt;.json&lt;/code&gt;, &lt;code&gt;.toml&lt;/code&gt;, &lt;code&gt;.yaml&lt;/code&gt;, configs, modern &lt;code&gt;.env&lt;/code&gt; and, of course, container environment. And don’t forget about CLI arguments! Am I missing something?&lt;/p&gt;&#xA;&lt;p&gt;Let me be honest, I really dislike any implicitness in interfaces. Same for the CLI of course. Any of your interfaces, whether public or internal, API or object interface, a class method or module facade – they have to cooperate fair. The contract between you and the other side should be explicit, rightful and without any notes in small text at the bottom of the page.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
