<?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: Sreya Satheesh</title>
    <description>The latest articles on DEV Community by Sreya Satheesh (@sreya-satheesh).</description>
    <link>https://dev.to/sreya-satheesh</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%2F3754294%2F57d1b5e5-7f14-4239-bf13-dc77e8e0ba9b.jpg</url>
      <title>DEV Community: Sreya Satheesh</title>
      <link>https://dev.to/sreya-satheesh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sreya-satheesh"/>
    <language>en</language>
    <item>
      <title>What Happens When You Send a WhatsApp Message?</title>
      <dc:creator>Sreya Satheesh</dc:creator>
      <pubDate>Sat, 03 Oct 2026 11:18:17 +0000</pubDate>
      <link>https://dev.to/sreya-satheesh/what-happens-when-you-send-a-whatsapp-message-3ldg</link>
      <guid>https://dev.to/sreya-satheesh/what-happens-when-you-send-a-whatsapp-message-3ldg</guid>
      <description>&lt;p&gt;We use WhatsApp every day.&lt;/p&gt;

&lt;p&gt;Send a message.&lt;br&gt;
See the ticks.&lt;br&gt;
Get a reply.&lt;/p&gt;

&lt;p&gt;It is easy to think of messaging as something that happens directly between two phones.&lt;/p&gt;

&lt;p&gt;But there is a whole system between them.&lt;/p&gt;

&lt;p&gt;Where does the message go after you tap Send?&lt;/p&gt;

&lt;p&gt;How does WhatsApp find the person you're messaging?&lt;/p&gt;

&lt;p&gt;What happens if they are offline?&lt;/p&gt;

&lt;p&gt;How does one tick become two?&lt;/p&gt;

&lt;p&gt;What happens when the same message is received twice?&lt;/p&gt;

&lt;p&gt;And what changes when millions of people are sending messages at the same time?&lt;/p&gt;

&lt;p&gt;Those questions became &lt;strong&gt;&lt;a href="https://whats-up-ivory.vercel.app/" rel="noopener noreferrer"&gt;What's Up?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with one message
&lt;/h2&gt;

&lt;p&gt;I wanted to build a different kind of system design visualizer.&lt;/p&gt;

&lt;p&gt;Instead of starting with a large architecture diagram, I started with a WhatsApp chat.&lt;/p&gt;

&lt;p&gt;Eva sends Sam:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hey 👋&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The message leaves Eva's phone.&lt;/p&gt;

&lt;p&gt;From there, the app lets you follow what happens inside a messaging system.&lt;/p&gt;

&lt;p&gt;The message reaches a server.&lt;/p&gt;

&lt;p&gt;Sam's connection may be sitting on another server.&lt;/p&gt;

&lt;p&gt;The system needs to find it.&lt;/p&gt;

&lt;p&gt;If Sam is offline, the message needs to be stored until he comes back.&lt;/p&gt;

&lt;p&gt;When he reconnects, the message can be delivered.&lt;/p&gt;

&lt;p&gt;Then there is another question:&lt;/p&gt;

&lt;p&gt;How does Eva know it was delivered?&lt;/p&gt;

&lt;p&gt;And how does she know Sam actually read it?&lt;/p&gt;

&lt;p&gt;The familiar ticks on WhatsApp represent a much larger system underneath.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if something goes wrong?
&lt;/h2&gt;

&lt;p&gt;A message can be sent again.&lt;/p&gt;

&lt;p&gt;An acknowledgement can be lost.&lt;/p&gt;

&lt;p&gt;A server can fail.&lt;/p&gt;

&lt;p&gt;A connection can disappear.&lt;/p&gt;

&lt;p&gt;If a request is retried, the system has to deal with the possibility that the same message has arrived more than once.&lt;/p&gt;

&lt;p&gt;That is where things like message IDs and deduplication become important.&lt;/p&gt;

&lt;p&gt;The app lets you break parts of the system and see what changes when they are missing.&lt;/p&gt;

&lt;p&gt;Instead of only reading that a component is needed, you can see the problem it was solving.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about photos and videos?
&lt;/h2&gt;

