<?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>Forem: Ankit Kumar</title>
    <description>The latest articles on Forem by Ankit Kumar (@ankit_kumar_cfb7221a73fcb).</description>
    <link>https://forem.com/ankit_kumar_cfb7221a73fcb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3135158%2Fe7333031-1653-4154-a85a-0cc9167cab93.jpg</url>
      <title>Forem: Ankit Kumar</title>
      <link>https://forem.com/ankit_kumar_cfb7221a73fcb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ankit_kumar_cfb7221a73fcb"/>
    <language>en</language>
    <item>
      <title>Why is GraphQL gaining adoption?</title>
      <dc:creator>Ankit Kumar</dc:creator>
      <pubDate>Fri, 26 Sep 2025 10:49:37 +0000</pubDate>
      <link>https://forem.com/ankit_kumar_cfb7221a73fcb/why-is-graphql-gaining-adoption-1imc</link>
      <guid>https://forem.com/ankit_kumar_cfb7221a73fcb/why-is-graphql-gaining-adoption-1imc</guid>
      <description>&lt;p&gt;If you've architected a modern application in the last few years, you've likely hit this wall: your elegantly designed REST API starts creaking under the weight of real-world requirements. The mobile team needs lighter payloads. The web team wants richer data in fewer round-trips. The new dashboard demands information on six services. Suddenly, your clean REST architecture, which used to be the de facto standard in the development of web API, turns into a Jenga game where every new requirement is going to bring the entire structure down.    &lt;/p&gt;

&lt;p&gt;This isn't a failure of REST-it's an evolution of requirements that REST wasn't designed to handle. At the time Roy Fielding proposed REST in 2000, our applications were less complicated, our clients were web browsers, and our biggest worry was the ability to make stateless, cacheable requests over unreliable networks. This is not the reality these days: many types of clients have different data requirements, microservices architectures with information that is distributed across the services, and users who want their information to respond in milliseconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The High Cost of Over-fetching and Under-fetching
&lt;/h2&gt;

&lt;p&gt;A fundamental inefficiency in REST APIs is the problem of "over-fetching" and "under-fetching". Over-fetching occurs when a client receives more data than it actually needs from a REST endpoint. REST APIs are often designed to be generic, returning a fixed, comprehensive data structure for a given resource. This results in larger payloads, which increases network latency and wastes bandwidth, a critical issue for mobile applications.   &lt;/p&gt;

&lt;p&gt;Conversely, under-fetching describes a scenario where a single API request does not provide all the data required for a client-side view. For example, fetching a user's details may not include their posts, requiring a separate request for that related information. This architectural tension is a core reason why REST becomes unsustainable at scale: the rigid, server-defined contract of a REST API struggles to reconcile the desire for reusable APIs with the diverse and rapidly changing data needs of modern clients.   &lt;/p&gt;

&lt;h2&gt;
  
  
  The Performance Killer: The Request Waterfall ⚡
&lt;/h2&gt;

&lt;p&gt;The problem of under-fetching directly causes a specific and crippling performance issue known as the "request waterfall". This is a cascading effect where a front-end application must make a series of sequential API calls, where each request depends on the data from the previous one. For example, a parent component might fetch a user ID, a child component then uses that ID to fetch a list of posts, and a grandchild component then fetches details for each individual post.   &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%2Fe5wlwm472sjd3tp6kpoc.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%2Fe5wlwm472sjd3tp6kpoc.png" alt="Workflow" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This chain of blocking calls creates a waterfall pattern, significantly delaying the time it takes for a page to render and leading to a sluggish user experience. This issue is particularly painful for developers using component-based frameworks like React. GraphQL's single-query approach, which can fetch deeply nested and interconnected data in a single network round trip, fundamentally decouples the UI's data requirements from the underlying sequential API calls, thereby eliminating the waterfall effect by design.   &lt;/p&gt;

&lt;h2&gt;
  
  
  Existing Solutions and Their Tradeoffs
&lt;/h2&gt;

