<?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: Zurab Shakhbanov</title>
    <description>The latest articles on DEV Community by Zurab Shakhbanov (@shakhbanov).</description>
    <link>https://dev.to/shakhbanov</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4111245%2F431be7cd-af6a-40f4-9cb7-20c8d5dc719f.png</url>
      <title>DEV Community: Zurab Shakhbanov</title>
      <link>https://dev.to/shakhbanov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shakhbanov"/>
    <language>en</language>
    <item>
      <title>One and a Half Hours on a Call — Four Lines in My Notebook. That’s How Whisperer Started</title>
      <dc:creator>Zurab Shakhbanov</dc:creator>
      <pubDate>Sat, 05 Sep 2026 14:18:58 +0000</pubDate>
      <link>https://dev.to/shakhbanov/one-and-a-half-hours-on-a-call-four-lines-in-my-notebook-thats-how-whisperer-started-4ne8</link>
      <guid>https://dev.to/shakhbanov/one-and-a-half-hours-on-a-call-four-lines-in-my-notebook-thats-how-whisperer-started-4ne8</guid>
      <description>&lt;p&gt;On Monday, we spent two hours discussing architecture. On Thursday, someone asked in the chat:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Wait, didn’t we decide not to move this into a separate service?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And honestly, I didn’t remember.&lt;/p&gt;

&lt;p&gt;I remembered the feeling. I remembered that the argument had been convincing. I remembered who disagreed.&lt;/p&gt;

&lt;p&gt;But the decision itself — the one thing five people had gathered for and burned ten person-hours on — was gone.&lt;/p&gt;

&lt;p&gt;In my notebook, there were four lines. Two of them were:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“!!”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Ask Dima.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We all love meetings. Especially the ones that could have been a Slack message.&lt;/p&gt;

&lt;p&gt;But that’s not even the real problem.&lt;/p&gt;

&lt;p&gt;The problem is that conversation is probably the most expensive way humanity has invented to transfer information — and at the same time, one of the worst ways to preserve it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Observation That Started It All
&lt;/h3&gt;

&lt;p&gt;Pretty much everyone can record meetings these days. Transcription is nothing new either. The “AI meeting notes” market is so crowded it’s getting embarrassing.&lt;/p&gt;

&lt;p&gt;But I realized pretty quickly that transcription itself is useless.&lt;/p&gt;

&lt;p&gt;A two-hour meeting transcript can easily be 18,000 words that nobody will ever read.&lt;/p&gt;

&lt;p&gt;You’ve simply replaced:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don’t remember what we decided.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don’t remember where exactly in these 18,000 words we decided it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not exactly progress.&lt;/p&gt;

&lt;p&gt;The value isn’t in the text.&lt;/p&gt;

&lt;p&gt;The value is being able to ask, two weeks later:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“What did we decide about billing?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;—and get an answer instead of opening Ctrl+F.&lt;/p&gt;

&lt;p&gt;That thought became the starting point for Whisperer.&lt;/p&gt;

&lt;p&gt;Not a “transcription service,” but an attempt to give conversations a memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Conversation With a Memory
&lt;/h3&gt;

&lt;p&gt;A meeting ends, and what remains isn’t just a file.&lt;/p&gt;

&lt;p&gt;It becomes an object you can actually work with.&lt;/p&gt;

&lt;p&gt;Who was there. What they discussed. What they decided. What someone promised to do. And exactly where in the recording it was said.&lt;/p&gt;

&lt;p&gt;The surprising part was that the most important thing wasn’t the summary.&lt;/p&gt;

&lt;p&gt;It was being able to jump back to the exact second.&lt;/p&gt;

&lt;p&gt;Because summaries almost inevitably smooth out details. They smooth out the moment when someone hesitated — and that’s often where the real meaning is.&lt;/p&gt;

&lt;p&gt;And speaking of “it lies just a little”…&lt;/p&gt;

&lt;p&gt;I have a tool that connects the same topic across multiple meetings: showing how a decision evolved from “let’s try it” to “we shipped it.”&lt;/p&gt;

&lt;p&gt;The first version honestly found zero decisions for basically any query.&lt;/p&gt;

&lt;p&gt;It turned out the meeting topic wasn’t in the &lt;code&gt;subject&lt;/code&gt; field at all. It lived in the parent message and in the meeting graph.&lt;/p&gt;

&lt;p&gt;The tool didn’t crash.&lt;/p&gt;

&lt;p&gt;It quietly returned nothing and pretended that was perfectly normal.&lt;/p&gt;

&lt;p&gt;And if there’s one thing I’ve learned, it’s this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The worst kind of bug in an AI product isn’t a crash. It’s plausible silence.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  “Wait, Let Me Translate That”
&lt;/h3&gt;