&lt;p&gt;A WhatsApp message isn't always text.&lt;/p&gt;

&lt;p&gt;Photos and videos are much larger.&lt;/p&gt;

&lt;p&gt;So the system needs another path for media.&lt;/p&gt;

&lt;p&gt;Object storage can hold the actual file.&lt;/p&gt;

&lt;p&gt;A CDN can help deliver it.&lt;/p&gt;

&lt;p&gt;The message itself can carry the information needed to find that media.&lt;/p&gt;

&lt;p&gt;One chat can therefore involve several different services, depending on what is being sent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes in a group?
&lt;/h2&gt;

&lt;p&gt;A message to Sam is one thing.&lt;/p&gt;

&lt;p&gt;A message to a group is different.&lt;/p&gt;

&lt;p&gt;One message may need to reach many people.&lt;/p&gt;

&lt;p&gt;Now the system has to deal with group membership, fan-out, queues and delivery at a larger scale.&lt;/p&gt;

&lt;p&gt;The same small chat bubble creates a different problem once there are many recipients.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is everyone?
&lt;/h2&gt;

&lt;p&gt;WhatsApp also shows things like online status and last seen.&lt;/p&gt;

&lt;p&gt;That creates another question for the system:&lt;/p&gt;

&lt;p&gt;How does it know whether Sam is online?&lt;/p&gt;

&lt;p&gt;A presence system needs to keep track of changing connections without turning every small status change into an expensive operation.&lt;/p&gt;

&lt;p&gt;Again, something that looks like a tiny piece of the WhatsApp interface has a system behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then there is scale
&lt;/h2&gt;

&lt;p&gt;Two people sending messages is easy to picture.&lt;/p&gt;

&lt;p&gt;WhatsApp has billions of users, so the system cannot depend on one server or one database.&lt;/p&gt;

&lt;p&gt;Connections need to be distributed.&lt;/p&gt;

&lt;p&gt;Messages need to be routed.&lt;/p&gt;

&lt;p&gt;Data needs to be partitioned and replicated.&lt;/p&gt;

&lt;p&gt;Queues can separate pieces of work.&lt;/p&gt;

&lt;p&gt;Services need to keep working when individual servers fail.&lt;/p&gt;

&lt;p&gt;The architecture grows from the questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  And security?
&lt;/h2&gt;

&lt;p&gt;A messaging system also has to answer a much more important question:&lt;/p&gt;

&lt;p&gt;Who can read the message?&lt;/p&gt;

&lt;p&gt;The design needs to account for encryption and, for WhatsApp, end-to-end encryption as part of the security model.&lt;/p&gt;

&lt;p&gt;That adds another boundary to the system.&lt;/p&gt;

&lt;p&gt;The message still needs to travel through the infrastructure.&lt;/p&gt;

&lt;p&gt;The infrastructure should not simply become a place where the message can be read.&lt;/p&gt;

&lt;h2&gt;
  
  
  That's what I wanted to show
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://whats-up-ivory.vercel.app/" rel="noopener noreferrer"&gt;What's Up?&lt;/a&gt;&lt;/strong&gt; is a visual walkthrough of how a WhatsApp-style messaging system can be designed.&lt;/p&gt;

&lt;p&gt;It starts with one message and gradually introduces the pieces needed to make messaging work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebSockets for persistent connections&lt;/li&gt;
&lt;li&gt;connection management&lt;/li&gt;
&lt;li&gt;message routing&lt;/li&gt;
&lt;li&gt;offline storage&lt;/li&gt;
&lt;li&gt;delivery and read acknowledgements&lt;/li&gt;
&lt;li&gt;retries and deduplication&lt;/li&gt;
&lt;li&gt;media storage and CDNs&lt;/li&gt;
&lt;li&gt;group messaging&lt;/li&gt;
&lt;li&gt;queues&lt;/li&gt;
&lt;li&gt;presence&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;partitioning and replication&lt;/li&gt;
&lt;li&gt;scaling&lt;/li&gt;
&lt;li&gt;encryption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There isn't one giant diagram waiting at the beginning.&lt;/p&gt;