&lt;p&gt;Before GraphQL entered the picture, engineering teams developed several patterns to address REST's limitations, each with its own significant tradeoffs :   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Expansion Pattern&lt;/strong&gt;: APIs offered query parameters to customize responses, like &lt;code&gt;/api/usersfields=name,email&amp;amp;include=posts,comments&lt;/code&gt;. This can become unwieldy, adding conditional logic that makes the codebase fragile.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The BFF (Backend for Frontend) Pattern&lt;/strong&gt;: Teams began building specialized backends for each client type. While this provides optimal experiences, it multiplies infrastructure costs and splits engineering efforts. Netflix pioneered this approach out of necessity, but most organizations lack its resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GraphQL-like REST Endpoints&lt;/strong&gt;: Some teams created endpoints that accept JSON query specifications, effectively reinventing GraphQL without any of its tooling or ecosystem benefits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Versioning&lt;/strong&gt;: The classic solution: when requirements change significantly, create &lt;code&gt;/api/v2/&lt;/code&gt;. This postpones the problem rather than solving it, and maintaining multiple API versions becomes its own special hell, breaking existing client applications.   &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each solution involves significant tradeoffs between performance, maintainability, and development velocity. Teams found themselves choosing between bad options, which explains why GraphQL's emergence felt like a revelation.&lt;/p&gt;

&lt;h2&gt;
  
  
  GraphQL: A Shift in API Design
&lt;/h2&gt;

&lt;p&gt;GraphQL is an effective query language created and released as open-source in 2012 and 2015 by Facebook, respectively, and puts the client in control of the server. The main concept can be compared to a serve yourself metaphor: rather than being served a pre-cooked meal (a REST response), the client is allowed to prepare his or her plate, and ask only the data it requires, nothing more. This design allows having only one API endpoint that makes it easier to handle APIs and requires significantly fewer network requests to retrieve complex data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Core Innovation: A Strongly-Typed Schema&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At its heart, GraphQL is a query language with a strong, predictable type system. The Schema serves as the single source of truth and a formal contract between the client and server.   &lt;/p&gt;