&lt;p&gt;The second use case grew out of a problem I kept seeing.&lt;/p&gt;

&lt;p&gt;A meeting where half the participants speak Russian and the other half don’t.&lt;/p&gt;

&lt;p&gt;Classic scenario: one person gets appointed as the translator, the conversation slows down to 30% of its normal speed, and three minutes later everyone has forgotten what they were talking about.&lt;/p&gt;

&lt;p&gt;It gets especially fun when the translator also happens to be the only person who understands the subject matter.&lt;/p&gt;

&lt;p&gt;That’s why Whisperer’s real-time translator isn’t about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Translate this recording for me later.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s for live conversations.&lt;/p&gt;

&lt;p&gt;Someone speaks, and almost immediately you hear the translation.&lt;/p&gt;

&lt;p&gt;Emphasis on &lt;strong&gt;almost&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is where engineering begins, because latency isn’t just a metric on a dashboard.&lt;/p&gt;

&lt;p&gt;It determines whether people are having a conversation or suffering through one.&lt;/p&gt;

&lt;p&gt;In one of my translation pipeline audits, there was a line that read:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“0.9s hangover — paid silence.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We were keeping the microphone open for almost a second after the end of a phrase, “just in case.”&lt;/p&gt;

&lt;p&gt;One second on every sentence.&lt;/p&gt;

&lt;p&gt;In a live conversation, that’s the difference between talking to another human and establishing a connection with Mars.&lt;/p&gt;

&lt;p&gt;Another honest one: one of the speech recognition engines, when running in multilingual mode, silently transliterated the output.&lt;/p&gt;

&lt;p&gt;It didn’t crash.&lt;/p&gt;

&lt;p&gt;It didn’t return an empty result.&lt;/p&gt;

&lt;p&gt;It confidently produced Latin characters instead of Japanese.&lt;/p&gt;

&lt;p&gt;Every test that simply checks “did we get an answer?” happily passes something like that.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Should Be Where You Already Work
&lt;/h3&gt;

&lt;p&gt;This is my favorite use case, because it’s personal.&lt;/p&gt;

&lt;p&gt;A technical meeting.&lt;/p&gt;

&lt;p&gt;Someone shows you a query that is “mysteriously slow.” Or asks what’s going to happen during a production migration.&lt;/p&gt;

&lt;p&gt;And then the ritual begins:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Listen.&lt;/li&gt;
&lt;li&gt;Remember.&lt;/li&gt;
&lt;li&gt;Open a new tab.&lt;/li&gt;
&lt;li&gt;Copy the context.&lt;/li&gt;
&lt;li&gt;Explain to the AI who all these people are and what is actually happening.&lt;/li&gt;
&lt;li&gt;Get an answer.&lt;/li&gt;
&lt;li&gt;Go back to the meeting, where everyone is already discussing something completely different.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The problem isn’t that the model is bad.&lt;/p&gt;

&lt;p&gt;The model is great.&lt;/p&gt;

&lt;p&gt;The problem is that the human is doing all the context loading.&lt;/p&gt;

&lt;p&gt;They manually move meaning from one window to another because those windows have no idea the other one exists.&lt;/p&gt;

&lt;p&gt;AI should help you &lt;strong&gt;where you already are&lt;/strong&gt;, not make you jump between ten tabs with a clipboard in your teeth.&lt;/p&gt;

&lt;p&gt;That’s why Whisperer has desktop clients — native Swift on macOS and WPF on Windows — that live on top of your meeting and understand its context.&lt;/p&gt;

&lt;p&gt;The assistant can see what the conversation is about and help in real time.&lt;/p&gt;

&lt;p&gt;There’s another problem, though:&lt;/p&gt;

&lt;p&gt;Teaching it when to shut up.&lt;/p&gt;

&lt;p&gt;The first version of the “when should I intervene?” rule was a list of about fifty Russian and English words hardcoded into two clients.&lt;/p&gt;

&lt;p&gt;In other words, it worked for exactly two out of the sixteen languages supported by the platform.&lt;/p&gt;

&lt;p&gt;A Japanese user got a perfectly silent assistant and could reasonably conclude that the feature simply didn’t exist.&lt;/p&gt;

&lt;p&gt;Now it’s a single server-side, language-independent rule, tested without a network connection.&lt;/p&gt;

&lt;p&gt;And it lives directly in the socket’s memory rather than Redis, because a trip to Redis costs about 41 ms — and this is the most frequently executed path in the entire pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Students Trying to Do Four Things at Once
&lt;/h3&gt;

&lt;p&gt;There’s another audience I didn’t think about at first.&lt;/p&gt;