&lt;p&gt;The architecture appears as the questions appear.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Hey 👋&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And by the end, you can see the system that had to exist for those two words to reach the other side.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Up?
&lt;/h2&gt;

&lt;p&gt;That's the question behind the name too.&lt;/p&gt;

&lt;p&gt;What's up after you press &lt;strong&gt;Send?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quite a bit.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://whats-up-ivory.vercel.app/" rel="noopener noreferrer"&gt;Try What's Up?&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>systemdesign</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The One Time Password</title>
      <dc:creator>Sreya Satheesh</dc:creator>
      <pubDate>Thu, 01 Oct 2026 07:34:25 +0000</pubDate>
      <link>https://dev.to/sreya-satheesh/the-one-time-password-48j4</link>
      <guid>https://dev.to/sreya-satheesh/the-one-time-password-48j4</guid>
      <description>&lt;p&gt;👉 &lt;a href="https://the-one-time-password.vercel.app/" rel="noopener noreferrer"&gt;Try The One Time Password&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've all entered an OTP before.&lt;/p&gt;

&lt;p&gt;Six digits. Enter. Verify. Done.&lt;/p&gt;

&lt;p&gt;But what happens behind those six digits?&lt;/p&gt;

&lt;p&gt;Where is the OTP generated?&lt;/p&gt;

&lt;p&gt;Where is it stored?&lt;/p&gt;

&lt;p&gt;How does it expire?&lt;/p&gt;

&lt;p&gt;What happens when someone enters the wrong code?&lt;/p&gt;

&lt;p&gt;And what happens when millions of users need an OTP at the same time?&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;The One Time Password&lt;/strong&gt; to explore these questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is It?
&lt;/h2&gt;

&lt;p&gt;The One Time Password is an interactive walkthrough of how an OTP service can be designed.&lt;/p&gt;

&lt;p&gt;Instead of showing the whole system as one architecture diagram, the app lets you follow a request through each part of it.&lt;/p&gt;

&lt;p&gt;A simplified flow looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User → API → OTP Service → Redis → Delivery Provider → User → Verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The user requests an OTP.&lt;/p&gt;

&lt;p&gt;The service generates one, stores it with an expiration time, and sends it to the user.&lt;/p&gt;

&lt;p&gt;The user enters the code.&lt;/p&gt;

&lt;p&gt;The service checks it and returns the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens to the OTP?
&lt;/h2&gt;

&lt;p&gt;An OTP is temporary, so the system needs to keep track of a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The code&lt;/li&gt;
&lt;li&gt;Who requested it&lt;/li&gt;
&lt;li&gt;How long it is valid&lt;/li&gt;
&lt;li&gt;Whether it has already been used&lt;/li&gt;
&lt;li&gt;How many verification attempts have been made&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the temporary storage, the design uses &lt;strong&gt;Redis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An OTP can be stored with a TTL (time-to-live):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate OTP
     ↓
Store OTP + TTL
     ↓
Send OTP
     ↓
User enters OTP
     ↓
Verify
     ↓
Success → Invalidate
Expired → Reject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the TTL expires, Redis removes the entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Security Part
&lt;/h2&gt;

&lt;p&gt;A six-digit OTP has only a limited number of possible combinations.&lt;/p&gt;

&lt;p&gt;So generating the code is only one part of the problem.&lt;/p&gt;

&lt;p&gt;The service also needs to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Brute-force attempts&lt;/li&gt;
&lt;li&gt;Resending OTPs&lt;/li&gt;
&lt;li&gt;Replay attempts&lt;/li&gt;
&lt;li&gt;OTP expiration&lt;/li&gt;
&lt;li&gt;Secure random generation&lt;/li&gt;
&lt;li&gt;Preventing an OTP from being reused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, what should happen if someone keeps trying different codes?&lt;/p&gt;

&lt;p&gt;Or keeps requesting new OTPs?&lt;/p&gt;