&lt;p&gt;Here is an example of what a GraphQL schema looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type User {
  id: ID!
  name: String!
  email: String!
  posts(limit: Int, since: DateTime): [Post!]!
  friends: [User!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  comments(first: Int): CommentConnection!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This schema defines the types of data you can query and the relationships between them. Based on this schema, a frontend developer can write a single query to get precisely the data needed for a dashboard view, eliminating over-fetching and under-fetching in a single request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query DashboardData($userId: ID!) {
  user(id: $userId) {
    name
    posts(limit: 5, since: "2024-01-01") {
      title
      comments(first: 3) {
        edges {
          node {
            content
            author { name }
          }
        }
      }
    }
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single query accomplishes what might take several round-trips in a RESTful architecture, resulting in more efficient data fetching. The server might respond with a JSON object that has the same shape as the query, ensuring you always get back what you expect.   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Resolver Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GraphQL's real power lies in its resolver pattern. A resolver is a function that populates the data for a field in the schema. This allows your GraphQL layer to become an orchestration layer over your entire data infrastructure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const resolvers = {
  Query: {
    user: async (parent, args, context, info) =&amp;gt; {
      // This resolver might fetch data from a user microservice
      return await context.dataSources.usersAPI.getUser(args.id);
    }
  },
  User: {
    posts: async (user, { limit, since }, context) =&amp;gt; {
      // This resolver might hit a different Posts microservice
      return await context.dataSources.postsAPI.getPostsByUser(
        user.id, 
        { limit, since }
      );
    },
    friends: async (user, args, context) =&amp;gt; {
      // And this resolver could query a third source, like a Redis cache
      const friendIds = await context.cache.get(`friends:${user.id}`);
      return await context.dataSources.usersAPI.getUsers(friendIds);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architecture enables a single GraphQL API to fetch data from any number of disparate sources, including different databases, other REST APIs, SOAP services, or even gRPC backends. The client neither knows nor cares where the data comes from.   &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Federation: Enterprise Scale Solution&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For large organizations, GraphQL's most compelling feature is its ability to create a "supergraph" or "federated graph". This model unifies an organization's various APIs, including legacy REST and internal microservices, into a single, cohesive, and evolving graph. Instead of one team owning the entire graph, different teams can own and operate different subgraphs, enabling a true microservices architecture at the API layer. The supergraph provides a unified API to the client, hiding the complexity of the underlying, distributed architecture and simplifying development.   &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%2Feli217sf62dbvotylhhi.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%2Feli217sf62dbvotylhhi.png" alt="Architecture" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Advantages and Tradeoffs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;GraphQL's adoption is not without its tradeoffs. An expert-level understanding of the technology requires a balanced analysis of its benefits and limitations, recognizing that it is not a silver bullet.   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Benefits: Performance, Agility, and Evolvability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Development Velocity&lt;/strong&gt;: The most immediate benefit is speed. Frontend teams can iterate without backend changes. Need an additional field? Add it to your query. This decoupling fundamentally changes the development dynamic, and companies like Airbnb have reported a "10 times greater agility at scale".   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhanced Performance and Efficiency&lt;/strong&gt;: By allowing clients to request precisely the data they need, GraphQL reduces payload sizes and minimizes network overhead, which leads to faster response times, especially for mobile applications or in limited bandwidth scenarios.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplified API Evolution&lt;/strong&gt;: Because the schema can evolve without breaking existing clients, developers can add new fields and types without the need for complex and costly versioning strategies common in REST.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type Safety and Tooling&lt;/strong&gt;: The strongly-typed schema ensures data consistency and reliability between the client and server. The introspection feature fuels a rich ecosystem of development tools like GraphiQL, which provides an interactive, in-browser API playground.   &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Limitations 🚨&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Caching Complexity&lt;/strong&gt;: Because GraphQL queries are dynamic and often sent as POST requests, they do not leverage traditional HTTP caching mechanisms by default. This forces developers to build or buy custom caching solutions, which can be expensive and lack features like granular observability or automated cache purging.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security Concerns&lt;/strong&gt;: GraphQL APIs are susceptible to new vulnerabilities. A single, deeply nested, or complex query can be computationally expensive and may overload the server. This can lead to a denial-of-service (DoS) attack if query depth limits, rate limiting, and cost analysis are not implemented. Additionally, sensitive information can be exposed if the introspection feature is not disabled in production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learning Curve and Complexity&lt;/strong&gt;: GraphQL introduces new complexity compared to conventional RESTful APIs. Creating a schema, defining types, and answering queries require an investment in team education. For developers new to schema-driven APIs, this can be a difficult learning curve.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoring and Debugging&lt;/strong&gt;: Traditional APM (Application Performance Monitoring) tools don't understand GraphQL. Since a single endpoint handles all requests, you lose URL-based monitoring. You need GraphQL-aware observability tools to understand performance and errors at the field level.   &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;GraphQL vs. REST vs. gRPC&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;GraphQL is not the only alternative to REST. gRPC, a high-performance framework developed by Google, also offers a modern approach. A comparative analysis reveals that each technology has a distinct ideal use case.&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%2Fqo06g4v0jhw1rcudkq6y.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%2Fqo06g4v0jhw1rcudkq6y.png" alt="Differences" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  &lt;strong&gt;The Enterprise Adoption Imperative&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The value of GraphQL is best demonstrated in large-scale, real-world scenarios. Its adoption is not merely a choice of technology but a strategic imperative for organizations facing the complexities of modern, distributed architectures.   &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Case Studies in Large-Scale Adoption 🏢&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Leading enterprises across various industries have adopted GraphQL to solve their most pressing technical challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; transitioned to GraphQL to allow clients to request only the specific data they needed, thereby reducing the cost of multiple round-trips and simplifying a previously convoluted REST API that required constant client-server communication.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Airbnb&lt;/strong&gt; embarked on a staged migration from REST to GraphQL, leveraging a close partnership with Apollo's tooling. This move allowed them to achieve a "10 times greater agility at scale" and improve caching and content generation for a faster user experience.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Netflix&lt;/strong&gt; implemented a GraphQL microservices architecture that has resulted in impressive productivity gains, with development teams deploying over 100 times daily.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State Farm&lt;/strong&gt; chose federated GraphQL to unify numerous existing services, including legacy REST and SOAP APIs, under a single supergraph. This approach solved major challenges related to schema management and inconsistent naming conventions across their many teams.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PGA TOUR and Sky Italia&lt;/strong&gt; both used GraphQL to modernize their stacks, reducing deployment time from weeks to minutes and decreasing data propagation time by a factor of 15, from minutes to milliseconds respectively.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters Now 📅
&lt;/h2&gt;

&lt;p&gt;GraphQL's rise is not an isolated trend but a direct response to, and an enabler of, other major industry shifts, such as the growth of complex, data-driven frontend applications and the widespread adoption of microservices architectures. Its ability to provide an intelligent, unified data layer is a direct answer to the challenges posed by these trends.&lt;/p&gt;

&lt;p&gt;Looking ahead, GraphQL is poised to play an interesting role in the emerging world of AI. Its well-defined data relationships and strongly typed schema can act as a map to the AI agents and enable them to learn and communicate with APIs in a more efficient manner. This is a potential that can be useful because AI becomes a deeper component of the software ecosystem.  &lt;/p&gt;

&lt;p&gt;The pragmatic approach is that GraphQL is not going to be a silver bullet that supersedes all other API technologies. It is probable that the most viable and efficient enterprise solutions will be a &lt;strong&gt;hybrid architecture&lt;/strong&gt; with GraphQL co-existing with REST, gRPC, and others, with each deployed to its best application. GraphQL is a proven solution for organizations with complex data needs, with multiple types of clients, or a microservices architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;GraphQL's adoption isn't about REST being "bad"; it is just that the requirements have changed since the creation of REST. GraphQL offers teams the flexibility and efficiency they require in a world of diverse clients, distributed data, and rapid iteration. It is not a matter of adopting GraphQL, but where and how. The most successful adoptions I have observed take a more pragmatic approach, which involves GraphQL adding a layer of aggregation to an existing set of APIs in the area where it can be of greatest value, like complex queries or mobile apps.&lt;/p&gt;

&lt;p&gt;The architectural evolution from REST to GraphQL mirrors our industry's broader evolution: from monoliths to microservices, server-rendered to client-rich applications, and single platform to omnichannel experiences. GraphQL is becoming popular due to the fact that it is the appropriate abstraction to our current state and our future.&lt;/p&gt;

&lt;p&gt;We will continue this story in the next upcoming blog. Stay tuned!&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>webdev</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>What the Heck is Model Context Protocol?</title>
      <dc:creator>Ankit Kumar</dc:creator>
      <pubDate>Tue, 10 Jun 2025 14:23:23 +0000</pubDate>
      <link>https://forem.com/ankit_kumar_cfb7221a73fcb/what-the-heck-is-model-context-protocol-a9k</link>
      <guid>https://forem.com/ankit_kumar_cfb7221a73fcb/what-the-heck-is-model-context-protocol-a9k</guid>
      <description>&lt;p&gt;So I was vibe-coding my way through an LLM app when I hit a wall. You know the kind — you prompt something like “&lt;em&gt;Build a Next.js app that fetches data from Supabase” and the model just…&lt;/em&gt; forgets everything 2 prompts later. 😩&lt;/p&gt;

&lt;p&gt;Enter: &lt;strong&gt;Model Context Protocol&lt;/strong&gt; — or &lt;strong&gt;MCP&lt;/strong&gt; for short.&lt;/p&gt;

&lt;p&gt;I stumbled on this &lt;a href="https://github.com/modelcontextprotocol/servers" rel="noopener noreferrer"&gt;repo&lt;/a&gt; while doom-scrolling GitHub, and honestly? It blew my mind. MCP is like giving your AI &lt;em&gt;working memory&lt;/em&gt;. And not just "remember this name" memory — actual scoped, structured memory for apps, projects, and developer workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  So... What Is Model Context Protocol?
&lt;/h2&gt;

&lt;p&gt;At a high level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model Context Protocol is an open standard for managing memory, tools, and documents in AI systems. Think of it as a context API, but for LLM agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building anything with large language models (ChatGPT, Claude, Gemini), you’ve probably hit the limits of prompt engineering. You want your model to “know” about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your file structure&lt;/li&gt;
&lt;li&gt;open tabs&lt;/li&gt;
&lt;li&gt;your docs&lt;/li&gt;
&lt;li&gt;a running task list&lt;/li&gt;
&lt;li&gt;API credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP says: “Cool, let’s formalize that.😂”&lt;br&gt;
It introduces ideas like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workspaces (like projects)&lt;/li&gt;
&lt;li&gt;Documents (files, notes, tasks)&lt;/li&gt;
&lt;li&gt;Tools (executables, like dev servers or linters)&lt;/li&gt;
&lt;li&gt;Models(your LLMs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it lets you wire them together like LEGO.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does This Matter?
&lt;/h2&gt;

&lt;p&gt;Because the future of dev tools is LLM-native.&lt;br&gt;
Right now, we’re hacking autocomplete and chat into VS Code. But what we really want is an AI partner that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understands project structure&lt;/li&gt;
&lt;li&gt;knows what's in scope&lt;/li&gt;
&lt;li&gt;remembers what you asked earlier&lt;/li&gt;
&lt;li&gt;can run real tools and reflect on the output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP gives us the plumbing for that.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does It Work?
&lt;/h2&gt;

&lt;p&gt;The servers &lt;a href="https://github.com/modelcontextprotocol/servers" rel="noopener noreferrer"&gt;repo &lt;/a&gt;gives you reference implementations of an MCP server — it handles state management for your AI agent.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a Workspace via API&lt;/li&gt;
&lt;li&gt;Add files, tools, notes&lt;/li&gt;
&lt;li&gt;Start a session with your favorite LLM (OpenAI, Anthropic, etc.)&lt;/li&gt;
&lt;li&gt;Send prompts that pull from structured context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of sending giant prompts every time, you give your model a memory, a brain, and some hands.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Cool for Beginners?
&lt;/h2&gt;

&lt;p&gt;I’m still wrapping my head around agentic coding, but MCP is beginner-friendly if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're building an LLM app and sick of prompt bloat&lt;/li&gt;
&lt;li&gt;You want structured memory without wiring up Redis, LangGraph, etc.&lt;/li&gt;
&lt;li&gt;You like open standards (this is all public + MIT licensed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s how you could start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone &lt;a href="https://github.com/modelcontextprotocol/servers" rel="noopener noreferrer"&gt;modelcontextprotocol/servers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Run the server locally with Docker&lt;/li&gt;
&lt;li&gt;Hit the API with curl or Postman to create your first Workspace&lt;/li&gt;
&lt;li&gt;Hook it up to an LLM (OpenAI key, Anthropic, etc.)&lt;/li&gt;
&lt;li&gt;Start querying with scoped memory!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bonus: You can use &lt;a href="https://github.com/modelcontextprotocol" rel="noopener noreferrer"&gt;MCP client libraries&lt;/a&gt; in Python, TypeScript, and Rust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I’m Hyped?
&lt;/h2&gt;

&lt;p&gt;This feels like the Rails moment for agentic systems. Not just "cool demos", but a standardized way to build dev tools that remember.&lt;/p&gt;

&lt;p&gt;It’s not just about one repo. It's about the idea that your LLM shouldn't start from scratch every prompt.&lt;/p&gt;

&lt;p&gt;And that’s the vibe. 💡&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://github.com/modelcontextprotocol/" rel="noopener noreferrer"&gt;Model Context Protocol GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;a href="https://modelcontextprotocol.io/specification/2025-03-26" rel="noopener noreferrer"&gt;MCP Spec&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚙️ &lt;a href="https://github.com/modelcontextprotocol/servers" rel="noopener noreferrer"&gt;Servers Repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧠 Want to build an LLM IDE? Start &lt;a href="https://www.datacamp.com/tutorial/how-to-build-llm-applications-with-langchain" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re building with LLMs in 2025, Model Context Protocol is your new best friend. It gives your model memory, tools, structure — and a better chance at shipping real software, not just vibe-code spaghetti.&lt;/p&gt;

&lt;p&gt;Follow me for more breakdowns like this. ✌️&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>llm</category>
      <category>mcp</category>
    </item>
    <item>
      <title>🚀Fixing AI Code with Model-Based Testing: A Developer's Tale</title>
      <dc:creator>Ankit Kumar</dc:creator>
      <pubDate>Thu, 08 May 2025 12:04:01 +0000</pubDate>
      <link>https://forem.com/ankit_kumar_cfb7221a73fcb/fixing-ai-code-with-model-based-testing-a-developers-tale-378c</link>
      <guid>https://forem.com/ankit_kumar_cfb7221a73fcb/fixing-ai-code-with-model-based-testing-a-developers-tale-378c</guid>
      <description>&lt;h2&gt;
  
  
  🧠 The Wake-Up Call
&lt;/h2&gt;

&lt;p&gt;Last week, I read about Cursor's AI support bot confidently inventing a &lt;strong&gt;non-existent company policy&lt;/strong&gt;. It caused public outrage.&lt;/p&gt;

&lt;p&gt;But for me? It wasn’t even surprising.&lt;/p&gt;

&lt;p&gt;As a Software developer working on enterprise systems, I’ve seen that kind of AI “confidence” firsthand — not in chat replies, but in code.&lt;/p&gt;

&lt;p&gt;It looked right. It passed some tests.&lt;br&gt;
But when I deployed it?&lt;/p&gt;

&lt;p&gt;🧨 Boom. Production bug.&lt;/p&gt;

&lt;p&gt;The worst part? The AI didn’t know it was wrong. And neither did I… until it was too late.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 My Journey with AI Coding Tools
&lt;/h2&gt;

&lt;p&gt;I was an early adopter of GitHub Copilot, ChatGPT, and all the latest AI dev tools.&lt;br&gt;
Like 97% of developers, I got swept up in the excitement. Who wouldn’t want:&lt;/p&gt;

&lt;p&gt;Faster development?&lt;/p&gt;

&lt;p&gt;Fewer repetitive tasks?&lt;/p&gt;

&lt;p&gt;More time for “real” problem solving?&lt;/p&gt;

&lt;p&gt;At first, it felt like magic.&lt;br&gt;
But magic doesn’t always come with guardrails.&lt;/p&gt;

&lt;p&gt;Over time, the bugs started creeping in. And they weren’t obvious ones.&lt;/p&gt;

&lt;p&gt;Here’s what I ran into:&lt;/p&gt;

&lt;p&gt;🔐 Authentication flows that skipped critical validation&lt;/p&gt;

&lt;p&gt;🔍 API endpoints that looked perfect — but exposed security risks&lt;/p&gt;

&lt;p&gt;🧪 Code that referenced packages that didn’t even exist&lt;/p&gt;

&lt;p&gt;These weren’t rookie mistakes. They were subtle, sneaky, and often made it all the way to staging — or worse, production.&lt;/p&gt;

&lt;h2&gt;
  
  
  📉 The Reality Check
&lt;/h2&gt;

&lt;p&gt;After one particularly painful outage, I started digging into how widespread this issue was. What I found made it clear: it wasn’t just me.&lt;/p&gt;

&lt;p&gt;⚠️ 32% of AI-generated code is incorrect&lt;/p&gt;

&lt;p&gt;🐛 Our internal bug count jumped 41% after AI tooling adoption&lt;/p&gt;

&lt;p&gt;🔓 About 30% of AI code included security vulnerabilities&lt;/p&gt;

&lt;p&gt;It wasn’t hype. It was happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Why Traditional Testing Failed Me
&lt;/h2&gt;

&lt;p&gt;I did everything a responsible dev should do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Added more unit tests&lt;/li&gt;
&lt;li&gt;✅ Tightened code reviews&lt;/li&gt;
&lt;li&gt;✅ Wrote more integration tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s the problem: AI writes code faster than we can test it.&lt;/p&gt;

&lt;p&gt;Our QA team was drowning in new code. Manual reviews weren’t enough.&lt;br&gt;
Bugs slipped through. Technical debt piled up. Releases got riskier.&lt;/p&gt;

&lt;p&gt;I knew we needed a smarter way to test.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧭 Discovering Model-Based Testing (MBT)
&lt;/h2&gt;

&lt;p&gt;After falling into a deep rabbit hole of Reddit threads, dev forums, and research papers, I came across something called Model-Based Testing.&lt;/p&gt;

&lt;p&gt;It blew my mind.&lt;/p&gt;

&lt;p&gt;Instead of writing individual test cases, you describe how your system should behave — and the testing framework automatically generates comprehensive test scenarios.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if your tests understood your system's logic, not just its functions?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s when I discovered Provengo — a platform that made MBT actually usable in my workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with Provengo
&lt;/h2&gt;

&lt;p&gt;I started experimenting with &lt;a href="https://provengo.tech/" rel="noopener noreferrer"&gt;Provengo&lt;/a&gt;, and here's what I found:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ What Worked Well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🚫 It caught AI hallucinations before they hit production&lt;/li&gt;
&lt;li&gt;🔄 Test maintenance became mostly automated&lt;/li&gt;
&lt;li&gt;🧪 I could validate behavior before implementation, not after&lt;/li&gt;
&lt;li&gt;⚙️ It fit smoothly into our CI/CD pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ What Was Challenging
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📚 There’s a learning curve — behavioral modeling isn’t second nature&lt;/li&gt;
&lt;li&gt;🕓 Initial setup took more time than I expected&lt;/li&gt;
&lt;li&gt;😐 Some teammates were skeptical at first&lt;/li&gt;
&lt;li&gt;📖 The docs were good, but advanced examples needed more clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real Results from My Team
&lt;/h2&gt;

&lt;p&gt;After using Provengo alongside our AI coding tools for a few months:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐞 Debugging time dropped by ~60%&lt;/li&gt;
&lt;li&gt;🚨 Production bugs decreased significantly&lt;/li&gt;
&lt;li&gt;💬 Confidence in AI-generated code went up&lt;/li&gt;
&lt;li&gt;🏎️ We moved faster, but without sacrificing quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Was it perfect? No.&lt;br&gt;
Was it worth it? Absolutely.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 What I Learned
&lt;/h2&gt;

&lt;p&gt;AI gives me speed — but speed without safety is just risk.&lt;/p&gt;

&lt;p&gt;Provengo has become my protective layer. It doesn’t replace AI, but it makes working with AI safer, smarter, and more reliable.&lt;/p&gt;

&lt;p&gt;Our industry doesn’t need to fight AI.&lt;br&gt;
We need to build better systems around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Perfect Partnership
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🧠 AI Coding Assistant&lt;/th&gt;
&lt;th&gt;🔍 Provengo MBT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Writes code quickly&lt;/td&gt;
&lt;td&gt;Validates it thoroughly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doesn’t understand logic&lt;/td&gt;
&lt;td&gt;Understands expected system behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can hallucinate&lt;/td&gt;
&lt;td&gt;Flags misbehavior before it ships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speeds up development&lt;/td&gt;
&lt;td&gt;Speeds up testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Increases tech debt&lt;/td&gt;
&lt;td&gt;Reduces debugging time by up to 60%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  You Try It?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The process of mastering &lt;strong&gt;behavioral modeling&lt;/strong&gt; needs sufficient time for acquisition.&lt;/li&gt;
&lt;li&gt;Your team needs to be open to a new testing paradigm&lt;/li&gt;
&lt;li&gt;Complex projects receive greater advantages than basic projects do&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This tool functions as my safety net when working with AI in production systems.&lt;/p&gt;

&lt;p&gt;It’s not perfect — no tool is.&lt;/p&gt;

&lt;p&gt;But it’s helped me turn unpredictable code into reliable software, and that’s a win I’ll take every time.&lt;/p&gt;

&lt;p&gt;Follow me for more such experiences!!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>testing</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