&lt;p&gt;A lecture lasts an hour and a half.&lt;/p&gt;

&lt;p&gt;During that time, a student is trying to do four things simultaneously:&lt;/p&gt;

&lt;p&gt;listen to the professor, take notes, understand the material, and stay awake.&lt;/p&gt;

&lt;p&gt;Anyone who has ever been a student knows that you can realistically manage maybe two out of four.&lt;/p&gt;

&lt;p&gt;And “understand the material” rarely makes the cut.&lt;/p&gt;

&lt;p&gt;Mechanical note-taking is basically converting sound into handwriting.&lt;/p&gt;

&lt;p&gt;It consumes exactly the attention you need for understanding.&lt;/p&gt;

&lt;p&gt;Whisperer doesn’t “study instead of the student.”&lt;/p&gt;

&lt;p&gt;That would be both useless and rather depressing.&lt;/p&gt;

&lt;p&gt;It removes the mechanical work: the lecture is saved, turned into notes, searchable, and available for questions.&lt;/p&gt;

&lt;p&gt;You can go back to the exact moment you missed and figure out what you failed to understand at minute fifteen — before spending the next hour and a half nodding along as if everything made sense.&lt;/p&gt;

&lt;p&gt;The difference is roughly the difference between:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“copy what’s on the board”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“understand what’s written on it.”&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Leo — and the Difference Between a Chatbot and a Colleague
&lt;/h3&gt;

&lt;p&gt;And this is where Whisperer started becoming something more than a collection of tools.&lt;/p&gt;

&lt;p&gt;Because once you have hundreds of conversations, meetings, documents, tasks, and notes, a very natural question appears:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why save all of this if you can’t actually talk to it later?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s how Leo was born.&lt;/p&gt;

&lt;p&gt;Leo is Whisperer’s AI agent.&lt;/p&gt;

&lt;p&gt;I try not to call him simply an “AI assistant.”&lt;/p&gt;

&lt;p&gt;The word “assistant” has been worn down so much that you can use it for everything — from a chatbot to a Wi-Fi coffee machine.&lt;/p&gt;

&lt;p&gt;I’m more interested in a different idea.&lt;/p&gt;

&lt;p&gt;A regular chatbot knows exactly what you told it in your last message.&lt;/p&gt;

&lt;p&gt;It’s brilliant and amnesiac at the same time.&lt;/p&gt;

&lt;p&gt;Every conversation starts from scratch, and every time you have to explain who you are, what you’re working on, and why it matters.&lt;/p&gt;

&lt;p&gt;A work agent should understand something else:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;what happened before, what you’re working on now, and what you actually need.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a real example from my day:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What did we promise Romashka last week, and what hasn’t been done yet?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There isn’t a single word in that question that can be answered from general knowledge.&lt;/p&gt;

&lt;p&gt;You need the meetings with that client, the tasks that came out of them, and their current status.&lt;/p&gt;

&lt;p&gt;Under the hood, Leo uses LangGraph, long-term memory with vector search through Qdrant, and a set of tools connected to the platform’s data.&lt;/p&gt;

&lt;p&gt;Technically, you could call it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG + tools + memory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Practically, the difference is between:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“a smart conversational partner”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“a colleague who’s actually in the loop.”&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hub: Where Context Stops Falling Apart
&lt;/h3&gt;

&lt;p&gt;Over the course of a day, a person accumulates meetings, conversations, files, notes, tasks, decisions, and ideas.&lt;/p&gt;

&lt;p&gt;And then everything immediately starts falling apart.&lt;/p&gt;

&lt;p&gt;The meeting is in Zoom.&lt;/p&gt;

&lt;p&gt;The agreement is in Telegram.&lt;/p&gt;

&lt;p&gt;The file is in Google Docs.&lt;/p&gt;

&lt;p&gt;The task is in a project tracker.&lt;/p&gt;

&lt;p&gt;The note is in Obsidian.&lt;/p&gt;

&lt;p&gt;The idea is sitting in a browser tab you’ll keep open for another month.&lt;/p&gt;

&lt;p&gt;None of these tools are doing anything wrong.&lt;/p&gt;

&lt;p&gt;They simply don’t know about one another.&lt;/p&gt;

&lt;p&gt;The Hub is an attempt to organize context around the &lt;strong&gt;work&lt;/strong&gt;, rather than around the tool.&lt;/p&gt;

&lt;p&gt;“Romashka — implementation.”&lt;/p&gt;

&lt;p&gt;“Hire a designer.”&lt;/p&gt;

&lt;p&gt;“2.0 release.”&lt;/p&gt;

