<?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: Ivan Tishkov</title>
    <description>The latest articles on DEV Community by Ivan Tishkov (@ivan_tishkov).</description>
    <link>https://dev.to/ivan_tishkov</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%2F4003826%2Fb258812e-623c-4aeb-a11a-2eb69def1775.png</url>
      <title>DEV Community: Ivan Tishkov</title>
      <link>https://dev.to/ivan_tishkov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ivan_tishkov"/>
    <language>en</language>
    <item>
      <title>How Telegram Mini Apps Reduced Our Onboarding from 2 Minutes to 10 Seconds</title>
      <dc:creator>Ivan Tishkov</dc:creator>
      <pubDate>Fri, 03 Jul 2026 12:30:42 +0000</pubDate>
      <link>https://dev.to/ivan_tishkov/how-telegram-mini-apps-reduced-our-onboarding-from-2-minutes-to-10-seconds-ji8</link>
      <guid>https://dev.to/ivan_tishkov/how-telegram-mini-apps-reduced-our-onboarding-from-2-minutes-to-10-seconds-ji8</guid>
      <description>&lt;p&gt;When I started building my latest side project, I thought the hardest part would be the game itself.&lt;/p&gt;

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

&lt;p&gt;The real challenge wasn't networking, animations, or game logic.&lt;/p&gt;

&lt;p&gt;It was everything that happened &lt;strong&gt;before&lt;/strong&gt; the game even started.&lt;/p&gt;

&lt;p&gt;I realized I wasn't optimizing gameplay.&lt;/p&gt;

&lt;p&gt;I was optimizing the time between someone saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;"Let's play."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and actually playing.&lt;/p&gt;

&lt;p&gt;That changed the way I think about product development.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you've ever tried to get a group of friends into a multiplayer mobile game, you've probably seen something like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Receive a link ⭢ Open the App Store ⭢ Download the app ⭢ Install ⭢ Create an account ⭢ Verify your email ⭢ Sign in ⭢ Find a room ⭢ Start playing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every additional step increases the chance that someone simply gives up.&lt;/p&gt;

&lt;p&gt;Not because they don't want to play.&lt;/p&gt;

&lt;p&gt;Because onboarding has already become work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Wanted Instead
&lt;/h2&gt;

&lt;p&gt;Before writing the first line of code, I defined one simple requirement.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Joining a game should feel almost effortless.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The ideal flow looked like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Receive a link ⭢ Tap ⭢ Play
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;No friction.&lt;/p&gt;

&lt;p&gt;No unnecessary decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Telegram Mini Apps
&lt;/h2&gt;

&lt;p&gt;After exploring different approaches, Telegram Mini Apps turned out to solve most of the onboarding problems automatically.&lt;/p&gt;

&lt;p&gt;Users already have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Telegram installed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An authenticated identity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A profile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A social graph.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A familiar interface.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of asking people to create another account, we simply use the one they already have.&lt;/p&gt;




&lt;h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyuqsw5dbouyi5vx5im9r.jpg" alt="Easy onboarding flow" width="800" height="533"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;Our onboarding flow became dramatically shorter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Receive a link ⭢ Open Telegram ⭢ Start playing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No installation.&lt;/p&gt;

&lt;p&gt;No registration.&lt;/p&gt;

&lt;p&gt;No passwords.&lt;/p&gt;

&lt;p&gt;No email verification.&lt;/p&gt;

&lt;p&gt;For first-time users joining a friend's room, the entire process usually takes &lt;strong&gt;5–10 seconds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ironically, this became one of the most important performance metrics of the project.&lt;/p&gt;

&lt;p&gt;Not FPS.&lt;/p&gt;

&lt;p&gt;Not API latency.&lt;/p&gt;

&lt;p&gt;Not Lighthouse scores.&lt;/p&gt;

&lt;p&gt;Time to first game.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Most Surprising Part
&lt;/h2&gt;

&lt;p&gt;I expected people to say things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;"That's a cool Telegram app."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Almost nobody did.&lt;/p&gt;

&lt;p&gt;Instead, they said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;"Wait... we're already in?"&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was the moment I realized something important.&lt;/p&gt;

&lt;p&gt;Users rarely care about the technology behind your product.&lt;/p&gt;

&lt;p&gt;They care about how quickly they reach value.&lt;/p&gt;

&lt;p&gt;The best onboarding experience is often the one nobody notices.&lt;/p&gt;




&lt;h2&gt;
  
  
  It Wasn't Free
&lt;/h2&gt;

&lt;p&gt;Telegram Mini Apps solve many problems, but they also introduce new engineering challenges.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Working within a mobile WebView.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizing animations for mobile devices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handling deep links.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing application state.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designing interfaces for small vertical screens.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still, every one of those trade-offs felt worthwhile compared to asking users to go through a traditional registration flow.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2fl9p0x4jr1byq52n3o.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2fl9p0x4jr1byq52n3o.jpg" alt="Easy architecture" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Project Changed for Me
&lt;/h2&gt;