&lt;p&gt;These are the kinds of cases the system needs to account for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens at Scale?
&lt;/h2&gt;

&lt;p&gt;Now take the same service and give it millions of users.&lt;/p&gt;

&lt;p&gt;A few more questions come up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can multiple application servers handle the requests?&lt;/li&gt;
&lt;li&gt;How do they share OTP state?&lt;/li&gt;
&lt;li&gt;What happens if Redis goes down?&lt;/li&gt;
&lt;li&gt;What happens if the SMS or email provider is slow?&lt;/li&gt;
&lt;li&gt;What happens when a request is retried?&lt;/li&gt;
&lt;li&gt;How should repeated OTP requests be handled?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The six-digit code is straightforward.&lt;/p&gt;

&lt;p&gt;The system around it is where most of the design decisions are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inside the App
&lt;/h2&gt;

&lt;p&gt;The walkthrough covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OTP generation&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;TTL and expiration&lt;/li&gt;
&lt;li&gt;Verification&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Scaling&lt;/li&gt;
&lt;li&gt;Retries&lt;/li&gt;
&lt;li&gt;Failures&lt;/li&gt;
&lt;li&gt;System architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can move through the request and see how these pieces connect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://the-one-time-password.vercel.app/" rel="noopener noreferrer"&gt;The One Time Password&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start with an OTP request and follow it through the system.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>backend</category>
      <category>webdev</category>
      <category>security</category>
    </item>
    <item>
      <title>Behind Every 429 Too Many Requests</title>
      <dc:creator>Sreya Satheesh</dc:creator>
      <pubDate>Thu, 18 Jun 2026 08:05:53 +0000</pubDate>
      <link>https://dev.to/sreya-satheesh/behind-every-429-too-many-requests-pfn</link>
      <guid>https://dev.to/sreya-satheesh/behind-every-429-too-many-requests-pfn</guid>
      <description>&lt;p&gt;👉 &lt;a href="https://rate-limiter-two.vercel.app/" rel="noopener noreferrer"&gt;https://rate-limiter-two.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most developers have seen this message before:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;429 Too Many Requests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A request gets rejected because a limit has been reached.&lt;/p&gt;

&lt;p&gt;But what actually happens behind the scenes?&lt;/p&gt;

&lt;p&gt;How does the system know you've made too many requests?&lt;/p&gt;

&lt;p&gt;Where are those requests counted?&lt;/p&gt;

&lt;p&gt;What happens when millions of users are sending requests at the same time?&lt;/p&gt;

&lt;p&gt;Those questions got me interested in rate limiter design.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Rate Limiter?
&lt;/h2&gt;

&lt;p&gt;A rate limiter controls how many requests a user, client, or service can make within a given period of time.&lt;/p&gt;

&lt;p&gt;You'll find them almost everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Authentication systems&lt;/li&gt;
&lt;li&gt;Payment services&lt;/li&gt;
&lt;li&gt;AI applications&lt;/li&gt;
&lt;li&gt;Public platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without rate limiting, a single user or script could overwhelm a system with requests.&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%2Fpauegz8a6ybqjwjmp3mr.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%2Fpauegz8a6ybqjwjmp3mr.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Designing One Matter?
&lt;/h2&gt;

&lt;p&gt;A simple rate limiter might work for a small application.&lt;/p&gt;

&lt;p&gt;Things become more interesting when the traffic grows.&lt;/p&gt;

&lt;p&gt;Where should request counts be stored?&lt;/p&gt;

&lt;p&gt;How much data needs to be maintained?&lt;/p&gt;

&lt;p&gt;How many requests should the system handle every second?&lt;/p&gt;

&lt;p&gt;How do multiple servers share the same limits?&lt;/p&gt;

&lt;p&gt;Answering those questions is where system design comes in.&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%2Fo6r3a2suyf1sjucb3gy3.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%2Fo6r3a2suyf1sjucb3gy3.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Down the Design
&lt;/h2&gt;

