<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex Rezvov</title>
    <description>The latest articles on DEV Community by Alex Rezvov (@arezvov).</description>
    <link>https://dev.to/arezvov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F909464%2F7063c552-d97b-4a5a-b1fe-7aaa6ba14706.jpg</url>
      <title>DEV Community: Alex Rezvov</title>
      <link>https://dev.to/arezvov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arezvov"/>
    <language>en</language>
    <item>
      <title>One Idea, Three Hundred Pages</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Fri, 15 May 2026 15:04:40 +0000</pubDate>
      <link>https://dev.to/arezvov/one-idea-three-hundred-pages-34mb</link>
      <guid>https://dev.to/arezvov/one-idea-three-hundred-pages-34mb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"99% were 1 idea stretched across 300 pages. They should have been blog posts."&lt;/p&gt;

&lt;p&gt;— &lt;a href="https://x.com/Nicolascole77/status/1478453846087286796" rel="noopener noreferrer"&gt;Nicolas Cole&lt;/a&gt;, after reading more than 500 business books&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have read a lot of business books, and most of them work in the same way. The author takes one simple idea and then turns it over from every side, on a long series of examples. Peter Sims' &lt;a href="https://www.simonandschuster.com/books/Little-Bets/Peter-Sims/9781439170434" rel="noopener noreferrer"&gt;Little Bets&lt;/a&gt; is a clear example of the type. The whole book is really one idea: when something is cheaper to test than to plan and assess the risks, you should test it instead of planning. I had that on the first page, the first example made it concrete, and then the rest of the book was the same idea about thirty more times.&lt;/p&gt;

&lt;p&gt;I liked Little Bets, I still use its idea regularly, and I recommend it to other people. That part never changed. What bothered me was the form. From the first read I was sure the book was artificially inflated, that the real content would fit in a few pages, and that everything else was there to turn it into something thick enough to sell.&lt;/p&gt;

&lt;p&gt;For a long time my model of how an idea should be presented was the opposite of this. It was Martin Fowler's &lt;em&gt;UML Distilled&lt;/em&gt;, a deliberately thin book about a very large subject. Fowler treats the slimness as the whole point rather than a limitation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"My proudest thing about this book is that it's under half an inch thick — which was very unusual for OO modeling books at that time."&lt;/p&gt;

&lt;p&gt;— Martin Fowler, &lt;a href="https://martinfowler.com/books/uml.html" rel="noopener noreferrer"&gt;UML Distilled&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So my verdict on books like Little Bets was simple, and for years it did not move. They are padded. There is one paragraph of real content, and the rest exists to make the object heavy enough to sell. I was right about part of that, and wrong about the rest, and this is what changed my mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  The economics: the padding is real
&lt;/h2&gt;

&lt;p&gt;Let me start with the part I had right, because it is true and worth saying plainly.&lt;/p&gt;

&lt;p&gt;A nonfiction book has a minimum practical size. Most of them land somewhere between 50,000 and 90,000 words, and the reason is physical rather than intellectual. A book too thin to have a visible spine does not survive on a shelf, and you cannot really sell a fifteen-page argument as a 25-dollar hardcover. The format needs a certain length, the idea itself rarely supplies it, and so the examples are what end up filling the gap.&lt;/p&gt;

&lt;p&gt;The economics make this even clearer. Most business books sell fewer than 5,000 copies, at one or two dollars of royalty each, so the book itself is not actually the product. It works much more like a business card. The real income comes from talks and consulting, where a single paid workshop can bring in more than a thousand sold copies would. Seen from that side, "one idea stretched across 300 pages" is not a failure of the book at all. It is the book doing exactly the job it was written to do.&lt;/p&gt;

&lt;p&gt;There is even a market that sells the short version directly. &lt;a href="https://www.blinkist.com" rel="noopener noreferrer"&gt;Blinkist&lt;/a&gt;, Headway and &lt;a href="https://www.shortform.com" rel="noopener noreferrer"&gt;Shortform&lt;/a&gt; together form a several-hundred-million-dollar industry whose entire product is these same books with the repetition taken out, and Headway alone &lt;a href="https://makeheadway.com" rel="noopener noreferrer"&gt;reports more than 50 million downloads&lt;/a&gt;. People are paying, specifically, to get the one sentence without the other 299 pages.&lt;/p&gt;

&lt;p&gt;So the cynical view holds up well enough. The trouble is that it only explains why the books are built this way. It does not explain why some of them actually work on the reader.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I saw when I explained things to people
&lt;/h2&gt;

&lt;p&gt;The other half of the answer did not come from books at all. It came from years of explaining things to people.&lt;/p&gt;

&lt;p&gt;The pattern is always the same. You explain a task, the person agrees and tells you it is clear, and a week later it turns out it was not clear at all. What took me far too long to accept is that they were not pretending. They were genuinely sure they had understood it. Either they did not ask the question that would have exposed the gap, or they could not see the gap themselves. At first I thought this was about particular people. Then I started seeing it in almost everyone I worked with, and eventually I saw it in myself.&lt;/p&gt;

&lt;p&gt;This turns out to be well studied, and the experiments are more direct than you would expect.&lt;/p&gt;

&lt;p&gt;In 2002, Rozenblit and Keil asked people how well they understood ordinary objects, such as a zipper, a flush toilet, or a helicopter. Then they asked them to explain, step by step, how each one actually works. The moment people tried to produce the explanation they were certain they already had, their own rating of their understanding dropped by almost a full point on a seven-point scale. The effect is strongest for how-and-why knowledge, which is exactly the kind of knowledge a nonfiction book is made of. The name for this is the &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC3062901/" rel="noopener noreferrer"&gt;illusion of explanatory depth&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Roediger and Karpicke ran a study like this in 2006. They split people into two groups. One group simply reread the material. The other group put the text away and practiced recalling it from memory instead of reading it again. The rereading group was the more confident that it would remember. A week later it actually remembered less, scoring 40 percent against 61 percent for the group that had practiced recalling. The group that felt more sure of itself was the group that did worse. Rereading feels easy the second time through, and it is that easy feeling that the mind mistakes for actually knowing the material.&lt;/p&gt;

&lt;p&gt;So when someone says they understood something and they actually did not, it is not because they were careless, and it is not because they are not capable. It is a known and repeatable mistake in the way people judge their own understanding, and I make it just as easily as anyone else does.&lt;/p&gt;

&lt;h3&gt;
  
  
  The same mistake on my side
&lt;/h3&gt;

&lt;p&gt;There is a matching error on my side of the table, and it is harder to catch because I cannot feel it from the inside either. It is called the curse of knowledge. In one well-known study, people tapped out the rhythm of a famous song and predicted that listeners would recognize it about half the time. The listeners recognized 3 out of 120, which is a little over two percent. Once the tune is already playing in your head, you simply cannot model the person who does not have it there.&lt;/p&gt;

&lt;p&gt;When an idea is obvious to me after a single sentence, I am the person tapping out the tune, and I cannot honestly judge how many passes the other person needs. So "it is padding" and "they said they understood but they did not" turn out to be the same error seen from two ends. The reader believes more arrived than really did, and the writer believes one pass was enough. Both mistakes push in the same direction, and the repetition in a book is what corrects for both of them at the same time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the science stops agreeing with me
&lt;/h2&gt;

&lt;p&gt;Here I have to be careful, because the convenient version of this argument is actually wrong.&lt;/p&gt;

&lt;p&gt;The science does not support "say it a hundred times." Rereading the same text is in fact one of the weakest ways to learn anything. In Dunlosky's 2013 review of study techniques, plain rereading and highlighting came out near the bottom, while self-testing and spaced practice came out on top. A book that repeats the same sentence thirty times in a row really is bad padding, and on that specific case the cynical view is entirely correct.&lt;/p&gt;

&lt;p&gt;What actually works is not repetition but re-encounter: meeting the same idea again after some time has passed, in a different form, and ideally while you reconstruct it yourself rather than just reading quickly past it. A book that comes back to its central point through a different chapter, a different case and a different angle is doing exactly what the evidence supports. A book that comes back to it word for word is not. That, in the end, is the difference between a book that changes how you work and a book you only finish out of stubbornness. The thing that mattered was never the number of repetitions, it was their variety.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why different examples, not more repetition
&lt;/h2&gt;

&lt;p&gt;The clearest result in this whole area is the one about examples specifically.&lt;/p&gt;

&lt;p&gt;Gick and Holyoak gave people a puzzle that almost no one could solve on their own. First they gave some of them one story that had nothing to do with the puzzle on the surface but was solved in the same way, and about 30 percent of those people then solved the puzzle. Then they gave another group &lt;a href="https://reasoninglab.psych.ucla.edu/wp-content/uploads/sites/273/2021/04/Gick_Holyoak1983_SchemaInduction.pdf" rel="noopener noreferrer"&gt;two such stories, different on the surface but solved by the same trick&lt;/a&gt;, and about 52 percent of that group solved it. Seeing the same trick in two different disguises is what let people notice the trick itself, apart from the story it was wrapped in. Rohrer and Taylor found the same thing in ordinary math practice: students who practiced several problem types mixed together did far better on a later test, 63 percent, than students who practiced one type at a time in blocks, who scored 20 percent.&lt;/p&gt;

&lt;p&gt;With a single example, you tend to remember only that example, tied to its own story. With several different examples, what stays with you is the general idea itself, and you can apply it to your own case, one the author never described. So "one idea, ten different stories" is not the author padding the book out. It is the only reliable way to make the idea usable in a situation other than the one on the page. The examples that felt repetitive were the part that was actually teaching you. They felt repetitive only because you cannot feel the learning happening while you read.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I take from this
&lt;/h2&gt;