&lt;p&gt;Before this project, I thought great products were built by adding more features.&lt;/p&gt;

&lt;p&gt;Now I think the opposite.&lt;/p&gt;

&lt;p&gt;Great products often win because they remove more obstacles.&lt;/p&gt;

&lt;p&gt;Every extra screen.&lt;/p&gt;

&lt;p&gt;Every required field.&lt;/p&gt;

&lt;p&gt;Every password.&lt;/p&gt;

&lt;p&gt;Every verification step.&lt;/p&gt;

&lt;p&gt;Each one is another opportunity for users to leave before experiencing any value.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Today, whenever I start building something new, I ask myself a different question.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What else can I build?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What can I remove before users get their first moment of value?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For this project, Telegram Mini Apps reduced that journey from roughly two minutes to around ten seconds.&lt;/p&gt;

&lt;p&gt;Looking back, that wasn't just an implementation detail.&lt;/p&gt;

&lt;p&gt;It was one of the best product decisions I made.&lt;/p&gt;




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

&lt;p&gt;The ideas described in this article came from building a real-time multiplayer Telegram Mini App. I'll be writing more about its architecture, networking, UI challenges, and product decisions in future posts.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>ux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A quick question for DEV authors</title>
      <dc:creator>Ivan Tishkov</dc:creator>
      <pubDate>Fri, 03 Jul 2026 11:49:52 +0000</pubDate>
      <link>https://dev.to/ivan_tishkov/a-quick-question-for-dev-authors-3ik5</link>
      <guid>https://dev.to/ivan_tishkov/a-quick-question-for-dev-authors-3ik5</guid>
      <description>&lt;p&gt;Hi everyone!&lt;/p&gt;

&lt;p&gt;I'm new to DEV and I'm planning to start writing regularly about product development and software engineering.&lt;/p&gt;

&lt;p&gt;Before publishing more articles, I wanted to ask a quick question.&lt;/p&gt;

&lt;p&gt;How long did it take for your first article to start appearing in tag feeds and getting its first views?&lt;/p&gt;

&lt;p&gt;Was it immediate?&lt;/p&gt;

&lt;p&gt;Or did it take a while for a brand new account?&lt;/p&gt;

&lt;p&gt;I'd love to hear about your experience.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>devops</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>I Thought I Was Building a Game. I Was Actually Removing Friction.</title>
      <dc:creator>Ivan Tishkov</dc:creator>
      <pubDate>Fri, 26 Jun 2026 10:54:16 +0000</pubDate>
      <link>https://dev.to/ivan_tishkov/i-thought-i-was-building-a-game-i-was-actually-removing-friction-152k</link>
      <guid>https://dev.to/ivan_tishkov/i-thought-i-was-building-a-game-i-was-actually-removing-friction-152k</guid>
      <description>&lt;p&gt;When I started building my latest side project, I thought I was solving the wrong problem.&lt;/p&gt;

&lt;p&gt;I believed I was building a multiplayer game.&lt;/p&gt;

&lt;p&gt;Months later I realized that almost none of my time had actually been spent on "the game."&lt;/p&gt;

&lt;p&gt;Most of it was spent removing friction.&lt;/p&gt;

&lt;p&gt;And that completely changed the way I think about product development.&lt;/p&gt;




&lt;h2&gt;
  
  
  We often optimize the wrong thing
&lt;/h2&gt;

&lt;p&gt;As engineers, we naturally focus on features.&lt;/p&gt;

&lt;p&gt;Can we add matchmaking?&lt;/p&gt;

&lt;p&gt;Can we improve the animations?&lt;/p&gt;

&lt;p&gt;Can we make the UI look better?&lt;/p&gt;

&lt;p&gt;Can we support more players?&lt;/p&gt;

&lt;p&gt;Those things matter.&lt;/p&gt;

&lt;p&gt;But eventually I realized there was a much bigger problem.&lt;/p&gt;

&lt;p&gt;People weren't leaving because the game wasn't fun.&lt;/p&gt;

&lt;p&gt;Many of them never even reached the game.&lt;/p&gt;




&lt;h2&gt;
  
  
  Every extra step costs users
&lt;/h2&gt;

&lt;p&gt;Imagine a simple situation.&lt;/p&gt;

&lt;p&gt;A group of friends decides they want to play something together.&lt;/p&gt;

&lt;p&gt;The conversation usually sounds like this.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's play."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simple.&lt;/p&gt;

&lt;p&gt;Until reality starts.&lt;/p&gt;

&lt;p&gt;Somebody needs to install an app.&lt;/p&gt;

&lt;p&gt;Somebody has to register.&lt;/p&gt;

&lt;p&gt;Someone forgot their password.&lt;/p&gt;