&lt;p&gt;The project covers the different stages involved in designing a rate limiter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functional Requirements&lt;/li&gt;
&lt;li&gt;Non-Functional Requirements&lt;/li&gt;
&lt;li&gt;Capacity Estimation&lt;/li&gt;
&lt;li&gt;High-Level Design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each section builds on the previous one.&lt;/p&gt;

&lt;p&gt;Requirements influence the scale.&lt;/p&gt;

&lt;p&gt;Scale influences the architecture.&lt;/p&gt;

&lt;p&gt;And the architecture influences the implementation choices.&lt;/p&gt;

&lt;h2&gt;
  
  
  High-Level Design
&lt;/h2&gt;

&lt;p&gt;Once the requirements and scale are clear, the architecture becomes much easier to understand.&lt;/p&gt;

&lt;p&gt;The High-Level Design section explains the major components involved and how requests move through the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Algorithms and race conditions are currently being added.&lt;/p&gt;

&lt;p&gt;Future updates will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed Window&lt;/li&gt;
&lt;li&gt;Sliding Window&lt;/li&gt;
&lt;li&gt;Token Bucket&lt;/li&gt;
&lt;li&gt;Leaky Bucket&lt;/li&gt;
&lt;li&gt;Distributed rate limiting challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://rate-limiter-two.vercel.app/" rel="noopener noreferrer"&gt;https://rate-limiter-two.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>systemdesign</category>
      <category>backend</category>
      <category>ratelimiter</category>
    </item>
    <item>
      <title>What If DSA Was Taught Visually Instead of Just Theory?</title>
      <dc:creator>Sreya Satheesh</dc:creator>
      <pubDate>Thu, 11 Jun 2026 05:45:07 +0000</pubDate>
      <link>https://dev.to/sreya-satheesh/what-if-dsa-was-taught-visually-instead-of-just-theory-4fgf</link>
      <guid>https://dev.to/sreya-satheesh/what-if-dsa-was-taught-visually-instead-of-just-theory-4fgf</guid>
      <description>&lt;p&gt;👉 &lt;a href="https://www.decoded-app.com/" rel="noopener noreferrer"&gt;https://www.decoded-app.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When learning DSA, it's easy to fall into a familiar cycle.&lt;/p&gt;

&lt;p&gt;You solve a problem, understand the solution, and move on.&lt;/p&gt;

&lt;p&gt;A few days later, you come across a similar problem—and suddenly it feels unfamiliar again.&lt;/p&gt;

&lt;p&gt;The frustrating part is that you did understand the solution.&lt;/p&gt;

&lt;p&gt;What often doesn't stick is the reasoning behind it.&lt;/p&gt;

&lt;p&gt;How do you know where to start?&lt;/p&gt;

&lt;p&gt;How do you recognize patterns?&lt;/p&gt;

&lt;p&gt;How do you arrive at an efficient approach before writing any code?&lt;/p&gt;

&lt;p&gt;Those questions are what led me to build Decoded.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Decoded?
&lt;/h2&gt;

&lt;p&gt;Decoded is a small app focused on helping people understand how DSA problems are approached, not just how they're solved.&lt;/p&gt;

&lt;p&gt;Instead of jumping straight to the final solution, it breaks problems down step by step.&lt;/p&gt;

&lt;p&gt;The goal is to show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how you begin thinking about a problem&lt;/li&gt;
&lt;li&gt;how patterns start becoming visible&lt;/li&gt;
&lt;li&gt;how an approach gradually forms&lt;/li&gt;
&lt;li&gt;and how the final solution evolves from there&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than memorizing answers, the focus is on understanding the path that leads to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  See Algorithms in Action
&lt;/h2&gt;

&lt;p&gt;One feature I found especially useful while learning was seeing algorithms unfold visually.&lt;/p&gt;

&lt;p&gt;So Decoded includes step-by-step dry runs that show how variables, pointers, and state change throughout execution.&lt;/p&gt;