&lt;p&gt;So my old verdict was only half right. Here is what I am actually taking from it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The repetition in these books is doing real work, and I need to learn to do the same thing on purpose. If I want an idea to stay in a reader's head, saying it once is not enough. It has to come back, in different forms, until it is wired in and not just heard once.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This looks a lot like training a model. To fix a fact in a neural network you show it again and again, in different forms, until it settles into the weights. A book does the same thing, except the network being trained is the one in the reader's head. Different hardware, same need for repetition, and the neurons still have to do the work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And this openly contradicts DRY and the &lt;a href="https://blog.rezvov.com/principle-of-parsimony-in-context-engineering" rel="noopener noreferrer"&gt;principle of parsimony&lt;/a&gt;, which I have argued for for years, including in &lt;a href="https://blog.rezvov.com/less-documentation-more-signal" rel="noopener noreferrer"&gt;less documentation and more signal&lt;/a&gt;. Say a thing once, never repeat it: that is right for code and for reference docs. It is wrong for getting an idea to stay in a person. So the question I am left with is not "fewer words or more words." The information itself should still be stored parsimoniously: written once, tight, nothing repeated. The repetition belongs in how it is delivered, not in the source. You take that one tight version, give it to the person again in different forms, and check what actually stuck by making them recall it instead of rereading it. An LLM could sit right there, turning one parsimonious source into the varied repetition and the recall checks, different for each person. There is something worth thinking about here.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And this article will probably need to be repeated in other forms too. Right?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/one-idea-three-hundred-pages" rel="noopener noreferrer"&gt;One Idea, Three Hundred Pages — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reflections</category>
      <category>opinion</category>
      <category>parsimony</category>
    </item>
    <item>
      <title>The Future of User Interfaces and the Role of AI</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Tue, 12 May 2026 14:05:04 +0000</pubDate>
      <link>https://dev.to/arezvov/the-future-of-user-interfaces-and-the-role-of-ai-4e73</link>
      <guid>https://dev.to/arezvov/the-future-of-user-interfaces-and-the-role-of-ai-4e73</guid>
      <description>&lt;h2&gt;
  
  
  The Scene
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;"Find me marathon shoes for the next race. Neutral stride, sixty kilometers a week, budget around two-fifty."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A minute later three options come back, each with reasons. I say &lt;em&gt;"give me the second one, size 43."&lt;/em&gt; Another minute later: payment confirmation, delivery date, no five-step forms. I never went near a website. I never tapped a button in someone else's UI. I don't even have an account at this store.&lt;/p&gt;

&lt;p&gt;This isn't science fiction. It's 2026. OpenAI and Stripe shipped the &lt;strong&gt;Agentic Commerce Protocol&lt;/strong&gt;. Google and Shopify shipped the &lt;strong&gt;Universal Commerce Protocol&lt;/strong&gt;. Visa, Mastercard, Amazon, Walmart, Etsy are on board. AI-driven traffic to Shopify is up 8x year over year, orders out of AI-powered search up 15x. There's an LLM between me and the store.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For the skeptics.&lt;/strong&gt; What I described above already runs at maybe seventy or eighty percent. Inside ChatGPT you can buy from Etsy and onboarded Shopify merchants through &lt;a href="https://openai.com/index/buy-it-in-chatgpt/" rel="noopener noreferrer"&gt;Instant Checkout&lt;/a&gt;, which launched in February 2026. In March, OpenAI &lt;a href="https://www.cnbc.com/2026/03/24/openai-revamps-shopping-experience-in-chatgpt-after-instant-checkout.html" rel="noopener noreferrer"&gt;walked some of it back&lt;/a&gt;; for many Shopify merchants the actual checkout now happens on the merchant's storefront, inside an in-app browser. The agent also doesn't pull a personal fitness profile by itself yet. The rest closes over the next year or two.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This piece is about how the user interface is changing and where the LLM sits in that change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today's UI Is a Barrier
&lt;/h2&gt;

&lt;p&gt;The "user interface" today is a pile of separate sites and apps. Online stores, dating apps, social networks, banks, insurance portals, hospital portals, government portals. Each one with its own menus, its own vocabulary, its own funnels. Every user has to figure each one out from scratch.&lt;/p&gt;

&lt;p&gt;And most of what those products can do never reaches the user.&lt;/p&gt;

&lt;p&gt;Microsoft's team found this when they were planning the 2007 Office redesign:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"A study had shown that about 90% of the feature requests for Microsoft Office were for features already in the product. One of the major design goals for Microsoft Office 2007 was making features easier to discover. People just didn't know what was already there."&lt;/em&gt; — &lt;a href="https://www.johndcook.com/blog/2009/12/16/ms-office-ribbon/" rel="noopener noreferrer"&gt;John D. Cook, "Did the MS Office ribbon work?" (2009)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Users were asking for things that already existed. They just couldn't find them.&lt;/p&gt;

&lt;p&gt;Twenty years on, the same problem is systemic enough that Gartner tracks a whole category around solving it: &lt;strong&gt;Digital Adoption Platforms&lt;/strong&gt;. These are overlays that sit on top of business software and whisper hints to the user about what the software actually does. According to Gartner's Market Guide for DAP (September 2025), the DAP market grew around 28% year over year to $1.04 billion in 2024, with projected growth of 15 to 20% in 2025. An entire industry exists to tear down the UI barrier on software people have already paid for.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What I take from this data.&lt;/strong&gt; People keep asking for capabilities that already exist in the product. The features aren't broken. &lt;strong&gt;The interface is a barrier&lt;/strong&gt;, and you have to fight it to find what you need. A whole class of enterprise software exists just to take that barrier down.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What's Already Happening: Delegation to Agents
&lt;/h2&gt;

&lt;p&gt;People no longer have to navigate every interface themselves. First came research delegation: ChatGPT, Perplexity, Claude doing the searching, comparing, reviewing on the user's behalf. Then autonomous browsing: &lt;a href="https://www.anthropic.com/news/3-5-models-and-computer-use" rel="noopener noreferrer"&gt;Anthropic Computer Use&lt;/a&gt;, &lt;a href="https://openai.com/index/introducing-operator/" rel="noopener noreferrer"&gt;OpenAI Operator&lt;/a&gt;, &lt;a href="https://blog.google/technology/google-deepmind/google-gemini-ai-update-december-2024/" rel="noopener noreferrer"&gt;Google Project Mariner&lt;/a&gt;. Agents driving browsers for you. In 2025 and 2026, e-commerce got direct agent APIs: two competing standards, &lt;strong&gt;ACP&lt;/strong&gt; (OpenAI + Stripe) and &lt;strong&gt;UCP&lt;/strong&gt; (Google + Shopify, with Amazon, Mastercard, Visa, Meta, Microsoft, and Walmart behind it).&lt;/p&gt;

&lt;p&gt;Other verticals (dating, social, banking, healthcare, government) are still at "open API for partners," without dedicated agent protocols. E-commerce ran first; the rest will follow the same pattern.&lt;/p&gt;

&lt;p&gt;The technology is in place. The infrastructure is being built right now. &lt;strong&gt;There's going to be an LLM intermediary between the user and the business.&lt;/strong&gt; The traditional UI stops being necessary for everyday operations. It survives as an engineering debug tool, and in a handful of specific cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Surfaces of the Future
&lt;/h2&gt;

&lt;p&gt;The intermediary has two forms of interaction with a business:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Agent-mediated.&lt;/strong&gt; The user has a personal agent. The agent talks to the business through a programmatic API (REST, MCP, agent-to-agent protocols), negotiates, buys, signs, tracks. The user never sees the business's website, forms, or menus. From the user, the agent needs a goal and delegation rights. From the business, it needs an API and its documentation.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Personally, I don't see a reason to replace REST with something new for this. I'll write that up separately one day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single-window text-or-voice.&lt;/strong&gt; When the user doesn't have a personal agent (an older person who never set one up; a public terminal at the airport or hospital), they end up in one window, shared across all their interactions. No sites, no apps, no navigation. They just say what they want, in plain language.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The fundamental difference between these two surfaces is who owns the conversation's context.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the first case, the user's agent prepares and stores the context. The business just gives a clean API. What the user's goal is, what the next steps are, what parts of the history matter: all of that lives with the agent.&lt;/p&gt;

&lt;p&gt;In the second case, the business prepares and stores the context. It has to remember who this user is, where they are in the dialogue, what facts have been collected, what prompt and what model fit this moment, when to move to the next state.&lt;/p&gt;

&lt;p&gt;Which raises the question: what does &lt;em&gt;"has to remember and switch"&lt;/em&gt; actually mean?&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Smart LLM Alone Won't Cover It
&lt;/h2&gt;

&lt;p&gt;The natural answer is: feed everything into a long prompt, give the model the whole history, let it figure things out. Each new model release figures things out a little better. So why do you need a structural layer at all?&lt;/p&gt;

&lt;p&gt;Five structural reasons why &lt;em&gt;"just a smart LLM"&lt;/em&gt; doesn't get you there. None of them go away with a better model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auditability.&lt;/strong&gt; Regulators (SOC 2, HIPAA, PSD2 SCA, GDPR Article 22) expect a deterministic, replayable path through the sensitive parts of a conversation. &lt;em&gt;"The strong model made the right call"&lt;/em&gt; isn't the kind of justification an auditor accepts without serious follow-up questions. A state graph gives an explicit path, tied to policies, facts, and transitions. It cuts the cost of an audit a lot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Editability without a developer.&lt;/strong&gt; A compliance officer should be able to change one state without involving engineering. In a megaprompt, that kind of edit is a risk of regressing everything else. In an FSM it's a local change with an explicit blast radius.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personalization without leaks.&lt;/strong&gt; In the LLM-only approach, all per-user facts usually sit right in the system prompt or in the context window. The model sees everything about every active user and gets to decide what to use. One slip (a jailbreak, a prompt injection, a routine hallucination) and facts from one session show up in another. A state machine inverts that: facts live in a fact store outside the prompt, each state &lt;strong&gt;declares which facts it needs&lt;/strong&gt;, and only those facts go into the prompt for the current turn. The model physically doesn't have the data the current state isn't entitled to. &lt;a href="https://en.wikipedia.org/wiki/Personal_data" rel="noopener noreferrer"&gt;PII&lt;/a&gt; leakage is its own category on the &lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;OWASP LLM Top 10 (LLM02:2025)&lt;/a&gt;, which jumped to #2 in the 2025 revision (it was #6 in 2023).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost and latency.&lt;/strong&gt; A long prompt that "knows everything" doesn't scale. Every turn pays for re-loading the whole history. Per-state assembly gives each step the minimum it needs. That's &lt;a href="https://blog.rezvov.com/principle-of-parsimony-in-context-engineering" rel="noopener noreferrer"&gt;&lt;strong&gt;parsimony&lt;/strong&gt;&lt;/a&gt; as an architectural requirement, not as an optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operator-managed evolution.&lt;/strong&gt; When the business process changes, the FSM changes: one state, one transition, one prompt. Without the structural layer, any change to the business process means a developer-grade release of the megaprompt, then re-validating and re-testing the whole thing.&lt;/p&gt;

