<?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: Soumyajit Mukherjee</title>
    <description>The latest articles on DEV Community by Soumyajit Mukherjee (@sam000).</description>
    <link>https://dev.to/sam000</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%2F1902890%2F7519ab88-e767-49de-8e68-b2d1acf266e2.jpeg</url>
      <title>DEV Community: Soumyajit Mukherjee</title>
      <link>https://dev.to/sam000</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sam000"/>
    <language>en</language>
    <item>
      <title>Let’s Break Down a Full-Stack RAG Pipeline With React, Node.js &amp; MongoDB</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sat, 19 Sep 2026 15:49:48 +0000</pubDate>
      <link>https://dev.to/sam000/lets-break-down-a-full-stack-rag-pipeline-with-react-nodejs-mongodb-4mmp</link>
      <guid>https://dev.to/sam000/lets-break-down-a-full-stack-rag-pipeline-with-react-nodejs-mongodb-4mmp</guid>
      <description>&lt;p&gt;If you've built a normal full-stack application, you probably know this architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React → Express → MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's add an AI-powered RAG pipeline.&lt;/p&gt;

&lt;p&gt;Our architecture becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
  ↓
Express API
  ↓
RAG Service
  ↓
Embedding Model
  ↓
MongoDB Vector Search
  ↓
Relevant Context
  ↓
LLM
  ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's break it down.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are We Building?
&lt;/h2&gt;

&lt;p&gt;Imagine a developer documentation assistant.&lt;/p&gt;

&lt;p&gt;Users upload technical documentation, and later ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How do I refresh an expired JWT?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our application searches the uploaded documentation and gives the relevant information to an LLM before generating the response.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Document Ingestion
&lt;/h2&gt;

&lt;p&gt;First, documents need to enter our system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PDF / Markdown / HTML
        ↓
Text Extraction
        ↓
Cleaning
        ↓
Chunking
        ↓
Embeddings
        ↓
MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why chunk the documents?&lt;/p&gt;

&lt;p&gt;Because retrieving a small relevant section is usually more useful than sending an entire document to the LLM.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;authentication.md

├── Chunk 1
├── Chunk 2
├── Chunk 3
└── Chunk 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Generate Embeddings
&lt;/h2&gt;

&lt;p&gt;Each chunk is converted into a vector.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;embeddingModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Refresh tokens are used..."
             ↓