&lt;p&gt;The meeting automatically belongs to the relevant piece of work, and an agreement gets an address — the tracker board where that work is actually waiting.&lt;/p&gt;

&lt;p&gt;It sounds obvious.&lt;/p&gt;

&lt;p&gt;The first version sent tasks to the first project it happened to find because there was literally nothing to tell it which project was correct.&lt;/p&gt;

&lt;p&gt;There was no entity that knew what the meeting belonged to.&lt;/p&gt;

&lt;p&gt;So we had to build one.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Works Worse Than I’d Like
&lt;/h3&gt;

&lt;p&gt;Since we’re among friends here…&lt;/p&gt;

&lt;p&gt;When you build a product alone, you have a wonderful one-person team.&lt;/p&gt;

&lt;p&gt;That person is the CTO, backend engineer, frontend engineer, DevOps, designer, support, and the guy who asks himself at 1 a.m. why he started this in the first place.&lt;/p&gt;

&lt;p&gt;One of the team’s recent achievements:&lt;/p&gt;

&lt;p&gt;The fonts on the landing page broke and stayed broken for a month because a relative &lt;code&gt;url()&lt;/code&gt; in CSS survived a file move, while Vite quite reasonably left the string exactly as it was.&lt;/p&gt;

&lt;p&gt;Someone once opened a room with basically no styling at all — the second entry point simply didn’t know about the CSS for that section.&lt;/p&gt;

&lt;p&gt;AI makes mistakes.&lt;/p&gt;

&lt;p&gt;Sometimes beautifully and convincingly, which is worse.&lt;/p&gt;

&lt;p&gt;I’ve rebuilt some ideas three times, and not because the code was bad.&lt;/p&gt;

&lt;p&gt;Because the first version was solving the wrong problem.&lt;/p&gt;

&lt;p&gt;Technically, the whole thing is fully asynchronous Python: FastAPI, SQLAlchemy 2.x with asyncpg, PostgreSQL, Qdrant, Redis, LangGraph, TaskIQ, and NATS JetStream.&lt;/p&gt;

&lt;p&gt;The frontend is React with TypeScript, feature-first, with the import graph checked by a machine rather than by sheer force of will.&lt;/p&gt;

&lt;p&gt;Sixteen interface languages, because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Let’s start with Russian and English, and add the rest later”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is a surprisingly effective way to make sure you never add the rest.&lt;/p&gt;

&lt;p&gt;But none of that matters if, after the meeting, you still don’t remember what you decided.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Build This?
&lt;/h3&gt;

&lt;p&gt;I’m not building an AI product.&lt;/p&gt;

&lt;p&gt;I’m building a thing that tries to give people their attention back.&lt;/p&gt;

&lt;p&gt;After a meeting, you shouldn’t have to reconstruct what happened from memory.&lt;/p&gt;

&lt;p&gt;After a lecture, you shouldn’t have to piece the material back together from scraps.&lt;/p&gt;

&lt;p&gt;During an international conversation, you shouldn’t have to be your own translator.&lt;/p&gt;

&lt;p&gt;And during a technical meeting, you shouldn’t have to simultaneously be the developer, stenographer, secretary, and human context-transfer layer between browser tabs.&lt;/p&gt;

&lt;p&gt;AI is the tool here, not the point.&lt;/p&gt;

&lt;p&gt;The point is that all the mechanical work surrounding communication consumes an absurd amount of the resource that should have gone into the actual work.&lt;/p&gt;

&lt;h3&gt;
  
  
  And I Still Don’t Know If It Will Work
&lt;/h3&gt;

&lt;p&gt;This is probably not the most appropriate ending for an article about my own product.&lt;/p&gt;

&lt;p&gt;But it’s the only honest one I have.&lt;/p&gt;

&lt;p&gt;I don’t know whether Whisperer will become a big product.&lt;/p&gt;

&lt;p&gt;I don’t know whether millions of people will need it.&lt;/p&gt;

&lt;p&gt;I don’t know which of today’s ideas will look brilliant a year from now — and which ones will look ridiculous.&lt;/p&gt;

&lt;p&gt;But I do know one thing.&lt;/p&gt;

&lt;p&gt;I started building it as a tool for myself.&lt;/p&gt;

&lt;p&gt;And now I have a slightly disturbing habit:&lt;/p&gt;

&lt;p&gt;I join a meeting and immediately check whether the recording is running.&lt;/p&gt;

&lt;p&gt;Because without it, I’m back to being that guy who gets four lines out of a two-hour meeting.&lt;/p&gt;

&lt;p&gt;Two of them still say:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“!!”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If this made you curious, take a look at &lt;strong&gt;Whisperer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://whisperer.one/" rel="noopener noreferrer"&gt;whisperer.one&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