&lt;p&gt;A structural layer is needed regardless of how smart the model gets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood: A State Machine for a Marathon Shoe Store
&lt;/h2&gt;

&lt;p&gt;Let's take the scene from the top of the article and walk a customer through the full life cycle, from first visit to a product exchange. I'm picking states at the level of life-cycle phases, not micro-steps. That's where an LLM without an FSM actually starts losing context and dropping policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sign-up and authentication.&lt;/strong&gt; What this looks like in the LLM-intermediary world is genuinely an open question. Maybe identity gets confirmed through the user's agent provider, and a separate account at every shop is no longer required. Maybe guest checkout with email survives. Maybe a unified identity layer shows up. Whatever form wins, the FSM still needs a state here: this is where the shop decides who's on the other end and which policies apply from here on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shopping and cart.&lt;/strong&gt; &lt;em&gt;"Find me marathon shoes, about sixty kilometers a week, budget around two-fifty."&lt;/em&gt; State &lt;code&gt;shopping&lt;/code&gt;. The LLM runs the conversation: asks what matters (cushion, pronation, current shoe), filters the catalog, presents options with reasoning. Policies specific to commerce live on this state. For example: &lt;em&gt;don't recommend a model with a drop under 4 mm if the customer's history shows a stress fracture&lt;/em&gt;. That policy isn't smeared across a giant prompt; it's bound to &lt;code&gt;shopping&lt;/code&gt; and active only here. When the user says &lt;em&gt;"give me the second one, size 43,"&lt;/em&gt; the choice goes into the fact store, and the FSM checks the exit conditions on &lt;code&gt;shopping&lt;/code&gt; (stock, shipping, price agreement) before transitioning to checkout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkout.&lt;/strong&gt; State &lt;code&gt;checkout&lt;/code&gt;. Payment method, shipping address, final price, explicit confirmation. Transition into &lt;code&gt;payment_processing&lt;/code&gt; with the external provider, then state &lt;code&gt;payment_confirmation&lt;/code&gt; waits on a webhook. For high-value orders, step-up authentication kicks in automatically. Every transition is written to the audit trail. Only after a successful charge is recorded does the state move to &lt;code&gt;order_placed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post-purchase follow-up (proactive).&lt;/strong&gt; Two weeks after delivery, the FSM starts the conversation itself: &lt;em&gt;"how are the shoes treating you?"&lt;/em&gt; State &lt;code&gt;post_purchase_followup&lt;/code&gt; collects feedback and classifies the answer. All good → case closed. Neutral → feedback goes to analytics. A problem → the FSM moves to &lt;code&gt;support_request&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support request (reactive).&lt;/strong&gt; &lt;em&gt;"They're rubbing me on the heel."&lt;/em&gt; State &lt;code&gt;support_request&lt;/code&gt;. The LLM gathers more facts (for how long, photos if needed, wearing patterns), the FSM classifies the case: warranty defect, wrong model, wrong size, simple break-in. Based on the classification, it transitions to one of the terminal states: &lt;code&gt;dismiss_with_advice&lt;/code&gt;, &lt;code&gt;refund&lt;/code&gt;, or &lt;code&gt;exchange&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exchange with a human in the loop.&lt;/strong&gt; State &lt;code&gt;exchange&lt;/code&gt;. The FSM doesn't try to settle this on its own. It calls a tool: &lt;code&gt;request_back_office_review(case_id, reason, photos, customer_history)&lt;/code&gt;. The case goes into the shop's back-office queue, the FSM moves to &lt;code&gt;awaiting_human_review&lt;/code&gt;, and the conversation with the user pauses (&lt;em&gt;"we've got this, we'll be back to you within the day"&lt;/em&gt;). A real person on the shop's side (warehouse, customer service) looks at the case, approves it, asks for photos, or declines, and their decision comes back through a webhook. The FSM picks up the conversation with the user from there: &lt;em&gt;"exchange approved, the courier picks up the old pair on Thursday."&lt;/em&gt; That last bit is unique to a state-machine-class system: automation → tool call → human → callback → automation, all inside one uninterrupted conversation with the user.&lt;/p&gt;

&lt;p&gt;If a regulator asks &lt;em&gt;"why didn't this user get the mandatory disclosure at checkout?"&lt;/em&gt;, the shop can show the trace: this state, this validator, this fact, this result. The same shop on the same LLM would work without the state graph, but the auditing and debugging would have to happen by hand, reading through long prompts and message logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  A CMS for the Post-Website World
&lt;/h2&gt;

&lt;p&gt;The analogy I carry: what CMS was for the web, an FSM engine is for post-web dialogues.&lt;/p&gt;

&lt;p&gt;CMS defined page types, content models, navigation, permissions, publishing workflows. The website was the product; the CMS was the invisible backbone.&lt;/p&gt;

&lt;p&gt;An FSM engine defines states, fact schemas, transitions, policies, escalations. The dialogue is the product; the FSM is the backbone.&lt;/p&gt;

&lt;p&gt;The main thing they share: both layers define structure &lt;strong&gt;statically, ahead of time&lt;/strong&gt;. A page in a CMS exists until someone edits it. A state in an FSM and the instructions inside it are fixed. That's exactly what gives you determinism and auditability: the operator knows what instructions the model will receive when the user lands in state X. Not &lt;em&gt;"the model will figure it out,"&lt;/em&gt; but &lt;em&gt;"these are the exact instructions for this state."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There's dynamic stuff too: which state the user is in right now, which facts get injected, which slice of history matters this turn. But the skeleton inside which that dynamism happens is fixed. That's the guarantee, not a limitation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for People Who Build Products
&lt;/h2&gt;

&lt;p&gt;The unit of design is no longer a screen. It's a &lt;strong&gt;state&lt;/strong&gt;. The UX designer becomes a conversation architect: they design the state graph, write per-state prompts, define transition validators, sketch fact schemas. It's parallel to how UX moved from page-by-page design to component systems in the 2010s. Now the components are conversational states.&lt;/p&gt;

&lt;p&gt;I know what I'm writing about because I'm building exactly this kind of system: &lt;a href="https://exo-chat.com" rel="noopener noreferrer"&gt;ExoChat, an engine for managed LLM dialogues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One more thing I noticed while writing this piece: the same argument runs recursively. &lt;strong&gt;The agents themselves (ChatGPT, Perplexity, Claude, Operator) could use an FSM skeleton on the inside.&lt;/strong&gt; I'll write that one up separately too.&lt;/p&gt;

&lt;p&gt;One disclaimer before we wrap: not all UIs disappear. Creative tools (Figma, Premiere, Logic Pro), code editors (IDEs), and games stay canvas-based. The LLM intermediary still shows up alongside them: AI agents inside Figma, Copilot, Claude Code, and Cursor in IDEs, generative pipelines and LLM-driven NPCs in gamedev. The canvas as a way to work isn't going anywhere; voice and text won't replace it. This article isn't about those domains. It's about the interaction between a user and a business in pursuit of a product, a service, or information.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Taking Away
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;REST APIs as the default agent surface.&lt;/strong&gt; That's already the standard in everything we build. The article just confirms the direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot ExoChat against a real online store.&lt;/strong&gt; It's both a real test of the single-window surface and a strong demo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;And you?&lt;/strong&gt; What does this change for the product you're building?&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/ai-and-the-future-of-user-interfaces" rel="noopener noreferrer"&gt;The Future of User Interfaces and the Role of AI — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aidrivendevelopment</category>
      <category>architecture</category>
      <category>contextengineering</category>
      <category>exochat</category>
    </item>
    <item>
      <title>The Parable of the Three Physician Brothers</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Fri, 08 May 2026 05:39:42 +0000</pubDate>
      <link>https://dev.to/arezvov/the-parable-of-the-three-physician-brothers-4j8m</link>
      <guid>https://dev.to/arezvov/the-parable-of-the-three-physician-brothers-4j8m</guid>
      <description>&lt;p&gt;A remarkable parable from ancient China tells the story of three physician brothers: the youngest, most renowned, treated visible illnesses; the middle brother addressed issues in their early stages; and the eldest, unknown to society, focused on prevention to keep people healthy in the first place. The essence of this parable resonates in our daily lives, including the world of business.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Parable of the Three Physician Brothers
&lt;/h3&gt;

&lt;p&gt;It's common to hear praise for a leader who is skilled and dedicated, someone who tackles challenges head-on. Such a leader might spend every day fighting fires, holding the entire department together, and making every critical decision. This leader represents the youngest brother in the story—always in the spotlight, knowledgeable, and indispensable.&lt;/p&gt;

&lt;p&gt;The leader who mirrors the middle brother is less celebrated. They address problems early, preventing them from escalating into significant crises. Their work often goes unnoticed because the issues never reach a dramatic scale.&lt;/p&gt;

&lt;p&gt;The eldest brother, however, is almost invisible. In their department, everything runs smoothly. They foresee potential issues and resolve them before they arise. To the untrained observer, it may appear that their job is easy, that they have a fortunate team, or that they simply enjoy good luck.&lt;/p&gt;

&lt;p&gt;I’ve often seen the youngest brothers from this parable praised and promoted, while the eldest brothers are overlooked—even though they achieve far greater results.&lt;/p&gt;

&lt;p&gt;Have you encountered this kind of unfair treatment?&lt;/p&gt;




&lt;h3&gt;
  
  
  The Text of the Parable
&lt;/h3&gt;