&lt;p&gt;For example, in the Longest Substring Without Repeating Characters problem, you can watch the sliding window expand and shrink as duplicate characters are encountered.&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%2Fpbjj9q0a93t34uw57w9z.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%2Fpbjj9q0a93t34uw57w9z.png" alt="A step-by-step dry run of the **Longest Substring Without Repeating Characters** problem, showing how the sliding window expands and shrinks as duplicate characters are detected. The visualization tracks pointer movement, current window state, character memory, and maximum substring length in real time.&lt;br&gt;
" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of reading through a static explanation, you can follow the algorithm's behavior step by step and see exactly why each decision is made.&lt;/p&gt;

&lt;p&gt;The goal is to make the process feel less abstract and easier to follow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learning Patterns Instead of Memorizing Problems
&lt;/h2&gt;

&lt;p&gt;One thing I noticed while studying DSA is that most problems aren't completely unique.&lt;/p&gt;

&lt;p&gt;Many of them are variations of a handful of recurring patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sliding Window&lt;/li&gt;
&lt;li&gt;Two Pointers&lt;/li&gt;
&lt;li&gt;Prefix Sum&lt;/li&gt;
&lt;li&gt;DFS / BFS&lt;/li&gt;
&lt;li&gt;Heaps&lt;/li&gt;
&lt;li&gt;Dynamic Programming
and more&lt;/li&gt;
&lt;/ul&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%2Fxpsp8ueolbaos1xauxp9.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%2Fxpsp8ueolbaos1xauxp9.png" alt="A visual explanation of the Two Pointers pattern, showing how left and right pointers move through an array to solve problems efficiently. The interactive examples demonstrate common approaches like opposite-end traversal and fast/slow pointers, along with real interview-style problems where the pattern is commonly used.&lt;br&gt;
" width="799" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you start recognizing these patterns, solving problems becomes much easier.&lt;/p&gt;

&lt;p&gt;You're no longer starting from scratch every time.&lt;/p&gt;

&lt;p&gt;Instead, you're identifying familiar structures and applying ideas you've seen before.&lt;/p&gt;

&lt;p&gt;Decoded tries to make those patterns easier to spot through visual explanations and guided breakdowns.&lt;/p&gt;

&lt;p&gt;For example, the Two Pointers section shows how pointers move through an array, when they move, why they move, and which types of interview problems commonly rely on the technique.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Data Structures
&lt;/h2&gt;

&lt;p&gt;Alongside problem-solving patterns, I also added short explanations for common data structures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Stacks&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;li&gt;Trees&lt;/li&gt;
&lt;li&gt;Graphs&lt;/li&gt;
&lt;li&gt;Heaps&lt;/li&gt;
&lt;li&gt;Hash Maps&lt;/li&gt;
&lt;/ul&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%2F3p3mbzfdt23scw0jy5jv.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%2F3p3mbzfdt23scw0jy5jv.png" alt="An **Update** operation changing an array element at a specific index in constant time ($O(1)$), alongside a comparison between **Linear Search** ($O(n)$) sequentially scanning an unsorted array and **Binary Search** ($O(\log n)$) efficiently dividing a sorted array using index pointers." width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal isn't to provide a deep theoretical reference.&lt;/p&gt;

&lt;p&gt;It's simply to help answer a few practical questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does this data structure behave?&lt;/li&gt;
&lt;li&gt;When should I use it?&lt;/li&gt;
&lt;li&gt;Why does it appear so often in coding interviews?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, you can visualize how array operations work and compare approaches like linear search and binary search to better understand their trade-offs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;The idea behind Decoded is simple.&lt;/p&gt;

&lt;p&gt;I wanted a resource that focused less on memorizing solutions and more on understanding how solutions are discovered.&lt;/p&gt;

&lt;p&gt;Something that makes algorithms feel a little less intimidating and a little more intuitive.&lt;/p&gt;

&lt;p&gt;It's not meant to replace practice.&lt;/p&gt;

&lt;p&gt;It's meant to make the reasoning behind problems easier to see.&lt;/p&gt;