[0.12, -0.43, 0.77, ...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vector represents the semantic meaning of the text.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Store the Data
&lt;/h2&gt;

&lt;p&gt;A MongoDB document might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth-guide&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Refresh tokens are used...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.77&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth-guide.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MongoDB Atlas Vector Search can then be used to search these embeddings.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. User Sends a Question
&lt;/h2&gt;

&lt;p&gt;React sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/chat
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How do I refresh an expired JWT?"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Express receives the request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/chat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;question&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ragService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Embed the Query
&lt;/h2&gt;

&lt;p&gt;The question is converted into an embedding.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Question
     ↓
Embedding Model
     ↓
Query Vector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the query vector can be compared with the document vectors.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Retrieve Relevant Chunks
&lt;/h2&gt;

&lt;p&gt;Our vector search might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Refresh Token Documentation    0.94
JWT Authentication             0.89
Session Management             0.81
Database Configuration         0.31
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We take the most relevant chunks.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;retrieval&lt;/strong&gt; stage.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Build the Context
&lt;/h2&gt;

&lt;p&gt;Now we combine the retrieved chunks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our application now has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question
+
Relevant Documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Build the Prompt
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a developer documentation assistant.

Use the context below to answer the question.

Context:
[retrieved documents]

Question:
How do I refresh an expired JWT?

If the context doesn't contain the answer,
say that the information is unavailable.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. Call the LLM
&lt;/h2&gt;

&lt;p&gt;The backend sends the prompt to the LLM.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model generates the response.&lt;/p&gt;

&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM
 ↓
Express
 ↓
React
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React displays the answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Complete RAG Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 USER
                   ↓
              React UI
                   ↓
             Express API
                   ↓
             RAG Service
                   ↓
          Query Embedding
                   ↓
          Vector Retrieval
                   ↓
           Relevant Chunks
                   ↓
          Context Construction
                   ↓
          Prompt Construction
                   ↓
                  LLM
                   ↓
             Final Answer
                   ↓
                React
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Ingestion Side
&lt;/h2&gt;

&lt;p&gt;Don't forget that there are actually two important pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ingestion pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document
 ↓
Extract
 ↓
Clean
 ↓
Chunk
 ↓
Embed
 ↓
Store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Query pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question
 ↓
Embed
 ↓
Search
 ↓
Retrieve
 ↓
Build Context
 ↓
LLM
 ↓
Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction makes RAG much easier to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Chunking Is Important
&lt;/h2&gt;

&lt;p&gt;Imagine a 200-page API reference.&lt;/p&gt;

&lt;p&gt;The user asks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How does refresh-token rotation work?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sending the entire document to the LLM is inefficient.&lt;/p&gt;

&lt;p&gt;Instead, retrieval might identify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chunk 47
Chunk 51
Chunk 52
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as the relevant sections.&lt;/p&gt;

&lt;p&gt;That's what makes the "retrieval" part valuable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Production Improvements
&lt;/h2&gt;

&lt;p&gt;A basic RAG demo isn't enough for a production application.&lt;/p&gt;

&lt;p&gt;We could add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Metadata filtering&lt;/li&gt;
&lt;li&gt;Hybrid search&lt;/li&gt;
&lt;li&gt;Reranking&lt;/li&gt;
&lt;li&gt;Query rewriting&lt;/li&gt;
&lt;li&gt;Citations&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Token/cost tracking&lt;/li&gt;
&lt;li&gt;Prompt-injection defenses&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Query
 ↓
Validation
 ↓
Query Rewriting
 ↓
Hybrid Search
 ↓
Metadata Filtering
 ↓
Reranking
 ↓
Context
 ↓
LLM
 ↓
Citations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example MERN Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server/

├── controllers/
│
├── routes/
│
├── models/
│
├── middleware/
│
└── services/
    ├── embeddingService.js
    ├── retrievalService.js
    ├── ragService.js
    └── llmService.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keeping these services separate makes the architecture easier to maintain.&lt;/p&gt;




&lt;h2&gt;
  
  
  RAG Isn't Just "An LLM + Vector DB"
&lt;/h2&gt;

&lt;p&gt;That's probably the most important lesson.&lt;/p&gt;

&lt;p&gt;A useful RAG system depends on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document quality
       +
Chunking
       +
Embeddings
       +
Retrieval
       +
Context selection
       +
Prompt design
       +
LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If retrieval returns irrelevant information, even a powerful LLM can produce a poor response.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Architecture
&lt;/h2&gt;

&lt;p&gt;A simple version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
 ↓
Node.js
 ↓
MongoDB Vector Search
 ↓
Relevant Context
 ↓
Gemini / OpenAI-style LLM
 ↓
React
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A more advanced version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
 ↓
API Gateway
 ↓
Authentication
 ↓
Query Processing
 ↓
Hybrid Retrieval
 ↓
Reranking
 ↓
Context Compression
 ↓
LLM
 ↓
Citation Layer
 ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's where a simple AI demo starts becoming a real full-stack engineering project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;The LLM is only one part of a RAG application.&lt;/p&gt;

&lt;p&gt;The real engineering work happens around it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ingestion → retrieval → context → generation → security → observability → optimization.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's what makes RAG such an interesting architecture for full-stack developers.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>react</category>
      <category>node</category>
    </item>
    <item>
      <title>Monolith vs Microservices: Stop Choosing Microservices Too Early</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sat, 19 Sep 2026 14:27:34 +0000</pubDate>
      <link>https://dev.to/sam000/monolith-vs-microservices-stop-choosing-microservices-too-early-50h7</link>
      <guid>https://dev.to/sam000/monolith-vs-microservices-stop-choosing-microservices-too-early-50h7</guid>
      <description>&lt;p&gt;Microservices are popular.&lt;/p&gt;

&lt;p&gt;That doesn't mean every application needs them.&lt;/p&gt;

&lt;p&gt;A common mistake is starting a project with ten services because "real companies use microservices."&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is a Monolith?
&lt;/h3&gt;

&lt;p&gt;A monolithic application keeps major functionality inside one deployable application.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   ↓
Backend
   ├── Users
   ├── Products
   ├── Orders
   └── Payments
        ↓
    Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can be perfectly reasonable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Are Microservices?
&lt;/h3&gt;

&lt;p&gt;With microservices, functionality is split into independently deployable services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Service
Product Service
Order Service
Payment Service
Notification Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each service can potentially have its own deployment lifecycle and data storage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Microservices Are Attractive
&lt;/h3&gt;

&lt;p&gt;They can provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Independent deployments&lt;/li&gt;
&lt;li&gt;Team ownership boundaries&lt;/li&gt;
&lt;li&gt;Independent scaling&lt;/li&gt;
&lt;li&gt;Technology flexibility&lt;/li&gt;
&lt;li&gt;Fault isolation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But these benefits come with complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hidden Cost
&lt;/h3&gt;

&lt;p&gt;You now have to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service discovery&lt;/li&gt;
&lt;li&gt;Network failures&lt;/li&gt;
&lt;li&gt;Authentication between services&lt;/li&gt;
&lt;li&gt;Distributed tracing&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Data consistency&lt;/li&gt;
&lt;li&gt;Message queues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A function call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;createOrder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP request
→ network
→ authentication
→ service
→ database
→ response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start Simple
&lt;/h3&gt;

&lt;p&gt;A modular monolith can be an excellent middle ground.&lt;/p&gt;

&lt;p&gt;Organize your code into clear modules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;users/
products/
orders/
payments/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the system eventually needs service separation, those boundaries can provide a foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Microservices solve organizational and scaling problems.&lt;/p&gt;

&lt;p&gt;They also create operational problems.&lt;/p&gt;

&lt;p&gt;For many projects, a well-designed monolith is not a failure.&lt;/p&gt;

&lt;p&gt;It's the correct architecture.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>systemdesign</category>
      <category>microservices</category>
    </item>
    <item>
      <title>What Actually Happens When You Type a URL?</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Wed, 09 Sep 2026 17:22:29 +0000</pubDate>
      <link>https://dev.to/sam000/what-actually-happens-when-you-type-a-url-2po</link>
      <guid>https://dev.to/sam000/what-actually-happens-when-you-type-a-url-2po</guid>
      <description>&lt;p&gt;Typing a URL into a browser looks simple.&lt;/p&gt;

&lt;p&gt;Behind the scenes, however, several systems work together before the webpage appears.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1: The Browser Parses the URL
&lt;/h3&gt;

&lt;p&gt;The browser identifies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Protocol&lt;/span&gt;: &lt;span class="n"&gt;HTTPS&lt;/span&gt;
&lt;span class="n"&gt;Domain&lt;/span&gt;: &lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It knows that HTTPS should be used to communicate securely with the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: DNS Lookup
&lt;/h3&gt;

&lt;p&gt;Computers communicate using IP addresses.&lt;/p&gt;

&lt;p&gt;DNS translates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;into an IP address such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;93.184.216.34
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser may use cached DNS information to avoid performing the lookup repeatedly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Establishing a Connection
&lt;/h3&gt;

&lt;p&gt;The browser connects to the server.&lt;/p&gt;

&lt;p&gt;With HTTPS, the connection also involves TLS negotiation.&lt;/p&gt;

&lt;p&gt;This establishes encryption between the browser and server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: HTTP Request
&lt;/h3&gt;

&lt;p&gt;The browser sends something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;GET&lt;/span&gt; &lt;span class="nn"&gt;/&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server processes the request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Server Response
&lt;/h3&gt;

&lt;p&gt;The server might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text/html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;followed by HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Browser Rendering
&lt;/h3&gt;

&lt;p&gt;The browser parses the HTML.&lt;/p&gt;

&lt;p&gt;It then discovers resources such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CSS
JavaScript
Images
Fonts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additional requests may be sent to retrieve them.&lt;/p&gt;

&lt;p&gt;Eventually, the browser constructs the page you see.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Developers Should Understand This
&lt;/h3&gt;

&lt;p&gt;Understanding this sequence helps explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS failures&lt;/li&gt;
&lt;li&gt;SSL errors&lt;/li&gt;
&lt;li&gt;Slow websites&lt;/li&gt;
&lt;li&gt;HTTP status codes&lt;/li&gt;
&lt;li&gt;CDN behavior&lt;/li&gt;
&lt;li&gt;Browser caching&lt;/li&gt;
&lt;li&gt;Network debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;A URL is just the starting point.&lt;/p&gt;

&lt;p&gt;The journey from a URL to a rendered webpage involves DNS, networking, TLS, HTTP, servers, browsers, and rendering engines.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>networking</category>
      <category>browser</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Mandatory Skills Every Tech Professional Should Have on Their Resume</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Mon, 07 Sep 2026 07:50:32 +0000</pubDate>
      <link>https://dev.to/sam000/mandatory-skills-every-tech-professional-should-have-on-their-resume-4hna</link>
      <guid>https://dev.to/sam000/mandatory-skills-every-tech-professional-should-have-on-their-resume-4hna</guid>
      <description>&lt;p&gt;Also, You can check out my blogs here: &lt;a href="https://thelazydevhub.blogspot.com" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With my GitHub projects here: &lt;a href="https://github.com/starJeet000" rel="noopener noreferrer"&gt;starJeet000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having a long list of technologies on your resume doesn't necessarily make you a strong candidate.&lt;/p&gt;

&lt;p&gt;What matters is whether you can use those technologies to build, debug, deploy, and maintain real applications.&lt;/p&gt;

&lt;p&gt;Here are the major skill categories you should consider including.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Programming Languages
&lt;/h3&gt;

&lt;p&gt;You should have at least one language that you know well.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript / TypeScript&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;C#&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't list 10 languages if you can barely write a project in them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depth is better than keyword stuffing.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Frameworks &amp;amp; Libraries
&lt;/h3&gt;

&lt;p&gt;Depending on your career path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your resume becomes stronger when you connect these technologies to actual projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Databases
&lt;/h3&gt;

&lt;p&gt;Understand how applications store and retrieve data.&lt;/p&gt;

&lt;p&gt;Useful skills include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;Indexing&lt;/li&gt;
&lt;li&gt;Basic query optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing a database isn't just knowing how to run &lt;code&gt;SELECT&lt;/code&gt; or insert a document.&lt;/p&gt;

&lt;p&gt;Understand why you chose a particular database.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. APIs &amp;amp; Backend Fundamentals
&lt;/h3&gt;

&lt;p&gt;Modern applications communicate through APIs.&lt;/p&gt;

&lt;p&gt;Useful skills include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;HTTP/HTTPS&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;API integration&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Git &amp;amp; GitHub
&lt;/h3&gt;

&lt;p&gt;Version control is practically mandatory for software development.&lt;/p&gt;

&lt;p&gt;Know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create branches&lt;/li&gt;
&lt;li&gt;Commit changes&lt;/li&gt;
&lt;li&gt;Merge branches&lt;/li&gt;
&lt;li&gt;Resolve conflicts&lt;/li&gt;
&lt;li&gt;Create pull requests&lt;/li&gt;
&lt;li&gt;Review code&lt;/li&gt;
&lt;li&gt;Manage repositories&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Cloud &amp;amp; Deployment
&lt;/h3&gt;

&lt;p&gt;You don't necessarily need to be a cloud architect.&lt;/p&gt;

&lt;p&gt;But understanding basic deployment is extremely valuable.&lt;/p&gt;

&lt;p&gt;Learn the fundamentals of platforms such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;Google Cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also understand environment variables, secrets, domains, HTTPS, and basic server deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Docker &amp;amp; DevOps
&lt;/h3&gt;

&lt;p&gt;Basic DevOps knowledge can make you stand out.&lt;/p&gt;

&lt;p&gt;Consider learning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Linux fundamentals&lt;/li&gt;
&lt;li&gt;Application monitoring&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Testing &amp;amp; Debugging
&lt;/h3&gt;

&lt;p&gt;Writing code is only part of software development.&lt;/p&gt;

&lt;p&gt;You should also know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debug applications&lt;/li&gt;
&lt;li&gt;Read stack traces&lt;/li&gt;
&lt;li&gt;Write basic tests&lt;/li&gt;
&lt;li&gt;Handle errors&lt;/li&gt;
&lt;li&gt;Test APIs&lt;/li&gt;
&lt;li&gt;Identify performance problems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Security Fundamentals
&lt;/h3&gt;

&lt;p&gt;Security shouldn't be an afterthought.&lt;/p&gt;

&lt;p&gt;Understand fundamentals such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Password hashing&lt;/li&gt;
&lt;li&gt;JWT/session security&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;OWASP Top 10&lt;/li&gt;
&lt;li&gt;Secure API design&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. AI &amp;amp; Modern Development Tools
&lt;/h3&gt;

&lt;p&gt;AI-assisted development is becoming increasingly common.&lt;/p&gt;

&lt;p&gt;Depending on your role, useful skills include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LLM APIs&lt;/li&gt;
&lt;li&gt;AI-assisted coding&lt;/li&gt;
&lt;li&gt;Prompt engineering&lt;/li&gt;
&lt;li&gt;AI automation&lt;/li&gt;
&lt;li&gt;RAG fundamentals&lt;/li&gt;
&lt;li&gt;Working with AI APIs&lt;/li&gt;
&lt;li&gt;Evaluating AI-generated output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to claim that you're an AI engineer just because you use an AI coding assistant.&lt;/p&gt;

&lt;p&gt;Be specific about what you actually built.&lt;/p&gt;

&lt;h3&gt;
  
  
  11. Data Structures &amp;amp; Problem Solving
&lt;/h3&gt;

&lt;p&gt;For many software engineering roles, fundamental problem-solving skills remain important.&lt;/p&gt;

&lt;p&gt;Know the basics of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Hash maps&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;Sorting&lt;/li&gt;
&lt;li&gt;Searching&lt;/li&gt;
&lt;li&gt;Time and space complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12. Software Engineering Practices
&lt;/h3&gt;

&lt;p&gt;Don't forget the skills that aren't tied to a specific programming language.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SDLC&lt;/li&gt;
&lt;li&gt;Agile/Scrum&lt;/li&gt;
&lt;li&gt;Code reviews&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Clean code&lt;/li&gt;
&lt;li&gt;Design patterns&lt;/li&gt;
&lt;li&gt;Basic system design&lt;/li&gt;
&lt;li&gt;Team collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Most Important Rule
&lt;/h3&gt;

&lt;p&gt;Don't turn your resume into a technology dictionary.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;React, Node.js, MongoDB, Docker, AWS, Git, REST API&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Show what you actually did:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Built and deployed a full-stack application using React and Node.js, designed MongoDB data models, implemented authenticated REST APIs, containerized the application with Docker, and automated deployment using CI/CD.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's much more convincing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final takeaway
&lt;/h3&gt;

&lt;p&gt;Your resume should answer three questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can you build?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;What problems can you solve?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Can you actually use the technologies you listed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A skill becomes much more valuable when you can demonstrate it through a real project.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>careeradvice</category>
      <category>resumetips</category>
    </item>
    <item>
      <title>🧠 Building a Mental Health Prediction System with Machine Learning, SHAP &amp; Flask</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Wed, 26 Aug 2026 09:17:56 +0000</pubDate>
      <link>https://dev.to/sam000/building-a-mental-health-prediction-system-with-machine-learning-shap-flask-56po</link>
      <guid>https://dev.to/sam000/building-a-mental-health-prediction-system-with-machine-learning-shap-flask-56po</guid>
      <description>&lt;p&gt;I built an end-to-end &lt;strong&gt;Mental Health Prediction &amp;amp; Assessment System&lt;/strong&gt; that combines machine learning, standardized screening, Explainable AI and a web application.&lt;/p&gt;

&lt;p&gt;The objective was to explore what a more complete ML application looks like beyond simply training a model in a Jupyter Notebook.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 What does the application do?
&lt;/h3&gt;

&lt;p&gt;The system combines two major components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Machine-learning-based risk prediction&lt;br&gt;
&lt;strong&gt;2.&lt;/strong&gt; PHQ-9-based clinical symptom screening&lt;/p&gt;

&lt;p&gt;The results are presented through a web interface with additional explainability and support features.&lt;/p&gt;
&lt;h3&gt;
  
  
  🤖 Machine Learning Pipeline
&lt;/h3&gt;

&lt;p&gt;I evaluated multiple classification algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AdaBoost&lt;/li&gt;
&lt;li&gt;Random Forest&lt;/li&gt;
&lt;li&gt;XGBoost&lt;/li&gt;
&lt;li&gt;Logistic Regression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After tuning and evaluation, the &lt;strong&gt;AdaBoost classifier achieved approximately 86.9% accuracy&lt;/strong&gt; and was selected as the final model.&lt;/p&gt;

&lt;p&gt;Model evaluation included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confusion matrices&lt;/li&gt;
&lt;li&gt;ROC-AUC curves&lt;/li&gt;
&lt;li&gt;Precision-Recall metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🩺 PHQ-9 Integration
&lt;/h3&gt;

&lt;p&gt;One of the more interesting parts of the project is the integration of the &lt;strong&gt;Patient Health Questionnaire (PHQ-9)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The questionnaire contains nine questions and generates a score from &lt;strong&gt;0&lt;/strong&gt; to &lt;strong&gt;27&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project uses this standardized screening layer alongside the machine-learning prediction rather than presenting the ML model as a medical diagnosis.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔍 Explainable AI with SHAP
&lt;/h3&gt;

&lt;p&gt;A prediction is much more useful when users can understand why a model reached it.&lt;/p&gt;

&lt;p&gt;That's why I integrated &lt;strong&gt;SHAP (SHapley Additive exPlanations)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application generates visual explanations showing how individual features contributed to a particular prediction.&lt;/p&gt;

&lt;p&gt;This turns:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The model predicted this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"These features contributed to the model's prediction."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's an important distinction when building responsible ML applications.&lt;/p&gt;
&lt;h3&gt;
  
  
  🏗️ Architecture
&lt;/h3&gt;

&lt;p&gt;The application uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Web Interface
  ↓
Flask Application
  ↓
Data Processing
  ↓
ML Model
  ↓
Risk Prediction
  ↓
SHAP Explanation
  ↓
Result Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project also contains serialized ML artifacts such as the trained model, preprocessing transformer and label encoder.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Technology Stack
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Machine Learning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.12&lt;/li&gt;
&lt;li&gt;Scikit-learn&lt;/li&gt;
&lt;li&gt;XGBoost&lt;/li&gt;
&lt;li&gt;Pandas&lt;/li&gt;
&lt;li&gt;NumPy&lt;/li&gt;
&lt;li&gt;SHAP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;li&gt;Gunicorn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML5&lt;/li&gt;
&lt;li&gt;CSS3&lt;/li&gt;
&lt;li&gt;Bootstrap 5&lt;/li&gt;
&lt;li&gt;Jinja2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DevOps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Render&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Beyond Machine Learning
&lt;/h3&gt;

&lt;p&gt;I also implemented additional application functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interactive mental-health assessment&lt;/li&gt;
&lt;li&gt;SHAP visualization&lt;/li&gt;
&lt;li&gt;Counselling booking interface&lt;/li&gt;
&lt;li&gt;Crisis assistance information&lt;/li&gt;
&lt;li&gt;Docker-based deployment&lt;/li&gt;
&lt;li&gt;Automated uptime monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to turn the ML experiment into an actual &lt;strong&gt;end-to-end web application&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 What I Learned
&lt;/h3&gt;

&lt;p&gt;This project reinforced several important lessons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Accuracy isn't everything&lt;/strong&gt;&lt;br&gt;
A model can have good accuracy and still be unsuitable for real-world use without considering context, limitations and safety.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Explainability matters&lt;/strong&gt;&lt;br&gt;
SHAP helped make the model's predictions easier to inspect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Deployment changes everything&lt;/strong&gt;&lt;br&gt;
Moving from a notebook to Flask + Docker + Gunicorn introduced an entirely different set of engineering challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Sensitive domains require extra caution&lt;/strong&gt;&lt;br&gt;
Mental-health applications should never present an ML prediction as a definitive medical diagnosis.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Source Code
&lt;/h3&gt;

&lt;p&gt;The complete project is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/starJeet000/Mental-Health-Prediction-Using-Machine-Learning" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository also includes the Flask application, trained model artifacts, notebook, dataset, Docker configuration and requirements.&lt;/p&gt;

&lt;p&gt;If you're learning &lt;strong&gt;Machine Learning, Flask, Explainable AI or ML deployment&lt;/strong&gt;, I'd love to hear your feedback.&lt;/p&gt;

</description>
      <category>python</category>
      <category>machinelearning</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building Better Error Handling in Node.js</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 10:56:43 +0000</pubDate>
      <link>https://dev.to/sam000/building-better-error-handling-in-nodejs-4ik5</link>
      <guid>https://dev.to/sam000/building-better-error-handling-in-nodejs-4ik5</guid>
      <description>&lt;p&gt;Error handling is one of those topics developers often ignore until production starts failing.&lt;/p&gt;

&lt;p&gt;A good error-handling strategy makes an application easier to debug, monitor, and maintain.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem With Random try/catch Blocks
&lt;/h3&gt;

&lt;p&gt;You might see code like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents an immediate crash, but it doesn't necessarily solve the problem.&lt;/p&gt;

&lt;p&gt;What should happen next?&lt;/p&gt;

&lt;p&gt;Should the API return &lt;code&gt;500&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Should the error be logged?&lt;/p&gt;

&lt;p&gt;Should the request be retried?&lt;/p&gt;

&lt;p&gt;Should the user receive a friendly message?&lt;/p&gt;

&lt;h3&gt;
  
  
  Centralized Error Handling
&lt;/h3&gt;

&lt;p&gt;Express applications can use centralized middleware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Something went wrong&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Application code can then pass errors to the middleware.&lt;/p&gt;

&lt;h3&gt;
  
  
  Separate Operational and Programming Errors
&lt;/h3&gt;

&lt;p&gt;Not every error means the same thing.&lt;/p&gt;

&lt;p&gt;An invalid request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;400 Bad Request
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is very different from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Database connection unexpectedly failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first may be expected.&lt;/p&gt;

&lt;p&gt;The second might require immediate investigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't Leak Sensitive Information
&lt;/h3&gt;

&lt;p&gt;Avoid returning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MongoServerError: password authentication failed..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to users.&lt;/p&gt;

&lt;p&gt;Internal details belong in secure logs.&lt;/p&gt;

&lt;p&gt;Users generally need a useful but safe message.&lt;/p&gt;

&lt;h3&gt;
  
  
  Logging Matters
&lt;/h3&gt;

&lt;p&gt;A production system should record useful context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;timestamp&lt;/li&gt;
&lt;li&gt;request ID&lt;/li&gt;
&lt;li&gt;endpoint&lt;/li&gt;
&lt;li&gt;user/session context where appropriate&lt;/li&gt;
&lt;li&gt;error type&lt;/li&gt;
&lt;li&gt;stack trace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A request ID is particularly useful when tracing one request through multiple services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Good error handling isn't about hiding errors.&lt;/p&gt;

&lt;p&gt;It's about making errors understandable, observable, and safe.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>backend</category>
      <category>programming</category>
    </item>
    <item>
      <title>Understanding Database Indexes Without the Jargon</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 10:47:49 +0000</pubDate>
      <link>https://dev.to/sam000/understanding-database-indexes-without-the-jargon-1lbl</link>
      <guid>https://dev.to/sam000/understanding-database-indexes-without-the-jargon-1lbl</guid>
      <description>&lt;p&gt;Database indexes are one of the simplest ways to improve query performance.&lt;/p&gt;

&lt;p&gt;They can also become one of the easiest ways to waste resources if used incorrectly.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is an Index?
&lt;/h3&gt;

&lt;p&gt;Imagine a 500-page book.&lt;/p&gt;

&lt;p&gt;If you want to find every mention of "MongoDB", you could read every page.&lt;/p&gt;

&lt;p&gt;Or you could use the index at the back of the book.&lt;/p&gt;

&lt;p&gt;A database index works similarly.&lt;/p&gt;

&lt;p&gt;Instead of scanning every record, the database can use an optimized data structure to locate matching records faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Suppose you frequently search users by email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alex@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creating an index on &lt;code&gt;email&lt;/code&gt; can make this query much more efficient:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createIndex&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why Not Index Everything?
&lt;/h3&gt;

&lt;p&gt;Indexes have costs.&lt;/p&gt;

&lt;p&gt;When data changes, indexes may also need to be updated.&lt;/p&gt;

&lt;p&gt;That means more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Write overhead&lt;/li&gt;
&lt;li&gt;Maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore, indexes should be created around actual query patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compound Indexes
&lt;/h3&gt;

&lt;p&gt;Sometimes queries use multiple fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;completed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A compound index could help:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createIndex&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The correct index depends on how the application queries the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measure Before Optimizing
&lt;/h3&gt;

&lt;p&gt;Don't blindly create indexes.&lt;/p&gt;

&lt;p&gt;First identify slow queries using database profiling and query execution plans.&lt;/p&gt;

&lt;p&gt;Optimization should be based on evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Indexes are not magic performance switches.&lt;/p&gt;

&lt;p&gt;They are tools that trade additional storage and write overhead for faster reads.&lt;/p&gt;

&lt;p&gt;Understanding that trade-off is an important database skill.&lt;/p&gt;

</description>
      <category>database</category>
      <category>mongodb</category>
      <category>sql</category>
      <category>performance</category>
    </item>
    <item>
      <title>Redis Explained: Why Developers Keep Putting It in Their Stack</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 10:36:47 +0000</pubDate>
      <link>https://dev.to/sam000/redis-explained-why-developers-keep-putting-it-in-their-stack-4plg</link>
      <guid>https://dev.to/sam000/redis-explained-why-developers-keep-putting-it-in-their-stack-4plg</guid>
      <description>&lt;p&gt;Redis is often described as an in-memory database, but its usefulness goes far beyond simply storing key-value pairs.&lt;/p&gt;

&lt;p&gt;It is commonly used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;li&gt;Pub/Sub&lt;/li&gt;
&lt;li&gt;Temporary data&lt;/li&gt;
&lt;li&gt;Distributed locks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Is Redis Fast?
&lt;/h3&gt;

&lt;p&gt;Traditional databases usually need to access persistent storage.&lt;/p&gt;

&lt;p&gt;Redis primarily operates in memory.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user:123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user:123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the data is stored in memory, operations can be extremely fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  Redis as a Cache
&lt;/h3&gt;

&lt;p&gt;Suppose your application repeatedly requests a product:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /products/123
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without caching:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → Database → Application → User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With caching:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → Redis
                ↓
              Cache Hit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The database doesn't need to process every request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cache Expiration
&lt;/h3&gt;

&lt;p&gt;Cached data should often expire.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;product:123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;EX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This stores the value for five minutes.&lt;/p&gt;

&lt;p&gt;Expiration prevents stale data from remaining indefinitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Redis for Rate Limiting
&lt;/h3&gt;

&lt;p&gt;Imagine an API allowing 100 requests per minute.&lt;/p&gt;

&lt;p&gt;Redis can track request counts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;rate&lt;/span&gt;-&lt;span class="n"&gt;limit&lt;/span&gt;:&lt;span class="n"&gt;user123&lt;/span&gt; = &lt;span class="m"&gt;87&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the count exceeds the limit, the application can reject additional requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't Put Everything in Redis
&lt;/h3&gt;

&lt;p&gt;Redis shouldn't automatically replace your primary database.&lt;/p&gt;

&lt;p&gt;A relational or document database is usually responsible for durable application data.&lt;/p&gt;

&lt;p&gt;Redis is often better suited for fast, temporary, or coordination-related data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Redis is valuable because it solves several performance and distributed-system problems with a relatively simple interface.&lt;/p&gt;

&lt;p&gt;Learning Redis is especially useful for backend developers working on production systems.&lt;/p&gt;

</description>
      <category>redis</category>
      <category>backend</category>
      <category>database</category>
      <category>performance</category>
    </item>
    <item>
      <title>Why API Versioning Matters More Than You Think</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:55:09 +0000</pubDate>
      <link>https://dev.to/sam000/why-api-versioning-matters-more-than-you-think-2gb0</link>
      <guid>https://dev.to/sam000/why-api-versioning-matters-more-than-you-think-2gb0</guid>
      <description>&lt;p&gt;APIs eventually change.&lt;/p&gt;

&lt;p&gt;A field gets renamed. A response structure changes. Authentication is redesigned. A new feature requires breaking an existing contract.&lt;/p&gt;

&lt;p&gt;The problem isn't changing the API.&lt;/p&gt;

&lt;p&gt;The problem is changing it without breaking existing clients.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem With Unversioned APIs
&lt;/h3&gt;

&lt;p&gt;Imagine your API initially returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john@example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later, you decide to return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fullName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"emailAddress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john@example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your frontend might immediately break.&lt;/p&gt;

&lt;p&gt;If multiple mobile applications, third-party integrations, and websites consume the API, the problem becomes much larger.&lt;/p&gt;

&lt;h3&gt;
  
  
  URL Versioning
&lt;/h3&gt;

&lt;p&gt;One simple approach is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/v1/users
/api/v2/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The original clients continue using &lt;code&gt;v1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;New applications can use &lt;code&gt;v2&lt;/code&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/v1/users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getUsersV1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/v2/users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getUsersV2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Header-Based Versioning
&lt;/h3&gt;

&lt;p&gt;Another approach is to specify the version through headers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Accept: application/vnd.example.v2+json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps URLs cleaner but requires more careful client configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  When Should You Create a New Version?
&lt;/h3&gt;

&lt;p&gt;Not every change requires a new API version.&lt;/p&gt;

&lt;p&gt;Adding a new optional field usually doesn't require one.&lt;/p&gt;

&lt;p&gt;Changing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alex"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alex"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;probably does.&lt;/p&gt;

&lt;p&gt;Breaking changes generally deserve a new version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Versioning Is Also Communication
&lt;/h3&gt;

&lt;p&gt;API versions communicate expectations.&lt;/p&gt;

&lt;p&gt;When developers see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/v1/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;they immediately know that changing the contract could affect existing consumers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;API versioning is an investment in stability.&lt;/p&gt;

&lt;p&gt;You may not need it when building your first small application, but understanding it early will make you a better backend developer.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>backend</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Understanding Event-Driven Architecture in Modern Applications</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:17:04 +0000</pubDate>
      <link>https://dev.to/sam000/understanding-event-driven-architecture-in-modern-applications-28ee</link>
      <guid>https://dev.to/sam000/understanding-event-driven-architecture-in-modern-applications-28ee</guid>
      <description>&lt;p&gt;Event-driven architecture is one of the most useful patterns for building applications that need to react to events instead of executing everything in a strict request-response sequence.&lt;/p&gt;

&lt;p&gt;Instead of thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User does something → Server performs everything → Response&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;we can think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User does something → Event is created → Interested services react to it&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What Is an Event?
&lt;/h3&gt;

&lt;p&gt;An event represents something that happened.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USER_REGISTERED&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12345&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other parts of the application can listen for this event and perform their own tasks.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Email service sends a welcome email.&lt;/li&gt;
&lt;li&gt;Analytics service records the registration.&lt;/li&gt;
&lt;li&gt;Notification service creates a notification.&lt;/li&gt;
&lt;li&gt;Recommendation service creates initial recommendations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The registration service doesn't necessarily need to know how all of these tasks work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Use Event-Driven Architecture?
&lt;/h3&gt;

&lt;p&gt;The biggest advantage is decoupling.&lt;/p&gt;

&lt;p&gt;A traditional implementation might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;updateAnalytics&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createNotification&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the email service becomes slow, the entire operation can become slow.&lt;/p&gt;

&lt;p&gt;With events:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


&lt;span class="nf"&gt;publishEvent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USER_REGISTERED&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other services can process the event independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Is It Useful?
&lt;/h3&gt;

&lt;p&gt;Event-driven systems are particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment processing&lt;/li&gt;
&lt;li&gt;E-commerce&lt;/li&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;Analytics&lt;/li&gt;
&lt;li&gt;Microservices&lt;/li&gt;
&lt;li&gt;IoT systems&lt;/li&gt;
&lt;li&gt;Background processing&lt;/li&gt;
&lt;li&gt;Real-time applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Trade-Off
&lt;/h3&gt;

&lt;p&gt;Event-driven architecture isn't automatically better.&lt;/p&gt;

&lt;p&gt;It introduces additional complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event delivery failures&lt;/li&gt;
&lt;li&gt;Duplicate events&lt;/li&gt;
&lt;li&gt;Ordering problems&lt;/li&gt;
&lt;li&gt;Debugging difficulties&lt;/li&gt;
&lt;li&gt;Event schema management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a small CRUD application, a simple architecture may be much easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Event-driven architecture is less about using a specific technology and more about changing how application components communicate.&lt;/p&gt;

&lt;p&gt;Once your application grows beyond a simple monolith, understanding events, queues, consumers, producers, and asynchronous processing becomes extremely valuable.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Swagger Isn't Just API Documentation</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sun, 09 Aug 2026 09:54:10 +0000</pubDate>
      <link>https://dev.to/sam000/swagger-isnt-just-api-documentation-1dn7</link>
      <guid>https://dev.to/sam000/swagger-isnt-just-api-documentation-1dn7</guid>
      <description>&lt;p&gt;If you've worked with REST APIs, you've probably encountered Swagger.&lt;/p&gt;

&lt;p&gt;Many developers initially think:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swagger = API documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's not completely wrong, but it's incomplete.&lt;/p&gt;

&lt;p&gt;Swagger is an ecosystem of tools built around the &lt;strong&gt;OpenAPI Specification (OAS)&lt;/strong&gt; that can help with API design, documentation, testing, validation, code generation, and collaboration.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenAPI vs Swagger
&lt;/h2&gt;

&lt;p&gt;Before looking at the tools, understand this distinction:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAPI&lt;/strong&gt; is the specification used to describe an API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swagger&lt;/strong&gt; is a collection of tools that work with OpenAPI definitions.&lt;/p&gt;

&lt;p&gt;An OpenAPI document can describe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API endpoints&lt;/li&gt;
&lt;li&gt;HTTP methods&lt;/li&gt;
&lt;li&gt;Parameters&lt;/li&gt;
&lt;li&gt;Request bodies&lt;/li&gt;
&lt;li&gt;Responses&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Data schemas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have that definition, different tools can consume it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Swagger Toolkit
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Swagger UI
&lt;/h3&gt;

&lt;p&gt;Swagger UI turns an OpenAPI definition into interactive documentation.&lt;/p&gt;

&lt;p&gt;Instead of giving developers a YAML file, you can give them a browser-based interface where they can explore endpoints and, depending on configuration, execute requests.&lt;/p&gt;

&lt;p&gt;Great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API documentation&lt;/li&gt;
&lt;li&gt;Development testing&lt;/li&gt;
&lt;li&gt;Developer onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Swagger Editor
&lt;/h3&gt;

&lt;p&gt;Swagger Editor allows developers to create and edit OpenAPI definitions.&lt;/p&gt;

&lt;p&gt;It's particularly useful for API-first development because you can design the contract before implementing the API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swagger Codegen
&lt;/h3&gt;

&lt;p&gt;Code generation can eliminate repetitive work.&lt;/p&gt;

&lt;p&gt;Swagger Codegen can generate client libraries and server-side boilerplate from an OpenAPI definition for supported languages and frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  SwaggerHub
&lt;/h3&gt;

&lt;p&gt;SwaggerHub provides a collaborative environment for API design and management.&lt;/p&gt;

&lt;p&gt;It becomes especially useful when multiple developers or teams need to work with shared API definitions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swagger Validator
&lt;/h3&gt;

&lt;p&gt;Validation helps catch problems in OpenAPI definitions.&lt;/p&gt;

&lt;p&gt;This is useful for maintaining API quality and integrating API specification checks into development workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swagger Inspector
&lt;/h3&gt;

&lt;p&gt;Inspector helps developers explore and test APIs and can assist with creating OpenAPI definitions from existing API traffic.&lt;/p&gt;

&lt;p&gt;It's useful when working with APIs that were built without proper documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Example
&lt;/h2&gt;

&lt;p&gt;Imagine you're building an e-commerce backend.&lt;/p&gt;

&lt;p&gt;You have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET    /products
POST   /products
GET    /products/{id}
PUT    /products/{id}
DELETE /products/{id}
POST   /orders
GET    /orders/{id}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of maintaining a separate document describing every endpoint, you create an OpenAPI definition.&lt;/p&gt;

&lt;p&gt;That definition can then become:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt; → Swagger UI&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design environment&lt;/strong&gt; → Swagger Editor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generated code&lt;/strong&gt; → Swagger Codegen&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team collaboration&lt;/strong&gt; → SwaggerHub&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specification validation&lt;/strong&gt; → Validator&lt;/p&gt;

&lt;p&gt;This is why OpenAPI becomes much more powerful than simply writing API documentation manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Is Swagger Useful?
&lt;/h2&gt;

&lt;p&gt;Swagger/OpenAPI is commonly useful for:&lt;/p&gt;

&lt;p&gt;✅ REST API documentation&lt;br&gt;
✅ API-first development&lt;br&gt;
✅ API testing&lt;br&gt;
✅ Client SDK generation&lt;br&gt;
✅ Server boilerplate generation&lt;br&gt;
✅ Frontend/backend collaboration&lt;br&gt;
✅ API contract management&lt;br&gt;
✅ Developer onboarding&lt;br&gt;
✅ Automated validation&lt;br&gt;
✅ Large API ecosystems&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;A good API development workflow might look like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Define OpenAPI contract&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review contract&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implement API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test endpoints&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validate specification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This creates a shared contract between the people building and consuming the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;If you're learning backend development, don't stop at:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I know how to create REST endpoints."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Learn how to &lt;strong&gt;design, document, test, and communicate those endpoints professionally.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenAPI + Swagger is a great toolset for doing exactly that.&lt;/p&gt;

</description>
      <category>swagger</category>
      <category>openapi</category>
      <category>api</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