&lt;p&gt;Once, in ancient China, there were three brothers, all of whom were physicians. People considered the youngest to be the most skilled, and his reputation spread across neighboring provinces. The middle brother had fewer patients, but he was well-known in their hometown. The eldest brother, however, was barely recognized as a doctor and had very few patients.&lt;/p&gt;

&lt;p&gt;One day, a young man asked the youngest brother, "Why do you have so many patients? Is it because you're the best doctor?"&lt;/p&gt;

&lt;p&gt;The youngest brother replied: "I treat illnesses when they have already manifested, alleviating symptoms and restoring health to the sick. That’s why so many people come to me."&lt;/p&gt;

&lt;p&gt;Curious, the young man turned to the middle brother with the same question.&lt;/p&gt;

&lt;p&gt;The middle brother answered: "I treat illnesses in their early stages, before they become severe, and prevent them from worsening. That’s why I have fewer patients than my younger brother."&lt;/p&gt;

&lt;p&gt;Still intrigued, the young man visited the eldest brother. "What about you?" he asked. "Why are you almost unknown, with so few patients?"&lt;/p&gt;

&lt;p&gt;The eldest brother smiled and said: "I teach people to maintain their health, balance their mind and body, and prevent illnesses before they even begin. I speak with spirits and harmonize energies. Those who follow my guidance rarely fall ill, and they don’t need treatment."&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/the-parable-of-the-three-physician-brothers" rel="noopener noreferrer"&gt;The Parable of the Three Physician Brothers — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>reflections</category>
    </item>
    <item>
      <title>How Ecodomen.ru Helps Save on Domains</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Mon, 04 May 2026 10:45:07 +0000</pubDate>
      <link>https://dev.to/arezvov/how-ecodomenru-helps-save-on-domains-4k0d</link>
      <guid>https://dev.to/arezvov/how-ecodomenru-helps-save-on-domains-4k0d</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ecodomen.ru&lt;/strong&gt; is a volunteer-driven project with open-source code. Its mission is to create a platform that helps users save money on domain registration and renewal.&lt;/p&gt;

&lt;p&gt;The recommended usage: to find the most cost-effective domain registrar in the &lt;code&gt;.ru&lt;/code&gt; zone for the long term, visit &lt;a href="https://ecodomen.ru" rel="noopener noreferrer"&gt;https://ecodomen.ru&lt;/a&gt;, enable sorting by ascending renewal cost, and choose the option that suits you best—likely the first result.&lt;/p&gt;

&lt;p&gt;In this article, I will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What problems Ecodomen.ru solves for users&lt;/li&gt;
&lt;li&gt;  Our future plans&lt;/li&gt;
&lt;li&gt;  Who we’re inviting to join our team&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  About the Product
&lt;/h3&gt;

&lt;p&gt;If you’re planning to create your own website, you’ll need to choose and register a domain name—a unique address for your site on the internet, such as &lt;code&gt;mydomain.ru&lt;/code&gt;. This requires contacting a domain registrar, a company that specializes in registering such addresses. To avoid naming names, here’s a &lt;a href="https://en.wikipedia.org/wiki/Domain_name_registrar" rel="noopener noreferrer"&gt;link to Wikipedia&lt;/a&gt; that provides examples of registrars.&lt;/p&gt;

&lt;p&gt;Interestingly, while all registrars essentially offer the same service—domain registration—their prices can vary significantly. For example, the cost of renewing a domain for the next year can range from 149 to 19,999 RUB, depending on the registrar. On average, renewal prices hover around 1,000-2,000 RUB per year based on observations of clients and developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ecodomen.ru&lt;/strong&gt; is a service that helps users find and compare prices for different registrars’ services. With this tool, you can easily choose the best offer, especially if you need to register or renew multiple domains. By using Ecodomen.ru, you can significantly reduce domain management costs.&lt;/p&gt;




&lt;h3&gt;
  
  
  Project History
&lt;/h3&gt;