&lt;p&gt;If you're currently learning DSA and want a more visual, step-by-step approach, you can try it here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.decoded-app.com/" rel="noopener noreferrer"&gt;https://www.decoded-app.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How I Built a Malayalam Learning App as a Tribute to My Mother Tongue</title>
      <dc:creator>Sreya Satheesh</dc:creator>
      <pubDate>Tue, 12 May 2026 08:35:56 +0000</pubDate>
      <link>https://dev.to/sreya-satheesh/aksharam-a-tribute-to-my-mother-tongue-kh5</link>
      <guid>https://dev.to/sreya-satheesh/aksharam-a-tribute-to-my-mother-tongue-kh5</guid>
      <description>&lt;p&gt;I enjoy learning languages.&lt;/p&gt;

&lt;p&gt;Growing up in Kerala, Malayalam was always around me.&lt;/p&gt;

&lt;p&gt;At some point, I started wondering what it would feel like to build something that helps people learn Malayalam.&lt;/p&gt;

&lt;p&gt;That idea eventually became Aksharam — a simple Malayalam learning app designed to help beginners learn the language.&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%2Fv21vmkns902rm0moswz9.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%2Fv21vmkns902rm0moswz9.png" alt="**Aksharam** is an interactive Malayalam language learning platform that guides users from foundational building blocks to full literacy. The web app features structured navigation tabs at the top for learning vowels, consonants, chillu characters, compound letters, signs, words, and sentences, followed by a dedicated practice section. Each category uses interactive, multimedia cards complete with audio pronunciation support, English transliteration, and real-world vocabulary tracking to help learners effortlessly master the language." width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aksharam (അക്ഷരം) means letter in Malayalam.&lt;/p&gt;

&lt;p&gt;The goal of the app is simple: help beginners learn Malayalam step by step, from individual letters to words and sentences.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Aksharam Includes
&lt;/h2&gt;

&lt;p&gt;The app currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;സ്വരാക്ഷരങ്ങൾ (Vowels)&lt;/li&gt;
&lt;li&gt;വ്യഞ്ജനങ്ങൾ (Consonants)&lt;/li&gt;
&lt;li&gt;ചില്ലക്ഷരങ്ങൾ (Chillu Letters)&lt;/li&gt;
&lt;li&gt;കൂട്ടക്ഷരങ്ങൾ (Compound Letters)&lt;/li&gt;
&lt;li&gt;സ്വരചിഹ്നങ്ങൾ (Signs &amp;amp; Combinations)&lt;/li&gt;
&lt;li&gt;വാക്കുകൾ (Words)&lt;/li&gt;
&lt;li&gt;വാക്യങ്ങൾ (Sentences)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each lesson includes audio pronunciation support and English transliteration to make learning easier for beginners.&lt;/p&gt;

&lt;p&gt;The app is designed primarily for people who are new to Malayalam—whether they're language enthusiasts, students, members of the Malayalam diaspora, or simply curious about learning the language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping the Learning Process Simple
&lt;/h2&gt;

&lt;p&gt;While building Aksharam, I wanted the experience to feel simple, clean, and easy to follow.&lt;/p&gt;

&lt;p&gt;Learning a language takes time. It's less about memorizing everything at once and more about becoming familiar with the language through repetition and practice.&lt;/p&gt;

&lt;p&gt;Instead of trying to include too many features, I focused on smaller learning steps and everyday vocabulary that learners are likely to encounter early on.&lt;/p&gt;

&lt;p&gt;The goal was to create something approachable rather than overwhelming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;This project started as a way to explore language learning, but it gradually became something more personal.&lt;/p&gt;

&lt;p&gt;Malayalam is a language I grew up hearing every day.&lt;/p&gt;

&lt;p&gt;Building Aksharam gave me an opportunity to contribute something back to it in a small way.&lt;/p&gt;

&lt;p&gt;It's still a work in progress, and there are plenty of things I'd like to improve.&lt;/p&gt;

&lt;p&gt;But I'm happy to finally share it.&lt;/p&gt;

&lt;p&gt;If you'd like to explore the language or know someone who might benefit from it, you can try Aksharam here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aksharam-app.vercel.app/" rel="noopener noreferrer"&gt;https://aksharam-app.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learningapp</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