&lt;p&gt;Someone has poor mobile internet.&lt;/p&gt;

&lt;p&gt;Someone doesn't want another app they'll delete tomorrow.&lt;/p&gt;

&lt;p&gt;Someone can't find the private room.&lt;/p&gt;

&lt;p&gt;Five minutes later...&lt;/p&gt;

&lt;p&gt;Nobody is playing anymore.&lt;/p&gt;

&lt;p&gt;The excitement disappears long before the first interaction with the product itself.&lt;/p&gt;

&lt;p&gt;That's when I realized something.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People weren't abandoning the product.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;They were abandoning the onboarding.&lt;/strong&gt;
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8k4a3drqlindenylu3nf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8k4a3drqlindenylu3nf.png" alt="Diagram showing the user journey from idea to playing: Install → Register → Verify → Login → Join → Play, illustrating how every additional step increases user friction." width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Measuring time to value
&lt;/h2&gt;

&lt;p&gt;Developers often measure things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Page load time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API latency&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FPS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory usage&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those metrics matter.&lt;/p&gt;

&lt;p&gt;But I started paying attention to something different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take until the user gets the first moment of value?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not when the application opens.&lt;/p&gt;

&lt;p&gt;Not when authentication finishes.&lt;/p&gt;

&lt;p&gt;Not when analytics initialize.&lt;/p&gt;

&lt;p&gt;When the user actually experiences what they came for.&lt;/p&gt;

&lt;p&gt;That became the metric I cared about the most.&lt;/p&gt;




&lt;h2&gt;
  
  
  So I removed everything I could
&lt;/h2&gt;

&lt;p&gt;Instead of adding features, I started deleting steps.&lt;/p&gt;

&lt;p&gt;Registration disappeared.&lt;/p&gt;

&lt;p&gt;Passwords disappeared.&lt;/p&gt;

&lt;p&gt;Searching for rooms disappeared.&lt;/p&gt;

&lt;p&gt;Extra menus disappeared.&lt;/p&gt;

&lt;p&gt;The goal became surprisingly simple.&lt;/p&gt;

&lt;p&gt;Someone receives a link.&lt;/p&gt;

&lt;p&gt;They tap it.&lt;/p&gt;

&lt;p&gt;They're already where they wanted to be.&lt;/p&gt;

&lt;p&gt;That single idea influenced almost every product decision afterwards.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technology isn't the feature
&lt;/h2&gt;

&lt;p&gt;The interesting part is that nobody ever mentioned the technology.&lt;/p&gt;

&lt;p&gt;Nobody said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Nice authentication flow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cool onboarding."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody cared.&lt;/p&gt;

&lt;p&gt;Instead they said things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"That was fast."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We're already in?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's when I realized something important.&lt;/p&gt;

&lt;p&gt;Good onboarding is almost invisible.&lt;/p&gt;

&lt;p&gt;If people notice it, it's probably too complicated.&lt;/p&gt;




&lt;h2&gt;
  
  
  The unexpected result
&lt;/h2&gt;

&lt;p&gt;Originally, I thought I was building a multiplayer game.&lt;/p&gt;

&lt;p&gt;In reality, I spent months reducing the distance between two moments:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's do this."&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"We're doing it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everything else became secondary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters beyond games
&lt;/h2&gt;

&lt;p&gt;This isn't really about games.&lt;/p&gt;

&lt;p&gt;It's about every digital product.&lt;/p&gt;

&lt;p&gt;Food delivery.&lt;/p&gt;

&lt;p&gt;Banking.&lt;/p&gt;

&lt;p&gt;Travel.&lt;/p&gt;

&lt;p&gt;Social apps.&lt;/p&gt;

&lt;p&gt;Developer tools.&lt;/p&gt;

&lt;p&gt;Every unnecessary click introduces doubt.&lt;/p&gt;

&lt;p&gt;Every extra screen gives users another opportunity to leave.&lt;/p&gt;

&lt;p&gt;Sometimes improving a product doesn't require another feature.&lt;/p&gt;

&lt;p&gt;Sometimes it simply requires removing five unnecessary clicks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Looking back, I don't think the biggest lesson from this project was technical.&lt;/p&gt;

&lt;p&gt;It was psychological.&lt;/p&gt;

&lt;p&gt;People rarely quit because your product is bad.&lt;/p&gt;

&lt;p&gt;More often, they quit because reaching your product takes too much effort.&lt;/p&gt;

&lt;p&gt;Now, whenever I build something new, I ask a different question.&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What should I add next?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What can I remove before the user gets value?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ironically, the project that taught me this lesson happened to be a multiplayer poker game running as a Telegram Mini App.&lt;/p&gt;

&lt;p&gt;But the lesson has nothing to do with poker.&lt;/p&gt;

&lt;p&gt;It's something I'll probably carry into every product I build from now on.&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>miniapp</category>
      <category>webdev</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