&lt;p&gt;The project began as a playground for one developer, Maria (&lt;a href="https://github.com/orgs/ecodomen/people/mrezvova" rel="noopener noreferrer"&gt;https://github.com/orgs/ecodomen/people/mrezvova&lt;/a&gt;), as a so-called pet project. It quickly became clear that the workload was too much for one person, so we started looking for developers who also wanted to practice their skills.&lt;/p&gt;

&lt;p&gt;Our first attempt to attract new contributors was in Maria’s programming club at her high school. However, when students who had just learned to print “Hello World” in the console saw a project with a “serious” tech stack, it was clear they weren’t ready to participate due to their skill levels.&lt;/p&gt;

&lt;p&gt;We turned to the job market, and the initial team of developers was assembled through an unpaid internship. This team consisted of trainees who needed experience working on a large—“almost commercial”—project and developing teamwork skills. Together, we completed most of the work on the first version of the product.&lt;/p&gt;

&lt;p&gt;As the project grew, the team expanded to include a project manager, designer, tester, and frontend developers. This allowed us to improve the site’s functionality and appearance, better organize our work, and ensure higher quality in the final product.&lt;/p&gt;

&lt;p&gt;However, after a few months, many developers transitioned to other, paid projects, while others left for personal reasons. We once again recruited new developers.&lt;/p&gt;

&lt;p&gt;Today, the project’s chat has over 20 participants, each contributing to the project with varying degrees of activity. To emphasize, the project is organized on a volunteer basis, meaning all participants work without compensation.&lt;/p&gt;

&lt;p&gt;For more details about the team and the project’s history, watch this video:&lt;/p&gt;




&lt;h3&gt;
  
  
  Current State and Future Plans
&lt;/h3&gt;

&lt;p&gt;The product is currently in its MVP (Minimum Viable Product) stage. We have implemented price parsers for all registrar websites where it was feasible. For the remaining 3% of registrars, prices were entered manually.&lt;/p&gt;

&lt;p&gt;The parsers periodically (ideally daily) update price data from registrar websites. The collected data is presented on a webpage, where users can sort and filter by the most useful parameters: name, website, and prices for registration, renewal, and transfer of &lt;code&gt;.ru&lt;/code&gt; domains.&lt;/p&gt;

&lt;p&gt;It’s important to explain why we collect these three specific prices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Registration cost:&lt;/strong&gt; The price of leasing a domain for the first year. This is usually the most visible price for users and often the first thing they notice. Registrars often set this price very low but increase it significantly in subsequent years.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Renewal cost:&lt;/strong&gt; The price of leasing a domain for the second and subsequent years. This is the cost users should pay the most attention to, as it determines the long-term expenses of owning a domain. However, this price is often less prominently displayed on registrar websites.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Transfer cost:&lt;/strong&gt; This is useful to know if you decide to move your domains from one registrar to another. The registrar receiving your domains will charge this fee.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With these functionalities, we aim to confirm the product’s value for users and continue developing its features based on their feedback.&lt;/p&gt;

&lt;p&gt;In addition, we have ambitious technical plans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Splitting the backend (using Django REST Framework or FastAPI) and frontend (using React.js or Vue.js).&lt;/li&gt;
&lt;li&gt;  Developing a microservices-based backend with FastAPI for experimentation.&lt;/li&gt;
&lt;li&gt;  Migrating the database from PostgreSQL to YDB as a technical experiment. This involves creating YDB adapters for Django ORM and SQLAlchemy.&lt;/li&gt;
&lt;li&gt;  Writing unit tests, API tests, E2E tests, and setting up load testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We would greatly appreciate your feedback on the product: &lt;a href="https://forms.gle/SKXX2XffoAYZbGxW9" rel="noopener noreferrer"&gt;https://forms.gle/SKXX2XffoAYZbGxW9&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Join the Team
&lt;/h3&gt;

&lt;p&gt;We are currently looking for specialists in product management and promotion: product managers, marketers (including SMM), analysts, and technical writers. We welcome both beginners who need experience or a portfolio project and professionals who like the idea and can provide advice or review the work of junior specialists.&lt;/p&gt;

&lt;p&gt;Additionally, we have many technical roles open.&lt;/p&gt;

&lt;p&gt;Fill out the application form to join the project, and we’ll invite you to the team: &lt;a href="https://forms.gle/xxuYPCR7AvLj2z7J7" rel="noopener noreferrer"&gt;https://forms.gle/xxuYPCR7AvLj2z7J7&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Service: &lt;a href="https://ecodomen.ru" rel="noopener noreferrer"&gt;https://ecodomen.ru&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Feedback: &lt;a href="https://forms.gle/SKXX2XffoAYZbGxW9" rel="noopener noreferrer"&gt;https://forms.gle/SKXX2XffoAYZbGxW9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Project history: &lt;a href="https://youtu.be/hV8Bj291A60" rel="noopener noreferrer"&gt;https://youtu.be/hV8Bj291A60&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Application form: &lt;a href="https://forms.gle/xxuYPCR7AvLj2z7J7" rel="noopener noreferrer"&gt;https://forms.gle/xxuYPCR7AvLj2z7J7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Source code repository: &lt;a href="https://github.com/ecodomen/nsreg-watcher" rel="noopener noreferrer"&gt;https://github.com/ecodomen/nsreg-watcher&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Task board: &lt;a href="https://github.com/orgs/ecodomen/projects/1" rel="noopener noreferrer"&gt;https://github.com/orgs/ecodomen/projects/1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/how-ecodomen-ru-helps-save-on-domains" rel="noopener noreferrer"&gt;How Ecodomen.ru Helps Save on Domains — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>casestudy</category>
    </item>
    <item>
      <title>Dear ASUS: Why Did You Turn My Right Ctrl into a Puzzle?</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Thu, 30 Apr 2026 05:24:03 +0000</pubDate>
      <link>https://dev.to/arezvov/dear-asus-why-did-you-turn-my-right-ctrl-into-a-puzzle-1l6f</link>
      <guid>https://dev.to/arezvov/dear-asus-why-did-you-turn-my-right-ctrl-into-a-puzzle-1l6f</guid>
      <description>&lt;p&gt;On my &lt;strong&gt;ASUS ExpertBook B3404CVA&lt;/strong&gt; running &lt;strong&gt;Kubuntu 24.04&lt;/strong&gt; (KDE Plasma 5.27.11, X11, Kernel 6.8.0-52-generic), I set the usual keyboard layout switcher via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/etc/default/keyboard:
&lt;span class="nv"&gt;XKBLAYOUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"us,ru"&lt;/span&gt;
&lt;span class="nv"&gt;XKBOPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"grp:menu_toggle"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Normally I set up layout switching through the standard graphical interface in Kubuntu — never had to think twice. But on this machine, it simply didn’t work. I had to fall back on this method. And even then, it works &lt;strong&gt;only intermittently&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  sometimes with the Fn key,&lt;/li&gt;
&lt;li&gt;  sometimes without,&lt;/li&gt;
&lt;li&gt;  and there's no clear logic when or why.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🚨 Symptoms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Layout switching &lt;strong&gt;works... sometimes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Sometimes requires holding Fn&lt;/strong&gt; to work&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Sometimes doesn’t work at all&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;After suspend/resume — it starts working again&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;After reboot — might stop again&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  In short: totally inconsistent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here's the kicker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;If I reboot&lt;/strong&gt;, I can switch layout with a single press of the &lt;code&gt;Right Ctrl&lt;/code&gt;/Menu key.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;If the system was suspended and resumed&lt;/strong&gt;, now I can &lt;strong&gt;only&lt;/strong&gt; switch layouts by holding &lt;strong&gt;Fn + that same key&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks, engineer from Masus.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 My Investigation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Dug through &lt;code&gt;xev&lt;/code&gt;, &lt;code&gt;evtest&lt;/code&gt;, &lt;code&gt;setxkbmap&lt;/code&gt;, &lt;code&gt;xmodmap&lt;/code&gt;, &lt;code&gt;libinput debug-events&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; Discovered that this key:

&lt;ul&gt;
&lt;li&gt;  Without Fn: emits &lt;code&gt;Super_L&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  With Fn: emits &lt;code&gt;ISO_Next_Group&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Sometimes: emits &lt;strong&gt;nothing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; Checked BIOS: no useful Fn key control (just &lt;code&gt;Fn Lock Option&lt;/code&gt;, irrelevant)&lt;/li&gt;
&lt;li&gt; Disabled &lt;code&gt;fcitx5&lt;/code&gt;, tried &lt;code&gt;.xprofile&lt;/code&gt;, systemd hooks, layout toggles&lt;/li&gt;
&lt;li&gt; Tested &lt;code&gt;grp:menu_toggle&lt;/code&gt;, &lt;code&gt;grp:rctrl_toggle&lt;/code&gt;, &lt;code&gt;grp:win_toggle&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; Sometimes it worked, then stopped, then resumed after suspend&lt;/li&gt;
&lt;li&gt; Eventually wrote a &lt;strong&gt;systemd sleep hook&lt;/strong&gt; that reapplies layout settings post-suspend&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  ⏳ Time Spent
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;~10 hours&lt;/strong&gt; over 4 days. I’m a developer. I know what I'm doing. If I struggled this much — imagine a non-tech-savvy user.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🙏 A Message to ASUS Engineers
&lt;/h2&gt;

&lt;p&gt;Dear ASUS engineers,&lt;/p&gt;

&lt;p&gt;Thanks for the light laptop, good build quality, and battery life. But please explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Why did you replace &lt;code&gt;Right Ctrl&lt;/code&gt; with &lt;code&gt;Super_L&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;  Why does the key's behavior depend on Fn state?&lt;/li&gt;
&lt;li&gt;  Why is there &lt;strong&gt;no BIOS/UEFI or EC override&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You spent your time, budget, and engineering effort to &lt;strong&gt;remove a standard key&lt;/strong&gt; and made it &lt;strong&gt;inconsistent&lt;/strong&gt;, &lt;strong&gt;undocumented&lt;/strong&gt;, and &lt;strong&gt;non-overridable&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Please, just &lt;strong&gt;let users decide what the key does&lt;/strong&gt; — especially when it's part of years of muscle memory.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 TL;DR
&lt;/h2&gt;

&lt;p&gt;I hacked around it. I use a &lt;code&gt;setxkbmap&lt;/code&gt; call from a systemd hook after suspend. It sort of works.&lt;/p&gt;

&lt;p&gt;But it’s not stable. It still changes behavior after suspend. Fn sometimes required, sometimes not.&lt;/p&gt;

&lt;p&gt;I didn’t fix it — I just learned to live with it. For now. I’ll be back to dig deeper into this absurd situation, but at the moment I simply ran out of time. The story isn’t over yet.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/dear-asus-why-did-you-turn-my-right-ctrl-into-a-puzzle" rel="noopener noreferrer"&gt;Dear ASUS: Why Did You Turn My Right Ctrl into a Puzzle? — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>Exporting Data from a Serbian Residence Permit Card to PDF on Linux</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Wed, 29 Apr 2026 05:01:13 +0000</pubDate>
      <link>https://dev.to/arezvov/exporting-data-from-a-serbian-residence-permit-card-to-pdf-on-linux-1135</link>
      <guid>https://dev.to/arezvov/exporting-data-from-a-serbian-residence-permit-card-to-pdf-on-linux-1135</guid>
      <description>&lt;p&gt;Recently, I received a Serbian residence permit smart card and wanted to explore its contents. With a card reader at hand and running Kubuntu 24.04, I discovered the utility &lt;strong&gt;Baš Čelik&lt;/strong&gt;, developed by &lt;a href="https://ubavic.rs/" rel="noopener noreferrer"&gt;Nikola Ubavić&lt;/a&gt;.&lt;br&gt;
The program is available on GitHub:&lt;br&gt;
&lt;a href="https://github.com/ubavic/bas-celik" rel="noopener noreferrer"&gt;https://github.com/ubavic/bas-celik&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;p&gt;To install, I downloaded the executable from the releases section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; bas-celik-cli.linux.amd64 https://github.com/ubavic/bas-celik/releases/download/v2.1.3/bas-celik-cli.linux.amd64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, I made the file executable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x bas-celik-cli.linux.amd64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Usage
&lt;/h4&gt;

&lt;p&gt;To read the data from the card and save it as a PDF file, I used the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./bas-celik-cli.linux.amd64 &lt;span class="nt"&gt;-pdf&lt;/span&gt; ~/Documents/arezvov-srb-id.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The program successfully read the data and saved it to the specified PDF file on the first try.&lt;/p&gt;

&lt;h4&gt;
  
  
  Acknowledgment
&lt;/h4&gt;

&lt;p&gt;Many thanks to &lt;a href="https://ubavic.rs/" rel="noopener noreferrer"&gt;Nikola Ubavić&lt;/a&gt; for developing Baš Čelik. Details about the creation of the utility can be found in his blog: &lt;a href="https://blog.ubavic.rs/7/" rel="noopener noreferrer"&gt;https://blog.ubavic.rs/7/&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/exporting-data-from-a-serbian-residence-permit-card-to-pdf-on-linux" rel="noopener noreferrer"&gt;Exporting Data from a Serbian Residence Permit Card to PDF on Linux — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>digitalnomad</category>
      <category>guide</category>
    </item>
    <item>
      <title>Kutuzov's Management Method</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Tue, 28 Apr 2026 07:47:12 +0000</pubDate>
      <link>https://dev.to/arezvov/kutuzovs-management-method-2np6</link>
      <guid>https://dev.to/arezvov/kutuzovs-management-method-2np6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"He will not bring in any plan of his own. He will not devise or undertake anything, but he will hear everything, remember everything, and put everything in its place. He will not hinder anything useful nor allow anything harmful."&lt;/p&gt;

&lt;p&gt;— Prince Andrew Bolkónski's reflections on Kutúzov. Leo Tolstoy, &lt;em&gt;War and Peace&lt;/em&gt;, Book 10, Ch. XVI. Translation by Louise and Aylmer Maude.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Tolstoy showed in Kutuzov
&lt;/h2&gt;

&lt;p&gt;In &lt;em&gt;War and Peace&lt;/em&gt;, Kutuzov works like this: the commander in chief stays out of most operational questions, but on a few, he suddenly gives full attention. He can sit through a critical report on the army's position as if it were a chanted prayer service, and then make the only instruction of the whole report about looting among the troops.&lt;/p&gt;

&lt;p&gt;You can see this type of leader in modern practice too: someone who rarely speaks up on specifics but sometimes puts full attention on one particular matter, with such force that the rest of the team has no idea why. Tolstoy's Kutuzov is one of the earliest and most detailed portraits of this type. Let's break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a leader rarely steps in
&lt;/h2&gt;

&lt;p&gt;Most questions coming to such a leader during a working week — from team members, contractors, or neighboring teams — will get handled in one of several workable ways. And most of the time that's fine: many paths work, and picking between them is up to the person doing the work.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The color of the button on the landing page doesn't matter to me. Both options work. Let the designer decide."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes they're wrong, and the leader can see it. But arguing isn't worth it: the effort to convince them is more than the fix is worth.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The developer wants to rewrite the module from scratch when patching the existing one would do. It'll take longer this way. But convincing him will take even longer, and the difference in outcome is small. Let him go his own way."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes it's useful to let the person stumble on his own, and not step in. A mistake in a safe situation lowers the chance he'll make it again where the cost is higher. Damage is limited, and it's cheaper to let him trip than to argue.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A project manager wants to add steps to the task tracker flow — not because of any real need, but because the process 'looks more organized.' I warn him: if the team doesn't see a practical benefit, they won't actually engage with the extra steps. He's confident he's right. I let him try. One sprint in, the team is quietly bypassing the new steps, and he rolls the change back himself. Next time he leads with the practical question first: does this make the team's life easier?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes it's already clear the consequences will hurt, but convincing him is more costly than the consequences themselves.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A neighboring team is about to ship a release without load testing. It'll fall over in the first 24 hours, and support will get buried. But getting them to stop means a political fight with their manager — and that costs more, over time, than cleaning up the mess when it lands."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The 5% where stepping in is essential
&lt;/h2&gt;

&lt;p&gt;What's left are cases you can't skip. One of a leader's key skills is catching these in time — knowing when to step in, and how far.&lt;/p&gt;

&lt;p&gt;Tolstoy's sharpest example is the council at Fili. Most of the generals — Bennigsen, Ermólov, Dokhtúrov, Raévski — want to give battle for Moscow. Kutuzov hears them all out, then rises:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Well, gentlemen, I see that it is I who will have to pay for the broken crockery. Gentlemen, I have heard your views. Some of you will not agree with me. But I, by the authority entrusted to me by my Sovereign and country, order a retreat."&lt;/p&gt;

&lt;p&gt;— &lt;em&gt;War and Peace&lt;/em&gt;, Book 11, Ch. IV, trans. Maude.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alone that night, he sits at the table and keeps asking himself: "When, when did the abandonment of Moscow become inevitable? When was that done which settled the matter? And who was to blame for it?" Near the end of the novel, Tolstoy sums it up in one line: "He alone said that the loss of Moscow is not the loss of Russia."&lt;/p&gt;

&lt;p&gt;That's what 5%-intervention looks like up close: one person against the majority, against the political cost, against the weight of the decision itself. But here you can't back off — what's at stake is not the leader's standing but the success of the whole effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"On the project we agreed at the start: business logic lives on the backend. The team occasionally tries to slip a piece of logic into the frontend. Miss one precedent, and in a month the same logic is in three more places; in three months you can't roll it back. Here you have to put in enough force to keep the project from getting infected: I block the first case and do a review with the whole team."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And there's an unavoidable side effect. For people who don't see the full picture, this focused attention often looks strange, in two different ways. Sometimes the question seems minor to them, and they don't get why the leader is putting so much attention on it. Sometimes the answer seems obvious to them, and they don't get why the leader is going against the majority.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other side — keeping the team in context
&lt;/h2&gt;

&lt;p&gt;That strangeness is where my own addition starts — something that isn't in Tolstoy's Kutuzov. Kutuzov in the novel doesn't worry about keeping the team informed: secrecy, different goals, and the sheer size and variety of the army make that impossible. For a modern manager, this piece usually turns out to be useful.&lt;/p&gt;

&lt;p&gt;When a leader's move looks strange or too detailed to the team, that's not their problem — it's a signal. They don't understand what's being done and why. They don't know the project's goals, the ways of reaching them, their own role in the tasks.&lt;/p&gt;

&lt;p&gt;So each time I catch my actions looking strange to the team, I check something like this: do they know the goal of this piece of work? Do they see the link between their tasks and that goal? Do they understand why this specific chunk matters right now rather than another one?&lt;/p&gt;

&lt;p&gt;If the answer to any of those is no, the move looks arbitrary, even when the leader is right. What needs fixing is not the action but how well the team holds the overall picture.&lt;/p&gt;

&lt;p&gt;There are also Kutuzov-like situations — when keeping the team fully in context just isn't possible. In those moments the leader's actions will look inconsistent and strange whether he likes it or not. All that's left is to honestly understand how those actions look from outside.&lt;/p&gt;

&lt;p&gt;And there's a mirror effect. When you see strange, unexplainable actions from your own leadership or from a neighboring team whose decisions are outside your control, remember: you're in the same spot sometimes with your own team. They probably have their own 5% that you aren't seeing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Kutuzov's management method
&lt;/h2&gt;

&lt;p&gt;Boiled down, Kutuzov's method in Tolstoy is a discipline of selective attention:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;By default, don't step in. In most operational questions, the people doing the work will handle them their own way. This isn't laziness or checking out — it's a deliberate choice. Your attention is a limited resource; spend it on 95% of the stream and there's nothing left when you really need it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Catch the 5% of cases where stepping in is critical, and commit fully. No balancing, no half-measures. Put all your attention on those. These are the cases a leader exists for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A modern addition that isn't in Tolstoy's Kutuzov: keep the team in context. Without the bigger picture, selective attention looks arbitrary from outside. The method doesn't stop working — but you need to understand the costs.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  P.S.
&lt;/h2&gt;

&lt;p&gt;Off topic from the article's argument, but worth saying: what I personally like about Kutuzov in the novel is that even in the harshest circumstances — retreat from Moscow, the burning capital, the winter pursuit of a starving enemy — he stays humane.&lt;/p&gt;

&lt;p&gt;After Krasnoye, with thousands of ragged French prisoners along the road, Kutuzov speaks to his troops:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It is hard for you, but still you are at home while they — you see what they have come to. Worse off than our poorest beggars. While they were strong we didn't spare ourselves, but now we may even pity them. They are human beings too. Isn't it so, lads?"&lt;/p&gt;

&lt;p&gt;— &lt;em&gt;War and Peace&lt;/em&gt;, Book 15, Ch. VI, trans. Maude.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/kutuzov-management-method" rel="noopener noreferrer"&gt;Kutuzov's Management Method — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>leadership</category>
      <category>teammanagement</category>
    </item>
    <item>
      <title>Alex Rezvov Blog Now in Telegram! Tour for New Readers</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Wed, 22 Apr 2026 08:56:09 +0000</pubDate>
      <link>https://dev.to/arezvov/alex-rezvov-blog-now-in-telegram-tour-for-new-readers-3fm5</link>
      <guid>https://dev.to/arezvov/alex-rezvov-blog-now-in-telegram-tour-for-new-readers-3fm5</guid>
      <description>&lt;p&gt;I added a fourth platform to the blog's publishing pipeline today. A post now goes to blog.rezvov.com, &lt;a href="https://dev.to/arezvov"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://arezvov.hashnode.dev/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt;, and the Telegram channel &lt;a href="https://t.me/arezvov_race_mode_on" rel="noopener noreferrer"&gt;@arezvov_race_mode_on&lt;/a&gt;. Same &lt;code&gt;git push&lt;/code&gt;, four places.&lt;/p&gt;

&lt;p&gt;This post is two things. A short note on how the Telegram piece works. And a tour of the blog by topic for anyone who just arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Telegram piece works
&lt;/h2&gt;

&lt;p&gt;The infra took an evening. The existing crosspost system already had a &lt;code&gt;PlatformConfig&lt;/code&gt; interface for Dev.to and Hashnode — so adding Telegram was about 150 lines of TypeScript. Format the message with HTML, call &lt;code&gt;sendMessage&lt;/code&gt;, store the &lt;code&gt;message_id&lt;/code&gt; in a YAML plan file for later edits.&lt;/p&gt;

&lt;p&gt;What took longer was deciding what to post.&lt;/p&gt;

&lt;p&gt;Dropping a 5000-word article into Telegram is absurd. Telegram needs the short version. I'd been writing those manually for LinkedIn — every post got a 1000-char teaser that lived only in my LinkedIn feed. So I formalized a &lt;code&gt;promo&lt;/code&gt; field in each post's frontmatter: plain text, 800–1500 chars, written in the same voice as the post.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;..."&lt;/span&gt;
&lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;..."&lt;/span&gt;
&lt;span class="na"&gt;promo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;Hook sentence.&lt;/span&gt;

  &lt;span class="s"&gt;Two or three paragraphs that carry the post's actual argument,&lt;/span&gt;
  &lt;span class="s"&gt;with concrete numbers and examples. Not a summary. A pitch that&lt;/span&gt;
  &lt;span class="s"&gt;makes someone stop scrolling.&lt;/span&gt;

  &lt;span class="s"&gt;Closing insight that stands on its own.&lt;/span&gt;
&lt;span class="s"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The crosspost script adds the title, canonical URL, and hashtags around it. Two problems solved at once — automated Telegram posting, and LinkedIn promos no longer live only in LinkedIn. They're in the blog repo. Versioned, reviewable in PRs.&lt;/p&gt;

&lt;p&gt;A linter rule enforces the constraints: 200–3000 chars, no URLs, no hashtags, no markdown. The script adds the URL and hashtags at send time.&lt;/p&gt;

&lt;p&gt;Backfill was the interesting part. Eight posts had existing LinkedIn promos I'd written myself — Claude for Chrome scraped them from my LinkedIn activity feed into JSON, I cleaned URLs and hashtags, pasted into frontmatter. For the other 33 posts I never got around to promoting on LinkedIn, five Opus agents drafted promos in parallel using a style guide I built from the eight real examples. I reviewed, tweaked, applied. Each Claude-drafted promo ends with &lt;code&gt;*extracted by Claude&lt;/code&gt; so I can track provenance.&lt;/p&gt;

&lt;p&gt;The canonical &lt;code&gt;@arezvov_race_mode_on&lt;/code&gt; channel is also my running log. So between blog posts, you'll see the occasional run report. If that's not what you're there for, the hashtags are split — &lt;code&gt;#article&lt;/code&gt; for blog posts, different tags for training.&lt;/p&gt;

&lt;h2&gt;
  
  
  A tour of the blog
&lt;/h2&gt;

&lt;p&gt;If you came here from Telegram and want a sense of what I actually write about, here's a topic-by-topic map.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context engineering and parsimony
&lt;/h3&gt;

&lt;p&gt;Over the last six months this has become the topic I think about most. Claude and other LLMs have a context budget, and how you spend it determines whether the agent is useful or just confidently wrong.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/principle-of-parsimony-in-context-engineering" rel="noopener noreferrer"&gt;Principle of Parsimony in Context Engineering&lt;/a&gt; — a design rule: every element in the context exists because it contributes to unambiguous task interpretation, enforceable constraints, or result quality. If it doesn't, cut it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/prompt-engineering-vs-context-engineering" rel="noopener noreferrer"&gt;When Prompt Engineering Stops Being Enough&lt;/a&gt; — where prompt engineering breaks at scale, and what replaces it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/less-documentation-more-signal" rel="noopener noreferrer"&gt;Less Documentation, More Signal&lt;/a&gt; — I trimmed a 500-line instruction file to 40 lines. Humans navigated faster too. Volume stopped meaning quality.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/context-engineering-with-exochat-parsimony-in-action" rel="noopener noreferrer"&gt;Context Engineering with ExoChat: Parsimony in Action&lt;/a&gt; — how this works on a real production system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI-driven development in practice
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/five-levels-of-ai-agent-adoption" rel="noopener noreferrer"&gt;Five Levels of AI-Agent Adoption in Software Development Teams&lt;/a&gt; — a taxonomy based on 100+ engineers across 12 projects. L1 (agent babysitting) through L5 (autonomous). You can't skip levels.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/specification-driven-development-four-pillars" rel="noopener noreferrer"&gt;Specification-Driven Development: The Four Pillars&lt;/a&gt; — how we organize agent-driven teams at ForEach Partners.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/build-vs-buy-agent-harnesses-the-real-question" rel="noopener noreferrer"&gt;Build vs. Buy for Agent Harnesses&lt;/a&gt; — when to roll your own, when to adopt.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/what-ctos-actually-said-about-rust-and-llms" rel="noopener noreferrer"&gt;What CTOs Actually Said About Rust and LLMs&lt;/a&gt; — survey result that surprised me.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deploying and debugging AI tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/deploying-openclaw-sixteen-incidents-one-day" rel="noopener noreferrer"&gt;Deploying OpenClaw: 16 Incidents, One Day, $1.50&lt;/a&gt; — a narrative of a full-day deployment. Infinite retry loops, thinking-block traps, what broke and why.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/openclaw-troubleshooting-no-reply-workflow-auto-delivery-failures" rel="noopener noreferrer"&gt;OpenClaw Troubleshooting: "No Reply from Agent," WORKFLOW_AUTO.md, and Silent Delivery Failures&lt;/a&gt; — the diagnostic companion.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/llms-changed-the-rules-git-sql-rust-for-everyone" rel="noopener noreferrer"&gt;LLMs Changed the Rules: Git for Everyone, SQL for Everyone, Rust for Almost Everyone&lt;/a&gt; — how the syntax barrier dropped and who walked through.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/rust-and-llms-the-compiler-does-what-code-review-shouldnt-have-to" rel="noopener noreferrer"&gt;Rust and LLMs: The Compiler Does What Code Review Shouldn't Have To&lt;/a&gt; — strict types as a discipline for AI-generated code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Engineering management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/founder-mode-a-new-name-for-micromanagement" rel="noopener noreferrer"&gt;Founder Mode — A New Name for Micromanagement?&lt;/a&gt; — the viral term and what it actually describes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/the-role-of-a-team-lead" rel="noopener noreferrer"&gt;The Role of a Team Lead&lt;/a&gt; — four responsibilities and the hyper-responsibility trap.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/resolving-architectural-conflicts-in-development-teams" rel="noopener noreferrer"&gt;Resolving Architectural Conflicts in Development Teams&lt;/a&gt; — when senior engineers disagree on structure.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/doubt-means-growth" rel="noopener noreferrer"&gt;Doubt Means Growth&lt;/a&gt; — why engineers who stop questioning themselves plateau.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The blog itself (meta)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/migrating-from-ghost-to-nextjs-with-claude-and-cursor" rel="noopener noreferrer"&gt;Migrating from Ghost to Next.js: A Journey with Claude and Cursor&lt;/a&gt; — the stack rebuild.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/making-your-blog-llm-friendly-implementing-llms-txt" rel="noopener noreferrer"&gt;Making Your Blog LLM-Friendly: Implementing llms.txt&lt;/a&gt; — exposing posts as raw Markdown for AI crawlers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.rezvov.com/five-weeks-with-nextjs-blog-what-got-built" rel="noopener noreferrer"&gt;Five Weeks with a Next.js Blog: What Got Built&lt;/a&gt; — what accumulated in the first month and a half.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to follow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blog&lt;/strong&gt;: &lt;a href="https://blog.rezvov.com" rel="noopener noreferrer"&gt;blog.rezvov.com&lt;/a&gt; — canonical, with RSS at &lt;code&gt;/rss.xml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram&lt;/strong&gt;: &lt;a href="https://t.me/arezvov_race_mode_on" rel="noopener noreferrer"&gt;@arezvov_race_mode_on&lt;/a&gt; — short versions, plus running log&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dev.to&lt;/strong&gt;: &lt;a href="https://dev.to/arezvov"&gt;dev.to/arezvov&lt;/a&gt; — same articles, different audience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hashnode&lt;/strong&gt;: &lt;a href="https://arezvov.hashnode.dev/" rel="noopener noreferrer"&gt;arezvov.hashnode.dev&lt;/a&gt; — same&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn&lt;/strong&gt;: &lt;a href="https://www.linkedin.com/in/arezvov/" rel="noopener noreferrer"&gt;linkedin.com/in/arezvov&lt;/a&gt; — I post the same &lt;code&gt;promo&lt;/code&gt; text there manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have a preferred channel, pick one. The canonical version with comments, search, and code highlighting is always on the blog.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/now-publishing-to-telegram" rel="noopener noreferrer"&gt;Alex Rezvov Blog Now in Telegram! Tour for New Readers — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aidrivendevelopment</category>
      <category>meta</category>
      <category>blog</category>
      <category>contextengineering</category>
    </item>
    <item>
      <title>Doubt Means Growth</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Tue, 21 Apr 2026 07:21:52 +0000</pubDate>
      <link>https://dev.to/arezvov/doubt-means-growth-2jo2</link>
      <guid>https://dev.to/arezvov/doubt-means-growth-2jo2</guid>
      <description>&lt;p&gt;Recently, there was a discussion about how to deal with imposter syndrome. Personally, I believe imposter syndrome is a great thing that drives you to grow—so why fight it?&lt;/p&gt;

&lt;p&gt;From the very beginning of my career, I lived with this feeling, even before I knew it had a name. Imposter syndrome keeps me from stagnating in my development. It encourages me to critically assess my work and analyze how things could be done better. It’s what motivated me to read professional literature, attend conferences, and seek advice from more experienced colleagues.&lt;/p&gt;

&lt;p&gt;I sometimes notice imposter syndrome in others as well. To me, that’s a good sign. It means this person, like me, is being pushed forward, driven to develop, and inspired to keep growing.&lt;/p&gt;




&lt;h1&gt;
  
  
  PersonalGrowth #SelfDevelopment
&lt;/h1&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/doubt-means-growth" rel="noopener noreferrer"&gt;Doubt Means Growth — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>reflections</category>
    </item>
    <item>
      <title>How to Overcome Internal Doubts After Making Decisions</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Thu, 16 Apr 2026 07:24:20 +0000</pubDate>
      <link>https://dev.to/arezvov/how-to-overcome-internal-doubts-after-making-decisions-499i</link>
      <guid>https://dev.to/arezvov/how-to-overcome-internal-doubts-after-making-decisions-499i</guid>
      <description>&lt;p&gt;Recently, there was a discussion about how to act when doubts arise after making a decision. I’d like to share my thoughts.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you are leading a department or an organization and need to make a difficult decision. You’ve carefully weighed the pros and cons, thought everything through, and made your choice. However, during implementation, doubts start creeping in. These doubts may lead to hesitation or even subtle self-sabotage.&lt;/p&gt;

&lt;p&gt;And yet, no new circumstances have arisen. All external factors remain the same as when the decision was made.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;How to Counter Doubts?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my view, this situation mirrors how a subordinate might resist a decision they don’t fully accept. Such resistance can manifest in formal compliance but with minimal effort, delays, or even subtle sabotage.&lt;/p&gt;

&lt;p&gt;The usual solution? Discussions before the decision. If open dialogue is encouraged in your organization, all opinions should be heard during the decision-making process. Once the decision is finalized, however, it must be accepted as a collective commitment. Without this clarity, unresolved doubts can disrupt implementation and potentially spread uncertainty within the team.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you doubt your own decisions, the dynamic is similar. You become both the leader and the hesitant subordinate. Just as an uncommitted team member can spread doubt among colleagues, your own internal hesitation can undermine your confidence and, ultimately, the team's morale.&lt;/p&gt;

&lt;p&gt;Your task as a leader is to convince yourself first. Commit fully to the decision you’ve made, as the time for discussion and doubt is over. Once you believe in the decision, your confidence will naturally guide and inspire others.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Role of Internal Confidence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A leader’s internal confidence is a cornerstone for motivating the team and aligning their efforts. Hesitation from you can easily ripple through the group, undermining their motivation and direction. To keep your team moving forward effectively:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Strengthen your belief&lt;/strong&gt; in the decision.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Stay consistent&lt;/strong&gt; in your actions.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Communicate clearly&lt;/strong&gt; to ensure alignment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only when you convince yourself can you inspire the same trust and commitment in others.&lt;/p&gt;




&lt;h1&gt;
  
  
  PeopleManagement #LeadershipConfidence #DecisionMaking #OvercomingDoubt #TeamMotivation #EffectiveLeadership #SelfTrust
&lt;/h1&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/how-to-overcome-internal-doubts-after-making-decisions" rel="noopener noreferrer"&gt;How to Overcome Internal Doubts After Making Decisions — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>career</category>
    </item>
    <item>
      <title>LinkedIn Sales Navigator: The Tool We Need, Not the One We Have</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Wed, 15 Apr 2026 05:34:13 +0000</pubDate>
      <link>https://dev.to/arezvov/linkedin-sales-navigator-the-tool-we-need-not-the-one-we-have-i34</link>
      <guid>https://dev.to/arezvov/linkedin-sales-navigator-the-tool-we-need-not-the-one-we-have-i34</guid>
      <description>&lt;p&gt;When I explore a specialized tool in a field where I am new, I expect it to be designed by experts with a deeper understanding than I could ever have. After all, I am an amateur, while experienced professionals must have thought carefully about solving the problem in the best way. These were exactly my expectations for LinkedIn Sales Navigator: I thought that the obvious features I needed were already implemented and of the highest quality.&lt;/p&gt;

&lt;p&gt;How wrong I was.&lt;/p&gt;

&lt;h3&gt;
  
  
  First Task: Finding Explicit Needs
&lt;/h3&gt;

&lt;p&gt;The first and most obvious task is to find those companies or individuals who explicitly state their need for a product or service.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In my case, I provide&lt;/em&gt; &lt;a href="https://foreachpartners.com" rel="noopener noreferrer"&gt;&lt;em&gt;development services&lt;/em&gt;&lt;/a&gt; &lt;em&gt;of above-average quality on the global market, with prices lower than 75% of companies worldwide.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Although I’ll use my example, the task remains the same regardless of the product: to find those who need it.&lt;/p&gt;

&lt;p&gt;What signals can help identify those who need high-quality development at a relatively low cost? The most obvious way is to find those who directly post about it on LinkedIn. Imagine my disappointment when I discovered that LinkedIn Sales Navigator doesn’t allow users to subscribe to notifications for such posts! Dear LinkedIn team, we have LLMs and countless other tools that can practically identify intents flawlessly in any text.&lt;/p&gt;

&lt;p&gt;This is the first feature that LinkedIn Sales Navigator should have implemented, and I believe it's the feature I and most other users would immediately subscribe to upon purchasing the tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcf2vovwygonortf500r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcf2vovwygonortf500r.png" alt="Screenshot of LinkedIn post requesting development services" width="554" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example of what a real development service request looks like&lt;/p&gt;

&lt;h3&gt;
  
  
  Second Task: Analyzing User Behavior
&lt;/h3&gt;

&lt;p&gt;Let’s move forward. Let’s assume we are already subscribed to explicit product or service requests.&lt;/p&gt;

&lt;p&gt;What if we tried to find those who have realized their need for development and exhibit it in their behavior—for example, by visiting development team pages, messaging developers privately, etc.? We already have amazing tools like data analytics, LLMs, and others, don’t we, LinkedIn engineers?&lt;/p&gt;

&lt;p&gt;So, the second feature I’d subscribe to is the ability to identify those who have realized their need for development services but haven’t yet published an explicit request on LinkedIn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Third Task: Predicting Unconscious Needs
&lt;/h3&gt;

&lt;p&gt;An even more advanced feature would be identifying users who need development services but haven’t yet realized it. For example, they read and comment on articles about managing developers or implementing Agile methods in their teams. Such users might actively explore automation, discuss hiring challenges, or share issues related to digital transformation.&lt;/p&gt;

&lt;p&gt;I understand that implementing such a feature would require more effort than a few students from Computer Science courses could handle, unlike the previous tasks. But we’re talking about the mighty LinkedIn, aren’t we?&lt;/p&gt;

&lt;p&gt;Such tools would transform LinkedIn Sales Navigator into a modern and fully-fledged sales tool rather than leaving it as a basic directory of companies and leads with primitive filters, as it is today.&lt;/p&gt;

&lt;p&gt;This kind of tool would allow providers of goods and services to deliver their proposals directly to the users who need them at the right time—or even slightly earlier. This would reduce spam in personal messages, expand the options for buyers, and make the world a little better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In conclusion, the lack of such a tool opens up opportunities for its creation. Of course, LinkedIn has far more data than we mere mortals do, but even with publicly available data, many of these tools can be implemented. The specialists at &lt;a href="https://foreachpartners.com" rel="noopener noreferrer"&gt;ForEach Partners&lt;/a&gt; are capable of tackling such a task.&lt;/p&gt;

&lt;p&gt;If you want to launch such a product, contact us at &lt;a href="mailto:sales@foreachpartners.com"&gt;sales@foreachpartners.com&lt;/a&gt;—let’s discuss the terms of cooperation.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/linkedin-sales-navigator-the-tool-we-need-not-the-one-we-have" rel="noopener noreferrer"&gt;LinkedIn Sales Navigator: The Tool We Need, Not the One We Have — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opinion</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>How We Helped a Client Regain Control of Their Business</title>
      <dc:creator>Alex Rezvov</dc:creator>
      <pubDate>Tue, 14 Apr 2026 05:02:19 +0000</pubDate>
      <link>https://dev.to/arezvov/how-we-helped-a-client-regain-control-of-their-business-537h</link>
      <guid>https://dev.to/arezvov/how-we-helped-a-client-regain-control-of-their-business-537h</guid>
      <description>&lt;p&gt;In the world of development, there are times when professional collaboration crosses unacceptable boundaries. Our team at &lt;a href="https://foreachpartners.com/" rel="noopener noreferrer"&gt;ForEach Partners&lt;/a&gt; faced one such situation while working on a complex project for a client. What happens when a contractor turns a business-critical website into a tool for blackmail? Threats to shut down the website, which supports key business processes, become a means of coercion. The contractor retained exclusive control over the source code, database, and hosting, leaving the client without access to these critical assets.&lt;/p&gt;

&lt;p&gt;This is the story of how we not only helped a client escape such a dire situation but also built a robust system that became a reliable foundation for their business.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It All Began
&lt;/h3&gt;

&lt;p&gt;The client approached us, sensing an impending crisis. Their previous developers retained control over the source code and database of their portal, dictating terms, deadlines, and costs. Sometimes, they even halted the site’s operation if the client insisted on their own terms. For a business involved in international logistics, such disruptions were catastrophic.&lt;/p&gt;

&lt;p&gt;We advised immediate action to create a contingency plan for the portal, even if it required engaging another team. Our goal was to protect the client’s interests and help them navigate out of this crisis. Our experience told us that delaying such decisions only worsens the situation.&lt;/p&gt;

&lt;p&gt;The client left to consider their options but returned a few months later. "You were right," they said. "The situation has worsened. Action should have been taken yesterday."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"In every project, the client’s interests must come first. That’s the only way to achieve success."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Development Phase
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Creating a Transitional Solution
&lt;/h4&gt;

&lt;p&gt;We utilized everything available from the existing site—HTML, CSS, and JavaScript—to quickly launch a new version of the portal. These resources were used as-is to minimize time and expedite implementation. Where possible, pages remained static in the same form as retrieved from the old site.&lt;/p&gt;

&lt;p&gt;Dynamic functionality, such as allowing users to place new orders, required new server-side logic. Transferring the existing logic was impossible, as the server’s source code was inaccessible. We chose Django as the platform, given its ready-to-use tools for most common tasks. This enabled us to quickly build an interactive and flexible system that met the site’s requirements. Additionally, Django includes a built-in administrative panel, which, while not the most user-friendly, served as a sufficient temporary solution for the current needs.&lt;/p&gt;

&lt;p&gt;This approach allowed us to launch the system quickly while preserving its functionality.&lt;/p&gt;

&lt;h4&gt;
  
  
  How We Gathered Data
&lt;/h4&gt;

&lt;p&gt;To migrate data from the old portal, we developed parsers using Scrapy. The primary challenge was to collect the data discreetly to avoid suspicion from the contractors. The parsers operated from the client’s workstation, making low-frequency requests to stay under the radar.&lt;/p&gt;

&lt;p&gt;Together with the client, we identified all necessary data to ensure a seamless launch of the portal within their own infrastructure. The data was collected carefully and discreetly, avoiding any unnecessary risks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Securing the Website
&lt;/h4&gt;

&lt;p&gt;Simultaneously, we addressed security concerns. We implemented CloudFlare to filter external traffic and conducted a security audit with an experienced specialist from &lt;a href="https://foreachpartners.com/domain/informationsecurity" rel="noopener noreferrer"&gt;ForEach Partners&lt;/a&gt;. Addressing the identified vulnerabilities minimized the risk of sabotage by the contractors and ensured robust system protection.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fast Launch
&lt;/h4&gt;

&lt;p&gt;Within a month, we completed all tasks: data collection, security setup, and the development of a transitional site based on Django. Static pages remained unchanged where possible, while dynamic elements were handled by Django. As a result, the site launched quickly, maintaining functionality. Thanks to our swift actions, the client avoided sabotage from the contractors and resumed operations on the new platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transition to the New Version of the Site
&lt;/h3&gt;

&lt;p&gt;After the successful launch of the prototype, the client fully transitioned to using the new version of the site. This version allowed them to perform all previous tasks through the administrative panel, though some were not implemented in the most convenient way. For users, practically nothing changed. The only request we made was for them to change their passwords upon first login. Passwords were the only data we couldn’t transfer from the old portal. For users, this appeared as a standard security update and a precautionary password reset. They never realized the massive overhaul behind the scenes!&lt;/p&gt;

&lt;p&gt;At this point, the client breathed a sigh of relief and parted ways with the old contractors. We continued working together on improving the system, creating an updated and more powerful version of the site tailored to the business’s evolving needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase Two: Building a Complete System
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Technology and Features
&lt;/h4&gt;

&lt;p&gt;We transitioned to the second phase—developing a flexible and modern system. Using Django Rest Framework (DRF) for the backend and Vue.js with Nuxt.js for the frontend, we achieved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Independence between user and admin interfaces.&lt;/li&gt;
&lt;li&gt;  APIs for integration with mobile applications and bots.&lt;/li&gt;
&lt;li&gt;  Scalability for future changes and enhancements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Advantages of the New System
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Modernity:&lt;/strong&gt; A completely revamped design improved the user experience.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Flexibility:&lt;/strong&gt; The architecture easily adapts to new tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, we ensured that the client had full access to all keys, source codes, and backups at every stage. For us, this is standard practice with all clients.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lessons We Learned
&lt;/h3&gt;

&lt;p&gt;This project reminded us that success begins with genuine partnership and protecting the client’s interests. Only this approach builds trust and leads to sustainable results. When working toward the client’s goals, relationships become partnerships, and projects become successful.&lt;/p&gt;

&lt;p&gt;We are proud to have helped our client regain control and grow their business without fear of unscrupulous contractors.&lt;/p&gt;

&lt;p&gt;What conclusions can we draw to share with other developers?&lt;/p&gt;

&lt;p&gt;No matter how you try to bind a client to you through force, there will always be someone to help them break free. Trust can only be earned through conscientious pursuit of the client’s goals.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published: &lt;a href="https://blog.rezvov.com/how-we-helped-a-client-regain-control-of-their-business" rel="noopener noreferrer"&gt;How We Helped a Client Regain Control of Their Business — Alex Rezvov's Blog&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>casestudy</category>
    </item>
  </channel>
</rss>
