<?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: CodeLink</title>
    <description>The latest articles on Forem by CodeLink (@codelink).</description>
    <link>https://forem.com/codelink</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%2F1095739%2F72cf6dd0-768f-4f25-8ffe-6968dd2c9573.jpg</url>
      <title>Forem: CodeLink</title>
      <link>https://forem.com/codelink</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codelink"/>
    <language>en</language>
    <item>
      <title>How Figma Make is Closing the 'Idea-to-Proof' Gap</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Fri, 21 Nov 2025 08:50:25 +0000</pubDate>
      <link>https://forem.com/codelink/how-figma-make-is-closing-the-idea-to-proof-gap-28a2</link>
      <guid>https://forem.com/codelink/how-figma-make-is-closing-the-idea-to-proof-gap-28a2</guid>
      <description>&lt;p&gt;Every product team knows the tension between speed and clarity. Moving from a concept on a slide to something people can actually test is often slow, expensive, and fragmented. That gap between &lt;em&gt;what we imagine&lt;/em&gt; and &lt;em&gt;what we can demonstrate&lt;/em&gt; is where many good ideas stall. &lt;/p&gt;

&lt;p&gt;Figma Make enters this space with a bold promise: to compress the distance between idea and proof, giving teams the power to build realistic, functional prototypes directly from their designs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Problem: Ideas Are Hard to Show
&lt;/h2&gt;

&lt;p&gt;As a product designer, I live in the idea-to-pitch loop with a constant question: &lt;em&gt;How do I make my teammates or clients see what I see?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mockup help. Words help. But they’re not enough. Whether it be pitching to investors, scoping with clients, or aligning internal teams, &lt;strong&gt;ideas are always easy to talk about, but hard to show.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We're stuck in a gap between the concept and the tangible, interactive experience needed to get real feedback. The problem is that turning a raw idea into a functional prototype is slow, expensive, and often out of reach. Too often, we pitch promises, not proof.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2FBLOG_Figma_Make_Designs_Inner_1920x1080_jpg_492fa64b58%2FBLOG_Figma_Make_Designs_Inner_1920x1080_jpg_492fa64b58.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2FBLOG_Figma_Make_Designs_Inner_1920x1080_jpg_492fa64b58%2FBLOG_Figma_Make_Designs_Inner_1920x1080_jpg_492fa64b58.jpg" alt="Gap Between Concept and Proof" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For non-designers, this gap is even wider. Turning an idea into something tangible often means wrestling with complex tools, waiting on design or engineering support, or worse, going into critical meetings with nothing but words.&lt;/p&gt;

&lt;p&gt;This is the exact gap Figma Make aims to fill. It’s a new set of capabilities designed to turn ideas into clickable, functional prototypes faster than ever.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: What Figma Make Offers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuqpgk4ru2jgqt0mw6s5.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%2Fwuqpgk4ru2jgqt0mw6s5.png" alt="Figma Make Interface.png" width="800" height="450"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Figma Make introduces a new approach to prototyping, allowing teams to build dynamic, data-driven web applications and prototypes directly from their designs.&lt;/p&gt;

&lt;p&gt;Here’s what I think makes it different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prompt-to-App:&lt;/strong&gt; Using AI (currently Claude 3.7 Sonnet), I was surprised by how quickly I could turn a static layout into something clickable simply by providing a Figma design and a natural-language prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Point-and-Prompt:&lt;/strong&gt; Being able to select a component on the canvas and adjust its behavior with a short instruction made iteration much faster. It felt closer to having a conversation with the tool rather than switching between menus or searching for the right setting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reasoning &amp;amp; Error Detection:&lt;/strong&gt; This is my personal favorite. It can explain its logic, manage versioning, and even offer automatic error detection and code quality improvements with the "Fix for me" feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integrated Backend Support:&lt;/strong&gt; Figma Make allows prototypes to: a) connect to real APIs, databases, and custom backend logic; b) build dynamic experiences like form submissions, authentication, or AI-driven interactions; c) integrate directly with tools like Xano, Supabase, Airtable, or other custom endpoints. I don’t need a technical background to set any of this up, yet I can still test real product flows.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essentially, it moves prototyping from just "linking screens" to "building mini-apps."&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting It to the Test: A Hackathon Case Study
&lt;/h2&gt;

&lt;p&gt;I recently had the chance to explore Figma Make’s full potential during &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7387402543355629568" rel="noopener noreferrer"&gt;CodeLink’s 2025 Hackathon&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Our team decided to build an &lt;strong&gt;AI Tutor App&lt;/strong&gt; that would generate a complete learning course, including lectures, practice questions, and a final project, all from a single uploaded lecture. Users could customize the project's theme and difficulty based on their learning objectives.&lt;/p&gt;

&lt;p&gt;As the team's designer, I was responsible for building the end-to-end working prototype so we could rapidly test our ideas.&lt;/p&gt;

&lt;p&gt;My technical background is quite limited, but the open dialogue and natural language interface of Figma Make immediately lowered the barrier. Because it’s built right within Figma, it provides a convenient and safe "sandbox" environment. I could try new ideas without any risk, thanks to the built-in versioning and revert options.&lt;/p&gt;

&lt;p&gt;We started with a static design and a simple prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Use the reference design to build an AI Tutor App that generates learning courses based on uploaded lectures. Generate Selection Questions for practices, and create a course project with a custom topic, based on user learning objectives&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In a remarkably short time, we had a functional prototype that the team could actually use and test, not just click through.&lt;/p&gt;

&lt;p&gt;To test out the resulting prototype, read our full article &lt;a href="https://www.codelink.io/blog/post/how-figma-make-is-closing-the-idea-to-proof-gap?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=blog&amp;amp;utm_content=figma_make" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the Most of Figma Make
&lt;/h2&gt;

&lt;p&gt;These practices make the AI more accurate, reduce rework, and keep your prototype manageable as it grows in complexity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define Specific Requirements:&lt;/strong&gt; Be explicit about what the design needs to achieve. Specify where it fits in the product and any constraints. Clear inputs lead to more accurate outputs. For example, “This screen is part of onboarding, must include email + OTP fields, and follow mobile layout rules.” &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prepare a Clean Design File:&lt;/strong&gt; Before prompting, organize your Figma file. Remove unused layers, group related components, and standardize naming (e.g., Button/Primary, Form/Input). A tidy structure helps Figma Make understand hierarchy and reduces errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Break Down Complex Tasks:&lt;/strong&gt; For multi-step flows or advanced logic, start small. Instead of prompting “build the full checkout flow,” begin with “create the cart summary section,” then layer in payment, validation, and API steps gradually. This keeps the build predictable and easier to refine.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;My single biggest discovery is just how much value Figma Make adds &lt;em&gt;before&lt;/em&gt; the official design phase even has to start. We’re not just building faster, but also &lt;em&gt;learning faster&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Designers&lt;/strong&gt; can test usability and interaction logic earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Product owners&lt;/strong&gt; can demonstrate scope and feasibility with live prototypes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clients and stakeholders&lt;/strong&gt; can interact with a concept rather than interpret slides.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teams can quickly get a general feeling for an idea, uncover real user pain points, and test complete flows in a realistic, data-driven environment. This creates a tighter feedback loop of &lt;strong&gt;Idea → Interaction → Insight&lt;/strong&gt; and turns discussions into evidence-based iteration.&lt;/p&gt;

&lt;p&gt;For product owners, designers, founders, or anyone stuck in the loop of talking about their ideas, Figma Make might finally be the tool that lets the idea truly &lt;em&gt;show&lt;/em&gt; itself.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>design</category>
      <category>lowcode</category>
    </item>
    <item>
      <title>Multi-agent Systems Explained: The Next Step in AI Evolution</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Wed, 22 Oct 2025 09:01:00 +0000</pubDate>
      <link>https://forem.com/codelink/multi-agent-systems-explained-the-next-step-in-ai-evolution-50md</link>
      <guid>https://forem.com/codelink/multi-agent-systems-explained-the-next-step-in-ai-evolution-50md</guid>
      <description>&lt;p&gt;Artificial Intelligence (AI) is evolving beyond single, monolithic models. Today’s most capable systems are made up of &lt;em&gt;multiple&lt;/em&gt; AI agents. This new paradigm of multi-agent systems (MAS) represents the next step in AI evolution, where collaboration and coordination between agents matter as much as individual intelligence.&lt;/p&gt;

&lt;p&gt;In this article, we’ll break down what multi-agent systems are, how they work through real-world analogies, and explore the different architectures that make them scalable and effective in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  LLM Agents
&lt;/h2&gt;

&lt;p&gt;With the rapid development of Large Language Models (LLMs), many systems are now built around an LLM core (ChatGPT, Claude, LLaMA, etc.) and extended with prompts, functions, or pipelines to perform specific tasks. These systems are known as &lt;strong&gt;LLM Agents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are several types of LLM Agents, depending on how they are implemented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tool-calling agents&lt;/strong&gt;: These agents use the LLM to interact with external functions or tools, like searching a database or accessing an API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Graph agents&lt;/strong&gt;: Instead of tackling a prompt all at once, this agent breaks a complex task into smaller steps. Each step might call a specific prompt or function, with the output of one step feeding into the next. In this method, agents are built as a directed graph or state machine, each node representing reasoning or tool-calling steps. Popular frameworks to develop this type of agent are &lt;strong&gt;LangGraph&lt;/strong&gt;, &lt;strong&gt;CrewAI&lt;/strong&gt;, &lt;strong&gt;LLamaIndex&lt;/strong&gt;, …&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Planning Agents:&lt;/strong&gt; These agents create a plan of action before executing steps. They break complex goals into smaller tasks by using prompting methods. A simple setup might include two stages: First is planning, where the agent analyzes the request and outlines step-by-step actions. Second is execution, the agent executes the plan, combining the original request with the generated steps to deliver the final output. Modern frameworks such as &lt;strong&gt;AutoGPT&lt;/strong&gt;, &lt;strong&gt;BabyAGI&lt;/strong&gt;, and &lt;strong&gt;CAMEL&lt;/strong&gt; have expanded and refined this approach.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reasoning Agents&lt;/strong&gt;: Currently, one of the most widely adopted approaches, inspired by the 2023 paper “ReAct: Synergizing Reasoning and Acting in Language Models.” These agents simulate human-like logical reasoning. Upon receiving a request, the agent thinks, decides, and reasons through what it needs to do, then executes an action, observes the result, and updates its state. This loop of &lt;strong&gt;think&lt;/strong&gt; → &lt;strong&gt;act&lt;/strong&gt; → &lt;strong&gt;observe&lt;/strong&gt; → &lt;strong&gt;update&lt;/strong&gt; continues until the goal is reached or a stopping condition is met. Unlike Planning Agents, who create a fixed plan and execute it in one go, Reasoning Agents work in a continuous feedback loop.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multi-Agent Systems
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;multi-agent system&lt;/strong&gt; is exactly what it sounds like: a system that combines multiple, individual agents, allowing them to work together to handle tasks far more complex than any single agent could manage alone. These agents can collaborate in different ways, depending on how the system is designed.&lt;/p&gt;

&lt;p&gt;Let’s check out the three most common multi-agent architectures to see how each one shapes coordination, scalability, and performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Network
&lt;/h3&gt;

&lt;p&gt;Imagine you're starting a company with three friends: a &lt;strong&gt;Back-end developer&lt;/strong&gt;, a &lt;strong&gt;Front-end developer&lt;/strong&gt;, and an &lt;strong&gt;admin&lt;/strong&gt;. Everyone knows each other well and collaborates closely.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_1_edited_4d288848ac%2Fmas_1_edited_4d288848ac.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_1_edited_4d288848ac%2Fmas_1_edited_4d288848ac.jpg" alt="Network Architecture.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the early days of the company, your main goal is to find as many customers as possible, so external connections and relationships become crucial. &lt;/p&gt;

&lt;p&gt;When a customer reaches out to any member of your team to request a product or service, that person will notify the others and check whether they are capable of handling the request. If they can, they complete the task and deliver the result to the customer. If not, or if they can only handle part of it, they will reach out to the rest of the team to find someone who can continue or complete the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple Scenario&lt;/strong&gt;: A customer who knows your Back-end developer asks for a simple Application Programming Interface (API) for their business. The Back-end developer can handle this alone, complete the work, and deliver the final product directly to the customer.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_2a_560d7ced27%2Fmas_2a_560d7ced27.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_2a_560d7ced27%2Fmas_2a_560d7ced27.jpg" alt="Network Simple Scenario 1.jpg" width="800" height="450"&gt;&lt;/a&gt;&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_2b_453af71eeb%2Fmas_2b_453af71eeb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_2b_453af71eeb%2Fmas_2b_453af71eeb.jpg" alt="Network Simple Scenario 2.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex Scenario&lt;/strong&gt;: The same customer returns, but this time they want a full application - a User Interface (UI), more APIs, and a server to deploy everything on. The Back-end developer can't do this alone. He breaks the project down and asks each team member to contribute their part. Once all the pieces are finished, he assembles the final product and delivers it to the customer.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_3a_0785143a0b%2Fmas_3a_0785143a0b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_3a_0785143a0b%2Fmas_3a_0785143a0b.jpg" alt="Network Complex Scenario 1.jpg" width="800" height="450"&gt;&lt;/a&gt;&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_3b_82b5fc9fe4%2Fmas_3b_82b5fc9fe4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_3b_82b5fc9fe4%2Fmas_3b_82b5fc9fe4.jpg" alt="Network Complex Scenario 2.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the core concept of a &lt;strong&gt;Network Multi-Agent Architecture&lt;/strong&gt;. Each agent in the system handles a specific task, and they are all interconnected. Every agent is aware of the others and their unique capabilities. You set one agent as the entry point; when a request comes in, this agent analyzes whether it can handle it alone or if it needs to pass the task (or parts of it) to other agents in the network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Example&lt;/strong&gt;: You have three agents - a &lt;strong&gt;Search Agent&lt;/strong&gt; (to pull data from a database), a &lt;strong&gt;Calculate Agent&lt;/strong&gt; (for numerical tasks), and a &lt;strong&gt;Chart Agent&lt;/strong&gt; (to create visualizations). &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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_4_bf148c8b9e%2Fmas_4_bf148c8b9e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_4_bf148c8b9e%2Fmas_4_bf148c8b9e.jpg" alt="Network Technical Example 1.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you ask the system to "calculate the company's revenue last year," the request will be handled as below:&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_5_d97a759114%2Fmas_5_d97a759114.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_5_d97a759114%2Fmas_5_d97a759114.jpg" alt="Network Technical Example 2.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This architecture is great for small systems with fewer than ten agents; you can connect them directly and don't have to think about their relationship or hierarchy. However, it has two main disadvantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: As your system grows, adding a new agent becomes a headache. You have to establish a connection from the new agent to all existing agents and then update all existing agents to recognize the new one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost&lt;/strong&gt;: To work effectively, each agent needs context about all the other agents in its prompt. As the system gets more complex, these prompts grow larger, consuming more tokens for every request. This can quickly become expensive and even hit API limits, causing complex requests to fail.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Supervisor
&lt;/h3&gt;

&lt;p&gt;Your company is growing. With more customers and tasks pouring in daily, you want your teammates to focus on working in their specific domain instead of finding more clients for your business. You’ve also hired some specialists from different domains to expand the company’s tech stack. The structure of your company becomes a little different.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_6_3ab9f60631%2Fmas_6_3ab9f60631.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_6_3ab9f60631%2Fmas_6_3ab9f60631.jpg" alt="Supervisor Architecture.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everybody is now under your management, and you’ll act as the central &lt;strong&gt;supervisor&lt;/strong&gt;. When a client comes with a request, they meet with you. You analyze their requirements, delegate the work to the right person, and manage the process. Once the task is complete, the team member reports back to you for final verification before you deliver the result to the client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple Scenario&lt;/strong&gt;: A client comes to your company to request a custom AI for analytical tasks. You assign this directly to your &lt;strong&gt;AI Engineer&lt;/strong&gt;. Once the engineer has built and tested the AI, they deliver it to you, and you present the final product to the client.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_7a_dbe1cc52ef%2Fmas_7a_dbe1cc52ef.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_7a_dbe1cc52ef%2Fmas_7a_dbe1cc52ef.jpg" alt="Supervisor Simple Scenario 1.jpg" width="800" height="450"&gt;&lt;/a&gt;&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_7b_95a68a3fc3%2Fmas_7b_95a68a3fc3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_7b_95a68a3fc3%2Fmas_7b_95a68a3fc3.jpg" alt="Supervisor Simple Scenario 2.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex Scenario&lt;/strong&gt;: A client wants a full-featured application with an integrated AI, a User Interface, a Back-end, and CI/CD (Continuous Integration/Continuous Deployment) pipelines. Now, you must act as a project manager. You break the request into smaller tasks and create a workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Step 1&lt;/strong&gt;: You assign the research and creation of the analytical AI to the &lt;strong&gt;AI Engineer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_8_3179533c7c%2Fmas_8_3179533c7c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_8_3179533c7c%2Fmas_8_3179533c7c.jpg" alt="Supervisor Complex Scenario 1.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Step 2&lt;/strong&gt;: Once the AI model is ready, you pass it to your &lt;strong&gt;Back-end engineer&lt;/strong&gt; to integrate it into a robust server-side application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_9_ff986f0a18%2Fmas_9_ff986f0a18.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_9_ff986f0a18%2Fmas_9_ff986f0a18.jpg" alt="Supervisor Complex Scenario 2.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Step 3&lt;/strong&gt;: When the back-end is complete, you ask your &lt;strong&gt;Front-end engineer&lt;/strong&gt; to build a user interface that communicates with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_10_1a3db7ad94%2Fmas_10_1a3db7ad94.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_10_1a3db7ad94%2Fmas_10_1a3db7ad94.jpg" alt="Supervisor Complex Scenario 3.jpg" width="800" height="450"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Step 4&lt;/strong&gt;: Finally, you bring everything to your DevOps engineer to create the CI/CD pipelines and deploy the application on a server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_11_3641403574%2Fmas_11_3641403574.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_11_3641403574%2Fmas_11_3641403574.jpg" alt="Supervisor Complex Scenario 4.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Step 5&lt;/strong&gt;: You wrap up the finished project and deliver it to the client. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_12_8cc430937b%2Fmas_12_8cc430937b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_12_8cc430937b%2Fmas_12_8cc430937b.jpg" alt="Supervisor Complex Scenario 5.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this model, a central &lt;strong&gt;coordinator agent&lt;/strong&gt; (you) connects to all other agents in a 1-to-1 relationship. This coordinator's job is to analyze requests, break them down, and delegate tasks to the appropriate specialist agent. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Example&lt;/strong&gt;: You still have the &lt;strong&gt;Search Agent&lt;/strong&gt;, &lt;strong&gt;Calculate Agent&lt;/strong&gt;, and &lt;strong&gt;Chart Agent&lt;/strong&gt;. Instead of connecting them together, you create a coordinator to maintain a 1:1 connection between this coordinator and the others.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_13_38beccaa1e%2Fmas_13_38beccaa1e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_13_38beccaa1e%2Fmas_13_38beccaa1e.jpg" alt="Supervisor Technical Example 1.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's revisit the request to "calculate the company's revenue last month." With a supervisor agent managing the process, the workflow is far more structured:&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_14_f41362bfcd%2Fmas_14_f41362bfcd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2Fmas_14_f41362bfcd%2Fmas_14_f41362bfcd.jpg" alt="Supervisor Technical Example 2.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unlike the network model, the specialist agents don't need to know about each other; they only communicate with the coordinator. This allows them to focus purely on their tasks. &lt;/p&gt;

&lt;p&gt;However, this architecture introduces a new &lt;strong&gt;bottleneck&lt;/strong&gt;: the coordinator. As you add more agents to the system, the coordinator's prompt grows larger with information about each new agent it manages. Eventually, it too can become unwieldy and hit token limits. That’s the reason why we have another architecture to handle this, and it’s called hierarchical.&lt;/p&gt;

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

&lt;p&gt;To learn more about this architecture, read the full blog article &lt;a href="https://www.codelink.io/blog/post/multi-agent-system?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=blog&amp;amp;utm_content=mas" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent as a Tool
&lt;/h3&gt;

&lt;p&gt;In modern development, the concept of &lt;strong&gt;“agents as tools”&lt;/strong&gt; often overlaps with hierarchical or supervisor systems. &lt;/p&gt;

&lt;p&gt;Instead of coding separate functions for each tool, you can treat an agent as a &lt;strong&gt;domain-specific tool&lt;/strong&gt; that handles a group of related tasks. Then, you can treat that entire multi-agent system as a single, powerful "tool" that a higher-level agent can call upon. This is a highly effective way to encapsulate complex capabilities and build incredibly sophisticated systems.&lt;/p&gt;

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

&lt;p&gt;A &lt;strong&gt;multi-agent system&lt;/strong&gt; provides a structured way to manage multiple LLM agents within a single ecosystem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network architecture&lt;/strong&gt; works best for small systems with fewer agents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Supervisor architecture&lt;/strong&gt; suits medium-sized systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hierarchical architecture&lt;/strong&gt; is ideal for large-scale setups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each approach has trade-offs in scalability, complexity, and efficiency. Based on your needs, you can choose the most suitable architecture and framework.&lt;/p&gt;

&lt;p&gt;To get started, it’s worth exploring &lt;strong&gt;LangGraph&lt;/strong&gt; and &lt;strong&gt;LlamaIndex&lt;/strong&gt; as they are among the most popular frameworks for developing LLM and multi-agent systems. LangGraph also provides tutorials for building multi-agent setups.&lt;/p&gt;

&lt;p&gt;If you’re wondering how to connect agents built with different frameworks or languages, explore &lt;strong&gt;Agent-to-Agent&lt;/strong&gt; communication and &lt;a href="https://www.codelink.io/blog/post/mcp-under-the-hood?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=blog&amp;amp;utm_content=mcp" rel="noopener noreferrer"&gt;&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;&lt;/a&gt;. Combining those concepts with the architectures above will help you design an adaptive, scalable multi-agent system.&lt;/p&gt;

</description>
      <category>mas</category>
      <category>ai</category>
      <category>agents</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>The Human Truths of Database Migration</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 04 Sep 2025 14:58:49 +0000</pubDate>
      <link>https://forem.com/codelink/the-human-truths-of-database-migration-cml</link>
      <guid>https://forem.com/codelink/the-human-truths-of-database-migration-cml</guid>
      <description>&lt;h2&gt;
  
  
  The Human Side of Tech Decisions
&lt;/h2&gt;

&lt;p&gt;We like to think that in the world of technology, logic and data are the lighthouse. The best algorithm or the fastest system always wins. But if you look closely, you’ll find that our most critical tech decisions are surprisingly human.&lt;/p&gt;

&lt;p&gt;Consider this Asian philosophy: &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%2Fylfp3gmalkuor2bv86tp.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%2Fylfp3gmalkuor2bv86tp.png" alt="The Human Side of Tech Decisions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At first glance, it sounds like a business adage, yet it sheds a surprising light on the complex, human-driven journey of data migration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data migration&lt;/strong&gt; is a deep, multi-layered shift that affects systems, workflows, budgets, and most importantly, people. And once a company does commit to migrating, the challenges that follow go &lt;em&gt;far&lt;/em&gt; beyond just moving data.&lt;/p&gt;

&lt;p&gt;This article breaks down the truths and trials of this journey, moving beyond the marketing hype to what really matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  How We &lt;em&gt;Really&lt;/em&gt; Pick a Database
&lt;/h2&gt;

&lt;p&gt;Let’s unpack the quote above further and see how choosing a database can be in real life.&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%2Fvryryrdbjdza8k0jn5lc.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%2Fvryryrdbjdza8k0jn5lc.png" alt="How We Really Pick a Database" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pedigree First
&lt;/h3&gt;

&lt;p&gt;It's human nature to trust what's popular, so a database’s reputation, its &lt;em&gt;"pedigree,"&lt;/em&gt; can carry a lot of weight. This creates a powerful &lt;em&gt;"halo effect"&lt;/em&gt;: we assume that because a technology is widely used, it must be the best for every situation.&lt;/p&gt;

&lt;p&gt;Take &lt;strong&gt;MongoDB&lt;/strong&gt;, for example. Its huge market share and massive community make it feel like the default "safe" choice. A less-known database might be a better technical match for certain use cases, but they rarely get the same attention.&lt;/p&gt;

&lt;p&gt;When pedigree takes the lead, teams might default to the familiar without diving into whether it’s actually the best tool for the job. That can lead to suboptimal choices, higher long-term costs, and missed opportunities to build something better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Relationships Second
&lt;/h3&gt;

&lt;p&gt;Beyond brand names, we stick with what and who we know, a.k.a our &lt;em&gt;“relationships.”&lt;/em&gt; This could be a strong relationship with a vendor, a helpful online community, or simply your development team's comfort level with a certain technology.&lt;/p&gt;

&lt;p&gt;A team might stick with a familiar tool simply because it's easier than learning something new. The feeling of safety that comes from established relationships often wins out, even if an unfamiliar alternative could deliver better results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Money Takes Third Place
&lt;/h3&gt;

&lt;p&gt;Of course, &lt;em&gt;“money”&lt;/em&gt; always has a seat at the table. The &lt;strong&gt;total cost of ownership&lt;/strong&gt; (licensing fees, operational overhead, training, etc.) is a huge driver in any tech decision. It can push teams toward more affordable or already-supported solutions. &lt;/p&gt;

&lt;p&gt;The problem is when cost starts &lt;em&gt;driving&lt;/em&gt; the decision instead of informing it. Choosing the cheapest path can mean settling for a weaker fit, which might cost more down the line in performance issues or scaling challenges.&lt;/p&gt;

&lt;h3&gt;
  
  
  Only Then Does Intellect Matter
&lt;/h3&gt;

&lt;p&gt;And here we are, at the bottom of the list: the pure technical capabilities. This is the database's true &lt;em&gt;"intellect"&lt;/em&gt;: performance benchmarks, indexing capabilities, query language power and flexibility, architecture fit, so on and so forth.&lt;/p&gt;

&lt;p&gt;Ideally, this is where the decision should start and end. But by the time teams reach this stage, it’s often already skewed by reputation, relationships, or cost. The technical merit becomes a box to tick, not the core of the choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Alike Than You Think: MongoDB vs RethinkDB
&lt;/h2&gt;

&lt;p&gt;The tech world loves a good rivalry, and it's easy to get caught up in marketing that highlights what makes each tool unique: the killer feature, the standout use case, the unique philosophy, etc. But if you look past the hype, you'll find that competing technologies often share the same DNA. &lt;/p&gt;

&lt;p&gt;This is what we mean by seeking a &lt;em&gt;“truth in tech”&lt;/em&gt;: cutting through branding to focus on the core engineering principles. And sometimes, that truth reveals unexpected common ground.&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%2F7w3a33ldwqycw4h35j3w.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%2F7w3a33ldwqycw4h35j3w.png" alt="MongoDB vs RethinkDB" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take MongoDB and RethinkDB. Unlike MongoDB, which requires developers to poll for changes, RethinkDB has a fundamentally different architecture that allows developers to continuously push updated query results in real time. However, let’s look at their biggest commonalities in our full article &lt;a href="https://www.codelink.io/blog/post/the-human-truths-of-database-migration" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This kind of foundational overlap is easy to miss if you’re only comparing surface-level features or chasing a single “killer” use case. At the end of the day, the choice between databases should be based on a deeper analysis of your needs, not just a single feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Core Challenges of Database Migration
&lt;/h2&gt;

&lt;p&gt;Database migration may sound straightforward. Just move data from point A to point B, right? In reality, it’s a minefield of risks and complexities that, if not managed carefully, can cause major headaches. &lt;/p&gt;

&lt;p&gt;Based on what we’ve seen, below are some real-world migration risks:&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%2Fuiy70invnklffczkrppq.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%2Fuiy70invnklffczkrppq.png" alt="Challenges of Database Migration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Hurdles
&lt;/h3&gt;

&lt;p&gt;Let’s start with the obvious: the technical side is tough. You’re dealing with high stakes and high complexity, and there’s not much room for error.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Integrity and Consistency:&lt;/strong&gt; The absolute number one rule is that all data remains &lt;em&gt;accurate&lt;/em&gt;, &lt;em&gt;complete&lt;/em&gt;, and &lt;em&gt;consistent&lt;/em&gt; throughout the transfer process. Any loss, corruption, or inconsistency can have a serious impact on everything from financial records to customer trust.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Schema Incompatibility:&lt;/strong&gt; Data from the old database rarely fits perfectly into the new one. Especially when moving between different types of databases (like from a relational database to a NoSQL document store, or even between different NoSQL schemas). This requires careful mapping to ensure structural compatibility and optimal performance in the new environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Migration Downtime Risk:&lt;/strong&gt; The goal is always a migration that your users barely notice. In practice, that’s hard. Even a short disruption can cause financial losses, erode user satisfaction, and damage an organization's reputation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integration with Existing Systems:&lt;/strong&gt; Your new database needs to play nicely with all your existing apps, services, and reporting tools within the broader technological ecosystem. This often requires updates to connectors, APIs, and data pipelines, followed by rigorous testing a.k.a our next point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rigorous Testing:&lt;/strong&gt; It’s a non-negotiable, as this stage is where hidden issues usually emerge. You’ll have to validate the data, benchmark performance in the new environment, test app behavior, and run disaster recovery procedures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Volume and Velocity:&lt;/strong&gt; If you're moving massive datasets, especially for systems with high transaction rates or real-time data streams, things get even more complicated. This requires robust infrastructure, optimized migration strategies, and careful management of network bandwidth and processing power.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These technical problems aren't isolated; they're interconnected. A small oversight in one area, like a flawed schema or a poor data check, can easily snowball into major problems like integration failures, slow performance, or an inconsistent database.&lt;/p&gt;

&lt;p&gt;Taking shortcuts creates &lt;em&gt;"invisible technical debt,"&lt;/em&gt; or hidden problems that don't show up right away but will appear months later as mysterious bugs, performance bottlenecks, and maintenance nightmares. That’s why migrations demand a &lt;strong&gt;quality-over-speed&lt;/strong&gt; mindset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resource Realities
&lt;/h3&gt;

&lt;p&gt;Beyond the technical challenges, a database migration puts a major strain on your resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unexpected Costs:&lt;/strong&gt; Few migrations stay under budget. Database migrations frequently exceed initial estimates. Unforeseen problems, the need for special tools, or hiring outside experts can quickly blow up expenses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tooling Limitations and Custom Scripting:&lt;/strong&gt; Off-the-shelf migration tools rarely do it all. Many teams find they need custom scripts to handle specific data transformations, complex integration points, or unique features of the source or target database. That development work takes time and pulls engineers off other priorities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Infrastructure Demands:&lt;/strong&gt; The target environment might require better hardware, cloud services, or architecture changes, adding to the total cost. This is to meet the performance and scalability requirements for the migrated data and the applications that will interact with it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And these aren’t just line items; they come with an &lt;em&gt;“opportunity cost.”&lt;/em&gt; When your best engineers are tied up on migration, they’re not shipping new features or pursuing growth initiatives. That can slow momentum and delay progress elsewhere in the business.&lt;/p&gt;

&lt;h3&gt;
  
  
  The People Factor
&lt;/h3&gt;

&lt;p&gt;Finally, and most importantly, every migration is also a change management challenge. A technology shift is only successful if the people involved embrace it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Skill Gaps:&lt;/strong&gt; Teams may lack the necessary expertise with the new database, creating a significant bottleneck. This means you'll have to invest heavily in training or hire new talent, both of which take time and money.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resistance to Change:&lt;/strong&gt; People get comfortable with their tools and workflows. Introducing a new system, even if it’s better, often meets friction. In worst case scenario, frustration and resistance. Success requires empathy, strong communication, and early involvement from stakeholders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Misalignment:&lt;/strong&gt; A lack of clear communication or buy-in from all stakeholders (development, operations, and business stakeholders) can kill a project. Consistent, honest communication builds trust and keeps everyone aligned. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expectations and Human Error:&lt;/strong&gt; Set realistic expectations without sugarcoating the complexity. And protect against avoidable mistakes with clear procedures, validation steps, and fallback plans.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This people layer in database migration, if neglected, can build up what we call “&lt;em&gt;cultural debt.”&lt;/em&gt; This goes beyond project delays; it leads to low morale, a loss of trust in leadership, and a team that’s resistant to future changes. A bad migration experience can haunt your company's culture and agility for years.&lt;/p&gt;

&lt;p&gt;A successful migration creates a stable, scalable foundation without burning out your team, breaking your systems, or losing momentum. And that takes more than technical skills. Focus on your people with clear communication and training, and you’ll see resistance turned into support and a tough migration became a powerful opportunity for your team to grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Migration Really Teaches Us
&lt;/h2&gt;

&lt;p&gt;Database migrations are never just about tech. This is a “truth in tech” from the very beginning, when database selection is shaped as much by pedigree, relationships, and money as they are by intellect. It’s just as true when the migration begins, where the real hurdles aren’t just code and servers, but the interconnected challenges of budgets, resources, and people.&lt;/p&gt;

&lt;p&gt;Ignoring this human reality is how we accumulate hidden costs: the &lt;strong&gt;technical debt&lt;/strong&gt; from rushed solutions, the &lt;strong&gt;opportunity cost&lt;/strong&gt; from a distracted team, and the deep &lt;strong&gt;cultural debt&lt;/strong&gt; that comes from a poorly managed change.&lt;/p&gt;

&lt;p&gt;What matters most isn’t just the system you move to, but how honestly you assess what’s driving the move, and how well you bring your people along. Done right, migration isn’t just a technical shift. It’s a chance to rethink how your organization builds, decides, and grows.&lt;/p&gt;

&lt;p&gt;All in all, we want to say thank you, RethinkDB, for its invaluable contribution to our system. It’s a genuinely well-designed technology, loved by our team and many others, even when in reality, not everything goes as we wish.&lt;/p&gt;

</description>
      <category>database</category>
      <category>migration</category>
      <category>mongodb</category>
      <category>rethinkdb</category>
    </item>
    <item>
      <title>Lovable vs Builder.io vs Figma Make: What’s the Vibe Code Tool for You?</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 21 Aug 2025 13:22:07 +0000</pubDate>
      <link>https://forem.com/codelink/lovable-vs-builderio-vs-figma-make-whats-the-vibe-code-tool-for-you-174l</link>
      <guid>https://forem.com/codelink/lovable-vs-builderio-vs-figma-make-whats-the-vibe-code-tool-for-you-174l</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;What Kind of Vibe Are You Coding?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There’s a new term making the rounds that perfectly captures the shift in modern software development: &lt;strong&gt;vibe coding&lt;/strong&gt;. Coined by OpenAI co-founder &lt;a href="https://x.com/karpathy/status/1886192184808149383" rel="noopener noreferrer"&gt;Andrej Karpathy&lt;/a&gt;, it describes an AI-assisted workflow where developers use natural language prompts to generate and refine code. Instead of writing every line manually, you guide an AI, turning high-level goals and plain English descriptions into functional applications.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F2_QUOTE_a674f2aeea%2F2_QUOTE_a674f2aeea.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F2_QUOTE_a674f2aeea%2F2_QUOTE_a674f2aeea.jpg" alt="Vibe Coding Definition.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the center of the trend, &lt;strong&gt;AI-powered low-code platforms&lt;/strong&gt; are making big promises. They offer an incredible speed boost, moving ideas from prototype to production faster than ever. But the real test comes &lt;em&gt;post-MVP&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In this article, we’ll compare three mature platforms (&lt;strong&gt;Builder.io&lt;/strong&gt;, &lt;strong&gt;Lovable&lt;/strong&gt;, and &lt;strong&gt;Figma Make&lt;/strong&gt;) from a technical perspective, moving past the marketing hype to see how they handle code quality, backend integration, GitHub workflows, and whether they can produce production-ready code that stands up to the demands of scaling.&lt;/p&gt;

&lt;p&gt;The goal is simple: help you decide which tool fits your vibe coding workflow today &lt;em&gt;and&lt;/em&gt; won’t slow you down tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Two Categories of Vibe Coding Tools&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F3_TABLE_d947aa9c94%2F3_TABLE_d947aa9c94.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F3_TABLE_d947aa9c94%2F3_TABLE_d947aa9c94.jpg" alt="Two Categories of Vibe Coding Tools" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vibe coding tools generally fall into two groups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For technical users:&lt;/strong&gt; AI-assisted coding tools like Copilot, Cursor, Windsurf, Bolt.new, v0.dev, and Replit, built to speed up development while offering full integration with traditional software development life cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For non-technical users:&lt;/strong&gt; Low-code platforms like Lovable, Builder.io, and Figma Make, designed to turn prompts, images, or designs into functional UIs without needing programming know-how.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second category is where the most interesting questions about bridging vibe code and custom development arise. It’s these visual builders we’ll be focusing on.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Choosing Between Lovable, Builder.io, and Figma Make&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Each offers a unique philosophy on how to get from prototype to production, but they all promise to give developers superpowers:&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%2Fsvx1vfe4mj778f098s8y.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%2Fsvx1vfe4mj778f098s8y.png" alt="Lovable Interface" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;Lovable&lt;/strong&gt;&lt;/a&gt; is an AI-native tool that turns prompts or screenshots into clean, production-ready UIs. Its focus on built-in backend support makes it a strong choice for rapidly building functional applications. &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%2F3gk5cetslrvhze2a1exp.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%2F3gk5cetslrvhze2a1exp.png" alt="Buider.io Interface" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://builder.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Builder.io&lt;/strong&gt;&lt;/a&gt; is pitched as the visual development platform for teams who want it all. This app provides a developer-friendly no-code workflow for building and optimizing digital experiences with full control, whether visually or in code.&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%2Ff3dxw33wsa42hti4yi0r.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%2Ff3dxw33wsa42hti4yi0r.png" alt="Figma Make Interface" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/make/" rel="noopener noreferrer"&gt;&lt;strong&gt;Figma Make&lt;/strong&gt;&lt;/a&gt; is built for the design-first workflow to eliminate the gap between design and development. It empowers teams to turn meticulously crafted Figma frames into live, interactive apps without leaving the design ecosystem.&lt;/p&gt;

&lt;p&gt;The table below breaks down their core capabilities, user experience, and technical considerations side by side.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature / Factor&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Lovable&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href="http://Builder.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Builder.io&lt;/strong&gt;&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Figma Make&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompt-to-Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image-to-Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Direct screenshot&lt;/td&gt;
&lt;td&gt;✅ Figma/Screenshot&lt;/td&gt;
&lt;td&gt;✅ Figma-native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Built-in deploy&lt;/td&gt;
&lt;td&gt;✅ Netlify, Vercel integrations&lt;/td&gt;
&lt;td&gt;✅ Via Make Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend &amp;amp; DB Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Supabase native&lt;/td&gt;
&lt;td&gt;🟡 Plugin-based&lt;/td&gt;
&lt;td&gt;✅ via Supabase, Xano, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Source Code Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ GitHub integration&lt;/td&gt;
&lt;td&gt;✅ GitHub integration&lt;/td&gt;
&lt;td&gt;✅ GitHub export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built-in UI Editor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ VS Code-style interface&lt;/td&gt;
&lt;td&gt;✅ Drag-and-drop (can be cluttered)&lt;/td&gt;
&lt;td&gt;✅ Intuitive and Figma-native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interface / UX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Minimal and focused&lt;/td&gt;
&lt;td&gt;🟡 Rich but dense&lt;/td&gt;
&lt;td&gt;✅ Familiar Figma interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing (at time of test)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freemium + subscriptions starting from $25&lt;/td&gt;
&lt;td&gt;Freemium + subscriptions starting from $24&lt;/td&gt;
&lt;td&gt;Freemium + paid templates/add-ons&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;So, Which One Makes Sense for You?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The right choice depends on your role, goals, and technical comfort level. Use this table to see which platform best fits your context.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Persona&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Common Needs&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Technical Level&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Likely Fit&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Non-tech founder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build MVP, test an idea fast&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Lovable or Figma Make&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Product designer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build responsive UI mockups or marketing pages&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Figma Make or &lt;a href="http://Builder.io" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Technical founder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rapid UI scaffolding with clean code&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Lovable (with audit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Internal tools team&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build admin panels, dashboards&lt;/td&gt;
&lt;td&gt;Medium - High&lt;/td&gt;
&lt;td&gt;All of them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise design+dev&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Collaborate on branded landing pages&lt;/td&gt;
&lt;td&gt;Low - Medium&lt;/td&gt;
&lt;td&gt;
&lt;a href="http://Builder.io" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; or Figma Make&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Figma-centric team&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extend Figma workflows into production-ready UI&lt;/td&gt;
&lt;td&gt;Low - Medium&lt;/td&gt;
&lt;td&gt;Figma Make&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Under the Hood: How Each Tool Treats Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The long-term value of any AI UI builder comes down to the quality and usability of its output. Want a realistic look at what to expect? Read our full blog &lt;a href="https://www.codelink.io/blog/post/lovable-vs-builder-io-vs-figma-make" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Best Practices for Vibe-Code Platforms&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Getting the most out of tools like Lovable, Builder.io, and Figma Make goes beyond typing a prompt; it’s about how you guide and refine the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Provide As Much Context As Possible&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Vague prompts yield vague results. &lt;/p&gt;

&lt;p&gt;Don't just ask for "a login page." Specify the user type, the design intent, and the core functionality. The more context you provide, the less work you'll have to do later.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F4_CHATA_b8bec28271%2F4_CHATA_b8bec28271.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F4_CHATA_b8bec28271%2F4_CHATA_b8bec28271.jpg" alt="Provide As Much Context As Possible" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Attach Visual or Structural References&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Show, don’t tell. That’s the most effective way to communicate your vision.&lt;/p&gt;

&lt;p&gt;Whenever possible, use the &lt;strong&gt;image-to-code&lt;/strong&gt; features by providing a screenshot or a wireframe. If you're coming from a design background, linking directly to a Figma frame gives the AI a powerful, unambiguous blueprint to work from, dramatically improving the quality of the first draft.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Plan for Iterative Prompting&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Don't expect a perfect, finished product on the first try. If it’s unrealistic to get that from human teammates, it’s just as unrealistic from an AI model. &lt;/p&gt;

&lt;p&gt;So, trust the process and keep the conversation going. Your first prompt gets you a baseline. From there, you refine it with follow-up commands.&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%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F5_CHATB_FINAL_f272f522d2%2F5_CHATB_FINAL_f272f522d2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fstrapi-bucket-production%2F5_CHATB_FINAL_f272f522d2%2F5_CHATB_FINAL_f272f522d2.jpg" alt="Plan for Iterative Prompting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Plan for Handoffs and Refactors&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you're working in a team, establish a clear process for how AI-generated code is audited and integrated. Schedule time for a developer to review the code, refactor it to match your project's conventions, and connect the necessary backend logic.&lt;/p&gt;

&lt;p&gt;The clean handoff to engineering teams requires a mutual understanding that the output is a starting point. Which leads us to the next point.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Think Beyond the Demo&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The primary value of these platforms is in generating high-quality &lt;strong&gt;scaffolding&lt;/strong&gt;. They eliminate the tedious work of building the initial UI structure, but they don't deliver a finished, production-hardened application. &lt;/p&gt;

&lt;p&gt;Always treat the output as a significant head start, not the finish line. That’s the key to creating maintainable AI-generated code and successfully scaling beyond the MVP.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Happens Post-MVP&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You've used an AI UI builder to launch your MVP in record time. It looks great, and the initial feedback is positive. Now what?&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Common Pitfalls&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The initial velocity can mask common pitfalls that emerge as you scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Spaghetti code:&lt;/strong&gt; Relying on endless prompt tweaks without a structured plan can create a tangled web of AI-generated styles and logic that becomes nearly impossible to refactor or maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vendor lock-in:&lt;/strong&gt; Your application can become so dependent on a platform's proprietary components and build processes that you can't easily move it. And it’s not ideal to be reliant on a &lt;em&gt;single&lt;/em&gt; provider for hosting, updates, and scaling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unscalable infrastructure:&lt;/strong&gt; The convenience of a platform's built-in backend can hit a ceiling just as your user base starts to grow, forcing complex and costly migrations when you can least afford them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance and security:&lt;/strong&gt; These platforms’ generated code is front-end heavy and not optimized for high-traffic performance or safe data handling. If left unchecked, this can easily introduce security risks, slow load times, and bottlenecks later on.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these create a classic recipe for &lt;strong&gt;technical debt&lt;/strong&gt;. Every quick prompt tweak you make to fix a problem, instead of stepping back for structured planning, is a small deposit into that debt.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Recommendations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Avoid these traps and ensure your project has a future with our best practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conduct early code audits:&lt;/strong&gt; Before adding more complexity, have a developer audit the codebase to catch any issues while they’re still small. Understand its structure, identify potential hardening or refactoring opportunities, and establish clear coding conventions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Balance speed with maintainability:&lt;/strong&gt; What’s fast now isn’t always fast &lt;em&gt;later&lt;/em&gt;. The initial speed of AI generation is an asset, but it should be immediately channeled into a workflow that prioritizes clean architecture and maintainable AI-generated code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Emphasize human oversight:&lt;/strong&gt; Ultimately, an AI can accelerate the process, but it’s not the captain. A developer must own the architecture, validate the output, and make the critical decisions needed to build a robust, scalable, and secure application.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The era of vibe coding is here, but building a production-grade application still requires more than just a clever prompt. The real magic is picking tools you can grow with, not just ones that wow in a demo. And that’s &lt;em&gt;exactly&lt;/em&gt; how we do things at &lt;a href="http://codelink.io" rel="noopener noreferrer"&gt;CodeLink&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>vibecoding</category>
      <category>lowcode</category>
      <category>prompttocode</category>
    </item>
    <item>
      <title>How We Turned Our Notion Playbook into a Slack Assistant with a Low-Code RAG Stack</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 14 Aug 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/codelink/how-we-turned-our-notion-playbook-into-a-slack-assistant-with-a-low-code-rag-stack-5182</link>
      <guid>https://forem.com/codelink/how-we-turned-our-notion-playbook-into-a-slack-assistant-with-a-low-code-rag-stack-5182</guid>
      <description>&lt;p&gt;Let us set the scene. It’s mid-morning, your coffee’s gone cold, and someone on the team pings in Slack asking:&lt;/p&gt;

&lt;p&gt;“Hey, how many remote weeks can I get each year?”&lt;/p&gt;

&lt;p&gt;You vaguely remember the answer hiding somewhere deep in the company playbook. A few Notion pages and bookmarks later, you’re still searching.&lt;/p&gt;

&lt;p&gt;Understanding the struggle, we at &lt;a href="https://www.codelink.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;CodeLink&lt;/strong&gt;&lt;/a&gt; decided to build an internal assistant that could &lt;strong&gt;instantly answer company policy questions right in Slack&lt;/strong&gt;, using a combination of Notion, a low-code orchestration tool (n8n), vector search, and a large language model.&lt;/p&gt;

&lt;p&gt;No guessing page names. No digging through tabs. Just answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Pain That Sparked It
&lt;/h2&gt;

&lt;p&gt;At CodeLink, we document a LOT of useful things: company values, benefits, workflows, policies, you name it. But the more we document, the harder it gets to find stuff. &lt;/p&gt;

&lt;p&gt;Faced with the current number of &lt;strong&gt;260+ pages&lt;/strong&gt;, team members often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Slam CTRL+K in Notion trying random keywords&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask in Slack and hope someone knows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guess document titles like it’s a game of corporate Wordle&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And when you finally do find the answer? It’s buried three sections deep in a page you didn’t expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea of Letting Slack Just... Answer
&lt;/h2&gt;

&lt;p&gt;We asked ourselves: &lt;em&gt;“What if you could just type a Slack command like ‘What’s our remote meeting policy?’ and get an instant, accurate answer?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That kicked off a simple but powerful internal initiative: using a &lt;strong&gt;lightweight Retrieval-Augmented Generation (RAG) workflow&lt;/strong&gt; to connect Slack with our company knowledge, orchestrated entirely through &lt;strong&gt;n8n&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  High-Level Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Extract&lt;/strong&gt;: Fetch Notion playbook content, including nested pages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chunk&lt;/strong&gt;: Split content into manageable text blocks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Store&lt;/strong&gt;: Save these blocks in a vector database to enable semantic search.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Retrieve&lt;/strong&gt;: When a Slack command is sent, convert the query into a vector and find the most relevant content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generate&lt;/strong&gt;: Feed the results to an LLM to summarize the most relevant answers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Respond&lt;/strong&gt;: Send a human-friendly answer back to Slack with source references.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fj2gc9onufe4xze6zcuq3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2gc9onufe4xze6zcuq3.jpg" alt="High-level workflow.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;p&gt;A high-level workflow to turn company policies to a Q&amp;amp;A Slackbot&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Chose Low-Code for Orchestration
&lt;/h2&gt;

&lt;p&gt;Rather than building a full backend service to handle Slack events, query pipelines, and logic routing, we leveraged &lt;strong&gt;n8n&lt;/strong&gt; to manage much of the integration and data flow logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why That Worked Well for Us
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We could design and iterate workflows quickly without scaffolding a backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in integrations (Slack, Webhook, HTTP, conditional logic) saved a lot of time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It remains visual and accessible to both devs and technical stakeholders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Custom code is still possible using function nodes when needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allowed our team to focus on the core value: getting information into people’s hands, &lt;em&gt;fast&lt;/em&gt;.&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%2Fsxcnfdybxdttld4min3t.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%2Fsxcnfdybxdttld4min3t.png" alt="Lightweight Slack-to-answer pipeline" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;p&gt;Lightweight Slack-to-answer pipeline powered by n8n, from user command to response delivery&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For example, instead of scaffolding a backend code logic just to call an embedding service, we simply configure an HTTP node in n8n. The model is specified, authentication is already handled via a predefined credential type of n8n, and the user’s input can be dragged directly into the request body. No boilerplate, no server code, just clean input/output that’s easy to visualize and test right inside the workflow.&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%2F7f2whqbtffxujd1nml8z.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%2F7f2whqbtffxujd1nml8z.png" alt="An API call node" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;p&gt;An HTTP node configured to call the embedding API with dynamic input and built-in credentials, no backend code needed&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Examples: The Bot in Action
&lt;/h2&gt;

&lt;p&gt;Here are some real examples of how the assistant is being used inside Slack:&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%2Fmslwxy1nmvz14tm2o8w9.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%2Fmslwxy1nmvz14tm2o8w9.png" alt="The Bot in Action 1" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;p&gt;Example 1: Daily standup optionality&lt;/p&gt;&lt;/em&gt;&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%2Funvh1xzsfhjqt13ndl29.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%2Funvh1xzsfhjqt13ndl29.png" alt="The Bot in Action 2" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;p&gt;Example 2: Online meeting etiquette&lt;/p&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What n8n Workflows Are (and Aren’t)
&lt;/h2&gt;

&lt;p&gt;While n8n gives us incredible speed and flexibility, it’s not a catch-all solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it shines:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automating internal workflows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Building quick prototypes or MVPs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bridging systems using APIs or webhooks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where it falls short:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;High-scale, latency-sensitive production systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scenarios needing deep observability or reliability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complex business logic with edge cases&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💡 Pro tip:&lt;/strong&gt; n8n is a jetpack for your workflow. But jetpacks aren’t built for long-haul flights. Use with context. Low-code tools are best seen as &lt;strong&gt;accelerators&lt;/strong&gt;. They don’t replace solid engineering; they amplify it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Not Just Use Notion Enterprise?
&lt;/h2&gt;

&lt;p&gt;We get this question a lot, and it’s valid. Notion’s Enterprise Search is a robust and centralized solution for finding information across a large workspace.&lt;/p&gt;

&lt;p&gt;But for our team, &lt;strong&gt;context is everything&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This assistant is scoped specifically to our internal playbook and lives directly inside Slack, the place where our team collaborates most. That means faster answers, less context-switching, and more relevance to how we actually work day to day. &lt;/p&gt;

&lt;p&gt;All in all, this small project isn’t meant to compete with or replace what Notion is building. Instead, it complements it. A lightweight solution focused on &lt;strong&gt;one high-impact use case&lt;/strong&gt;: surfacing key internal answers fast.&lt;/p&gt;

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

&lt;p&gt;This project wasn’t just about answering questions in Slack. It was about making company knowledge &lt;strong&gt;accessible&lt;/strong&gt;, &lt;strong&gt;contextual&lt;/strong&gt;, and &lt;strong&gt;usable&lt;/strong&gt;, exactly when and where people need it. By combining the right tools, Notion for content, a vector database for search, an LLM for natural answers, and n8n for orchestration, we created a simple but powerful assistant that actually gets used.&lt;/p&gt;

&lt;p&gt;So the next time someone asks, &lt;em&gt;“What’s our policy on…”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can just smile and say: &lt;em&gt;“Ask Slack.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And that’s the real win.&lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>rag</category>
      <category>slackbot</category>
      <category>n8n</category>
    </item>
    <item>
      <title>A Guide to REST API Design Best Practices</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 07 Aug 2025 04:07:16 +0000</pubDate>
      <link>https://forem.com/codelink/a-guide-to-rest-api-design-best-practices-55dk</link>
      <guid>https://forem.com/codelink/a-guide-to-rest-api-design-best-practices-55dk</guid>
      <description>&lt;p&gt;In today’s digital ecosystems, Application Programming Interfaces (APIs) are the backbone of modern software development. They enable different applications to communicate and exchange data seamlessly.&lt;/p&gt;

&lt;p&gt;Among the various API architectural styles, &lt;strong&gt;Representational State Transfer (REST) stands out for its simplicity, scalability, and statelessness&lt;/strong&gt;. However, designing REST APIs isn’t just about getting data from points A to B. It’s about creating APIs that are not only functional but also easy to use, maintain, and evolve.&lt;/p&gt;

&lt;p&gt;This guide will walk you through key REST API design best practices to help you build scalable, reliable, and developer-friendly APIs that reflect the standards we uphold at &lt;strong&gt;CodeLink&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Embrace Meaningful and Consistent Naming Conventions
&lt;/h2&gt;

&lt;p&gt;Clear and consistent naming is the first step towards a well-designed API.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use nouns to represent resources:&lt;/strong&gt; Resources are the core concept in REST. Think of Uniform Resource Identifiers (URIs) as references to objects, not actions (e.g., &lt;em&gt;/users not /getUserList&lt;/em&gt;, &lt;em&gt;/orders&lt;/em&gt; not &lt;em&gt;/getOrderList&lt;/em&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pluralize resource names:&lt;/strong&gt; Most API endpoints work with collections of data, so it’s clearer to use plural forms. For example, use &lt;em&gt;GET /users&lt;/em&gt; to retrieve a list of users, and &lt;em&gt;GET /users/{id}&lt;/em&gt; to get details for one specific user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set conventions and stick with them:&lt;/strong&gt; Whether you choose singular or plural (though plural is recommended), stick with it across your entire API. Consistency reduces confusion and makes the API more predictable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use hyphens (-) for multi-word resources:&lt;/strong&gt; When a resource name contains multiple words, use hyphens (-) to separate them for better readability in URIs. Avoid using underscores (_) or camelCase in URIs (e.g., &lt;em&gt;/product-categories&lt;/em&gt;, not &lt;em&gt;/productCategories&lt;/em&gt; or &lt;em&gt;/product_categories&lt;/em&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep URIs lowercase:&lt;/strong&gt; Ensure URIs are in lowercase to maintain consistency and avoid potential issues with case sensitivity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Leverage HTTP Methods Correctly
&lt;/h2&gt;

&lt;p&gt;HTTP methods (also knon as verbs) define the actions to be performed on resources. In RESTful APIs, using these methods with semantic precision ensures predictable behavior and clear communication.&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%2Fgvthi0rnpuyfccrge8qq.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%2Fgvthi0rnpuyfccrge8qq.png" alt="Leverage HTTP Methods Correctly" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GET: Retrieve a representation of a resource. &lt;em&gt;GET&lt;/em&gt; requests should be safe (not alter server state) and idempotent (multiple identical requests have the same effect as a single one).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;POST: Create a new resource. It's also used for actions that don't fit neatly into other methods (e.g., &lt;em&gt;/users/{id}/send-verification-email&lt;/em&gt;). &lt;em&gt;POST&lt;/em&gt; requests are not idempotent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PUT: Update an existing resource entirely. If the resource doesn't exist, &lt;em&gt;PUT&lt;/em&gt; can create it. &lt;em&gt;PUT&lt;/em&gt; requests are idempotent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PATCH: Partially update an existing resource. &lt;em&gt;PATCH&lt;/em&gt; is ideal when you only need to modify a few fields of a resource. &lt;em&gt;PATCH&lt;/em&gt; requests are not necessarily idempotent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DELETE: Remove a resource. &lt;em&gt;DELETE&lt;/em&gt; requests are idempotent.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grasping the concepts of idempotency and safety for these methods is crucial to prevent unexpected behaviors.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Utilize HTTP Status Codes Effectively
&lt;/h2&gt;

&lt;p&gt;HTTP status codes give clients clear feedback about what happened and why regarding their requests. Use standard HTTP status codes appropriately.&lt;/p&gt;

&lt;h3&gt;
  
  
  🟢 2xx (Success):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;200 OK&lt;/em&gt;: Standard response for successful HTTP requests.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;201 Created&lt;/em&gt;: The request has been fulfilled, and a new resource is created. Include a Location header pointing to the new resource.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;204 No Content&lt;/em&gt;: The server successfully processed the request, but there is no content to return (often used for DELETE requests).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3xx (Redirection):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;301 Moved Permanently&lt;/em&gt;: This and all future requests should be directed to the given URI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;304 Not Modified&lt;/em&gt;: Used for caching purposes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🟡 4xx (Client Errors):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;400 Bad Request&lt;/em&gt;: The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;401 Unauthorized&lt;/em&gt;: Authentication is required and has failed or has not yet been provided.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;403 Forbidden&lt;/em&gt;: The server understood the request, but is refusing to authorize it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;404 Not Found&lt;/em&gt;: The requested resource could not be found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;405 Method Not Allowed&lt;/em&gt;: The method specified in the request is not allowed for the resource.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;429 Too Many Requests&lt;/em&gt;: The user has sent too many requests in a given amount of time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔴 5xx (Server Errors):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;500 Internal Server Error&lt;/em&gt;: A generic error message, given when an unexpected condition was encountered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;503 Service Unavailable&lt;/em&gt;: The server is currently unavailable (e.g., overloaded or down for maintenance).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provide clear and informative error messages in the response body, ideally in JSON format, to help developers troubleshoot and debug faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Prepare for Versioning
&lt;/h2&gt;

&lt;p&gt;APIs are not static. As your product evolves, your API will too, whether through adding new features, improving performance, or fixing design flaws. Versioning your API allows you to release updates without breaking existing client integrations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;URI Versioning (e.g.,&lt;/strong&gt; &lt;em&gt;&lt;strong&gt;/api/v1/users&lt;/strong&gt;&lt;/em&gt;): This method is the most commonly used. It's clear and easy to route requests to the correct version. &lt;a href="https://www.codelink.io/about-us" rel="noopener noreferrer"&gt;&lt;strong&gt;CodeLink&lt;/strong&gt;&lt;/a&gt; prefers this approach for its clarity and simplicity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Header Versioning (e.g.,&lt;/strong&gt; &lt;em&gt;&lt;strong&gt;Accept: application/vnd.myapi.v1+json&lt;/strong&gt;&lt;/em&gt;): This method makes URIs cleaner, but it may confuse developers who are used to more explicit URI versioning schemes. This approach is better suited for internal or closely coupled APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Query Parameter Versioning (e.g.,&lt;/strong&gt; &lt;em&gt;&lt;strong&gt;/users?version=1&lt;/strong&gt;&lt;/em&gt;): While it can be beneficial in some instances, it might clutter URIs and sometimes be more complicated to manage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whatever strategy you choose, apply it consistently and document it clearly. A well-defined versioning approach ensures long-term API maintainability.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Support Filtering, Sorting, and Pagination
&lt;/h2&gt;

&lt;p&gt;When your API returns collections of data, giving clients control over what and how they receive enhances both performance and usability. By providing mechanisms to filter, sort, and paginate, clients can retrieve exactly the data they need, reduce server load, and improve response times.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filtering
&lt;/h3&gt;

&lt;p&gt;Allow clients to filter results based on specific criteria (e.g., G_ET /products? category=electronics&amp;amp;status=available_).&lt;/p&gt;

&lt;h3&gt;
  
  
  Sorting
&lt;/h3&gt;

&lt;p&gt;Enable clients to define the order in which results are returned (e.g., &lt;em&gt;GET /users?sort=-createdAt&lt;/em&gt; for descending order by creation date).&lt;/p&gt;

&lt;h3&gt;
  
  
  Pagination
&lt;/h3&gt;

&lt;p&gt;For large datasets, return results in chunks (pages) rather than all at once. Standard methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Limit/Offset:&lt;/strong&gt; (retrieve 20 products starting from the 41st).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cursor-based:&lt;/strong&gt; Uses a pointer to the last item in the previous set, often more performant for huge datasets (e.g., &lt;em&gt;GET /products?page-size=20&amp;amp;cursor=abcdef&lt;/em&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implementing these features thoughtfully will enhances the client experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Design for Statelessness
&lt;/h2&gt;

&lt;p&gt;Each client request to the server must contain all necessary information to understand and process it. The server should not store any client context between requests. This approach, called statelessness, improves scalability, reliability, and visibility. Authentication tokens are typically sent with each request to maintain session identity without server-side session storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Secure Your API
&lt;/h2&gt;

&lt;p&gt;Security is a must. Shield your API from unauthorized access and malicious threats.&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%2Fu97g7otpv1ed2hczwveg.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%2Fu97g7otpv1ed2hczwveg.png" alt="Secure Your API" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use HTTPS (TLS/SSL):&lt;/strong&gt; Always encrypt communication between clients and your API to protect data in transit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Implement Robust Authentication:&lt;/strong&gt; Use standard authentication mechanisms like OAuth 2.0 or OpenID Connect. Avoid rolling your own authentication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enforce Authorization:&lt;/strong&gt; Ensure that authenticated users only have access to the resources and operations they are permitted to use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Input Validation:&lt;/strong&gt; Validate all incoming data to prevent common vulnerabilities, such as SQL injection or Cross-Site Scripting (XSS).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rate Limiting:&lt;/strong&gt; Protect your API from abuse and ensure fair usage by implementing rate limits.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prioritizing security from the start helps prevent breaches, protects user data, and builds long-term trust with your API users.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Provide Clear and Comprehensive Documentation
&lt;/h2&gt;

&lt;p&gt;Your API is only as good as its documentation. Well-documented APIs help developers understand and integrate easily.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use a Standard Format:&lt;/strong&gt; Tools like &lt;a href="https://openai.com/" rel="noopener noreferrer"&gt;OpenAPI&lt;/a&gt; (formerly Swagger) help you define and document your API in a machine-readable and human-readable format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Include:&lt;/strong&gt; Authentication instructions. Detailed descriptions of each endpoint, including URI, HTTP method, request parameters, and example requests/responses. Explanation of error codes and messages. Information on rate limiting and versioning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep it Up-to-Date:&lt;/strong&gt; Documentation should be updated alongside your API to reflect changes accurately.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clear, consistent, and up-to-date documentation reduces support overhead and accelerates adoption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partnering with CodeLink for API Excellence
&lt;/h2&gt;

&lt;p&gt;Designing high-quality REST APIs is an art that blends technical expertise with a focus on the developer experience. By following these best practices, you can create APIs that are not only powerful and scalable but also a pleasure for developers to work with.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;At CodeLink, we are dedicated to helping businesses design, develop, and deploy APIs that drive innovation, streamline processes, and unlock new revenue streams.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you're looking for a partner to help design or optimize your API strategy, we’re here to help.&lt;/em&gt; &lt;a href="https://www.codelink.io/book-discovery-call" rel="noopener noreferrer"&gt;&lt;em&gt;Let’s connect&lt;/em&gt;&lt;/a&gt;&lt;em&gt;!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>rest</category>
      <category>restapi</category>
    </item>
    <item>
      <title>The Cost of Choosing the Wrong Tech Stack – A Lesson from a Tech Lead</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 31 Jul 2025 10:58:04 +0000</pubDate>
      <link>https://forem.com/codelink/the-cost-of-choosing-the-wrong-tech-stack-a-lesson-from-a-tech-lead-563</link>
      <guid>https://forem.com/codelink/the-cost-of-choosing-the-wrong-tech-stack-a-lesson-from-a-tech-lead-563</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Perfect Architecture Trap:&lt;/strong&gt; A fintech startup chose a complex tech stack for perceived performance benefits but crashed from 40 to 20 story points velocity because the architecture was overly complex for their actual needs and team capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Root Causes:&lt;/strong&gt; Choosing unfamiliar technologies without team expertise while implementing microservices architecture created operational chaos that solved tomorrow's scalability problems while creating today's velocity problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; Refactored to a simpler architecture aligned with team strengths, resulting in 60% velocity improvement, simplified operations, and restored team morale within 6 weeks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key Lesson:&lt;/strong&gt; Team expertise trumps technology hype - validate with proof-of-concepts first, match complexity to organizational maturity, and optimize real bottlenecks (not theoretical ones) while being transparent with stakeholders about technical decisions' business impact.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The "Perfect" Architecture
&lt;/h2&gt;

&lt;p&gt;In early 2021, I worked at a fintech startup where we faced an exciting challenge: building a fintech application from scratch. We designed what seemed like the ideal system – microservices with domain-driven design, powered by Go. Our reasoning seemed sound:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance First:&lt;/strong&gt; Fintech demanded speed for handling thousands of requests so we chose Go for its fast runtime.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microservices for Scale:&lt;/strong&gt; Each service had its own database to eliminate bottlenecks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Domain-Driven Design:&lt;/strong&gt; Complex business rules needed clean abstractions and extensive testing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what we should have done first: built a two-week proof of concept with a single critical user journey. Instead, we launched into full development with confidence. Two months later, we were drowning.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Reality Hits
&lt;/h2&gt;

&lt;p&gt;Our sprint velocity crashed from 40 story points to barely 20. Features that should have taken 6-9 story points were consistently taking 12-15 points. What went wrong?&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%2Fy6aelwhjzhpxxc6vdh98.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%2Fy6aelwhjzhpxxc6vdh98.png" alt="The Mistakes &amp;amp; Impact" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Go Language Trap
&lt;/h3&gt;

&lt;p&gt;The biggest red flag I missed: we had JavaScript veterans but no Go experts, yet we chose Go anyway. This should have been a hard stop.&lt;/p&gt;

&lt;p&gt;Go in 2021 was deceptively simple – too simple for complex domain logic. Without generics (which didn't arrive until Go 1.18), we found ourselves writing repetitive boilerplate code. The multiple layers of DTOs – from controller to application service to domain model and back became a nightmare of manual mapping. Every small change rippled through endless conversion functions.&lt;/p&gt;

&lt;p&gt;Any experienced Go developer would have warned us about the boilerplate hell for complex domain models. We were learning a new language while trying to implement complex patterns – a recipe for disaster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microservices Without Operational Maturity
&lt;/h3&gt;

&lt;p&gt;Our 10 microservices seemed elegant in theory, but created operational chaos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;10 Databases, 10 Migration Scripts:&lt;/strong&gt; that consumed enormous developer time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transaction Nightmares:&lt;/strong&gt; How do you maintain data consistency across 10 different databases? We built custom middleware to track transaction states and handle rollbacks – a massive engineering effort that added months to every feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communication Complexity:&lt;/strong&gt; Services needed both synchronous (gRPC) and asynchronous (message queues) communication, requiring extensive boilerplate and making testing incredibly difficult.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We were solving tomorrow's scalability problems while creating today's velocity problems. The classic rule is "start with a modular monolith, extract services when you have real pain points." We did the opposite.&lt;/p&gt;

&lt;p&gt;Not to mention that "thousands of requests" for a pre-investment fintech startup was pure over-engineering. We were building for Netflix scale when we needed to focus on getting our first 100 users. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Hidden Costs of Wrong Decisions
&lt;/h3&gt;

&lt;p&gt;Every architectural decision multiplied our complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Testing a single transaction across multiple services became an integration nightmare&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging issues required tracing through multiple service logs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simple changes required coordinating deployments across multiple services&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the technical pain wasn’t the worst of it. &lt;strong&gt;The people cost was higher:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Onboarding new developers took weeks just to grasp how services interacted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Knowledge became siloed, code reviews slowed down, and team morale dropped&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Senior developers were spending days on tasks that should have taken hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One team member told me bluntly: &lt;em&gt;"I feel like I'm fighting the language instead of solving problems."&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Asking Better Questions (And Having Hard Conversations)
&lt;/h2&gt;

&lt;p&gt;When sprint velocity halves, that should trigger immediate investigation – not months of struggle. I should have called a technical spike after the first month.&lt;/p&gt;

&lt;p&gt;We stepped back and asked fundamental questions that we should have started with:&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%2Fq60e5eirsd9xui4bxsjc.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%2Fq60e5eirsd9xui4bxsjc.png" alt="Questions We Should Have Asked" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hardest conversation was admitting to stakeholders that our "modern, scalable" architecture was actually slowing us down. I had to explain that we needed to invest a full month in refactoring to hit our roadmap targets. I framed it as &lt;em&gt;risk mitigation&lt;/em&gt;: continue struggling and miss our investor milestones, or invest now to ensure consistent delivery for the next six months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real lesson:&lt;/strong&gt; I should have handled the sunk cost fallacy head-on. The architecture was fundamentally wrong, and trying to "fix" it would have been throwing good money after bad.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution of Strategic Simplification
&lt;/h2&gt;

&lt;p&gt;We made the hard decision to &lt;strong&gt;refactor to a Node.js monolith using NestJS&lt;/strong&gt; but this time, we built incrementally:&lt;/p&gt;

&lt;h3&gt;
  
  
  Team Expertise Alignment
&lt;/h3&gt;

&lt;p&gt;Leveraging our JavaScript experience eliminated the learning curve, letting us focus on business logic instead of language quirks. This wasn't just about technical efficiency. it was about team morale and confidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Modular Monolith Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Single Database:&lt;/strong&gt; Transactions became simple again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clear Domain Boundaries:&lt;/strong&gt; We kept domain separation for potential future microservices migration, but without the operational overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduced DTOs:&lt;/strong&gt; JavaScript's native JSON handling eliminated layers of conversion code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplified Testing:&lt;/strong&gt; Unit and integration tests became straightforward.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance Strategy
&lt;/h3&gt;

&lt;p&gt;Instead of distributed complexity, we focused on proven database optimization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Intelligent caching strategies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proper indexing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connection pooling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Query optimization&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We could always add sharding later if needed, then we'd solve actual performance problems, not theoretical ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Incremental Validation
&lt;/h3&gt;

&lt;p&gt;This time, we built and deployed core features every week, just enough to test assumptions and get feedback quickly. This allowed us to validate each architectural decision with real usage data instead of theoretical discussions.&lt;/p&gt;

&lt;p&gt;Small, tangible wins replaced uncertainty, helping us make smarter choices with less risk and more clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Positive Results
&lt;/h2&gt;

&lt;p&gt;The change was transformative. Six weeks after the refactor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;60% Velocity Improvement:&lt;/strong&gt; Features that once took 12-15 story points were now consistently delivered in 6-8 points.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplified Testing:&lt;/strong&gt; Integration tests that were once nearly impossible became a routine part of our workflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer Happiness:&lt;/strong&gt; The mood shifted entirely. The team was energized and excited to be building products again, not fighting tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stakeholder Confidence:&lt;/strong&gt; We delivered our next investor milestone two weeks ahead of schedule.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Lessons for Tech Stack Selection
&lt;/h2&gt;

&lt;p&gt;This experience taught me invaluable lessons that I now apply to every project at &lt;a href="https://www.codelink.io/" rel="noopener noreferrer"&gt;CodeLink&lt;/a&gt;.&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%2Fp882witlz1bqvt4vsyjl.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%2Fp882witlz1bqvt4vsyjl.png" alt="Key Lessons for Tech Stack Selection" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Validate Before You Build
&lt;/h3&gt;

&lt;p&gt;Never design an entire architecture in meetings. Build a two-week proof of concept (PoC) that focuses on a single, critical user journey. Every system sounds elegant in a slide deck. The only real test is whether it works under real conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; If your proposed stack makes easy things hard, it will make hard things impossible.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Team Expertise Trumps Technology Hype
&lt;/h3&gt;

&lt;p&gt;Your team's existing skills matter more than the latest trends. A "worse" technology that your team has mastered will outperform a "better" technology they struggle with.&lt;/p&gt;

&lt;p&gt;We chose Go without any Go expertise, and paid for it with slow progress and burned-out developers. &lt;strong&gt;As a technical leader, your job is to set your team up for success, not to implement the most impressive architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Match Complexity to Organizational Maturity
&lt;/h3&gt;

&lt;p&gt;Microservices solve real problems at scale and with mature teams. Startups need velocity, not distributed systems complexity. Build for your current reality, not your imagined future.&lt;br&gt;
Start with a modular monolith. Extract services when you have real pain points, not theoretical ones. Complexity is a tax, don’t pay it early. &lt;/p&gt;

&lt;h3&gt;
  
  
  4. Identify Your Real Bottlenecks
&lt;/h3&gt;

&lt;p&gt;We assumed our bottleneck was application performance when it was actually &lt;strong&gt;database queries&lt;/strong&gt; and &lt;strong&gt;developer productivity&lt;/strong&gt;. Optimize the constraints that matter.&lt;/p&gt;

&lt;p&gt;When velocity drops significantly, stop and investigate immediately. Don't let teams struggle for months. Treat it as the emergency it is.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Consider Total Cost of Ownership
&lt;/h3&gt;

&lt;p&gt;Every tech choice comes with a hidden price tag – some visible, some not. When evaluating technologies, go beyond performance and features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Learning curve and hiring difficulty&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintenance burden and update frequency&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testing and debugging complexity&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Long-term scalability (both technical and organizational)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Team morale and productivity impact&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Translate Technical to Business Terms For Stakeholders
&lt;/h3&gt;

&lt;p&gt;When technical choices go wrong, your response matters more than the original mistake. &lt;/p&gt;

&lt;p&gt;Stakeholders may not understand technical debt, but they understand risk, delays, and missed milestones. Be transparent about problems, frame technical debt in business impact terms, and provide clear success metrics for solutions.&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%2Fjtsmaw03qw7tkpg6f3he.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%2Fjtsmaw03qw7tkpg6f3he.png" alt="Translate Technical to Business Terms For Stakeholders" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Handle the sunk cost fallacy head-on. Sometimes the best decision is admitting the fault in the architecture and starting over.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MCP Under the Hood</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Tue, 29 Jul 2025 14:35:26 +0000</pubDate>
      <link>https://forem.com/codelink/mcp-under-the-hood-46no</link>
      <guid>https://forem.com/codelink/mcp-under-the-hood-46no</guid>
      <description>&lt;p&gt;If you have been following AI development, you have probably heard about Model Context Protocol, or MCP for short. It is a simple protocol that empowers LLMs and extends their capabilities.&lt;/p&gt;

&lt;p&gt;This article uses a simple real-time query example to show how MCP works under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-time query example
&lt;/h2&gt;

&lt;p&gt;We implement a weather MCP server that allows users to query real-time weather conditions from any location using the Claude Desktop App.&lt;/p&gt;

&lt;p&gt;LLMs are incapable of querying real-time data, so if you ask it “Current weather in NYC?”, without MCP (and web search turned off), it’ll return something like this:&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%2F6ntguavgl6tnirr7yvx3.webp" 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%2F6ntguavgl6tnirr7yvx3.webp" alt="Real time query example 1" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And with MCP, it can now answer the query by leveraging tools:&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%2F043x4uf0n3lr5n5h6lsm.webp" 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%2F043x4uf0n3lr5n5h6lsm.webp" alt="Real time query example 2" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;From a high level, there are several components:&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%2Fzilb3o5t3l49onh7tlgb.webp" 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%2Fzilb3o5t3l49onh7tlgb.webp" alt="How MCP works" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to note that in this example, the MCP Client and MCP Server both exist locally on the user's desktop. The Desktop Claude App is the MCP Client host, meaning that the MCP Client exists inside the app.&lt;/p&gt;

&lt;p&gt;The MCP Server provides two tools to return real-time information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_alerts&lt;/code&gt;: Get weather alerts for a US state. It requires an argument,state - a two-letter US state code (e.g., CA, NY)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_forecast&lt;/code&gt;: Get weather forecast for a location. It requires 2 arguments, &lt;code&gt;latitude&lt;/code&gt; - latitude of the location, and &lt;code&gt;longitude&lt;/code&gt; - longitude of the location.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each tool, the MCP makes a call to its respective Weather API endpoint, which are just normal HTTP endpoints at &lt;a href="https://api.weather.gov" rel="noopener noreferrer"&gt;https://api.weather.gov&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Under the hood, several steps are going on:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Claude Desktop gets a list of available tools, in this case, &lt;code&gt;get_alerts&lt;/code&gt; and &lt;code&gt;get_forecast&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude Desktop sends the user query to Claude LLM&lt;/li&gt;
&lt;li&gt;Claude LLM analyzes the available tools and decides which ones to use&lt;/li&gt;
&lt;li&gt;The Claude Desktop executes the chosen tools through the MCP server&lt;/li&gt;
&lt;li&gt;Weather API returns the real-time information&lt;/li&gt;
&lt;li&gt;The results are sent back to Claude LLM&lt;/li&gt;
&lt;li&gt;Claude LLM formulates a natural language response and Claude Desktop displays the final answer&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A deeper view
&lt;/h2&gt;

&lt;p&gt;To understand how all these components coordinate, we'll use a request diagram. Please note that it has already been simplified to omit some protocol details.&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%2F3wsd8zzkvm2dalmuefse.webp" 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%2F3wsd8zzkvm2dalmuefse.webp" alt="MCP steps" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The MCP Client gets a list of available tools from MCP Server
&lt;/h2&gt;

&lt;p&gt;The MCP Client establishes a connection to the Server and retrieves available tools. These tools are stored in the session and are structured as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
    {
        'name': 'get_alerts',
        'description': 'Get weather alerts for a US state.', 
        'input_schema': {
            'properties': {
                'state': {'title': 'State', 'type': 'string'}
            }, 
            'required': ['state'], 
            'title': 'get_alertsArguments', 'type': 'object'}
    },
    {
        'name': 'get_forecast', 
        'description': 'Get weather forecast for a location',
        'input_schema': {
            'properties': {
                'latitude': {'title': 'Latitude', 'type': 'number'},
                'longitude': {'title': 'Longitude', 'type': 'number'}
            }, 
            'required': ['latitude', 'longitude'],
            'title': 'get_forecastArguments', 'type': 'object'
        }
    }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All information, such as tool name, description, and arguments, is defined on the server side. The MCP Server Python code looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@mcp.tool()
async def get_alerts(state: str) -&amp;gt; str:
    """Get weather alerts for a US state.
    Args:
            state: Two-letter US state code (e.g. CA, NY)
    """
    # Implementation...

@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -&amp;gt; str:
    """Get weather forecast for a location.
    Args:
        latitude: Latitude of the location
        longitude: Longitude of the location
    """
    # Implementation...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Claude Desktop sends your question to Claude LLM
&lt;/h2&gt;

&lt;p&gt;Tool calling is actually supported by Claude LLM and isn't a new feature introduced by MCP. According to the official Claude LLM documentation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you include &lt;code&gt;tools&lt;/code&gt; in your API request, the model may return &lt;code&gt;tool_use&lt;/code&gt; content blocks that represent the model's use of those tools. You can then run those tools using the tool input generated by the model and then optionally return results back to the model using &lt;code&gt;tool_result&lt;/code&gt; content blocks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The exact tool structure above will be added to the query to Claude LLM. Example code in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.anthropic.messages.create(
        model="claude-3-5-sonnet-20241022",
    max_tokens=1000,
    messages=[{'role': 'user', 'content': 'Current weather in NYC?'}],
    tools=... # tools defined as above
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Claude LLM analyzes the available tools and decides which ones to use
&lt;/h2&gt;

&lt;p&gt;With the provided tools, the LLM determines which one is appropriate for the user's query. In this example, it recognizes that for the query "Current weather in NYC?" it needs to call &lt;code&gt;get_forecast&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Since this tool requires two parameters: &lt;code&gt;latitude&lt;/code&gt; and &lt;code&gt;longitude&lt;/code&gt;, the LLM understands that it needs to provide the coordinates for NYC, which it already knows from its training data.&lt;/p&gt;

&lt;p&gt;The LLM will respond with something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TextBlock(citations=None, text="Let me get the weather forecast for New York City. I'll use approximate coordinates for Manhattan.", type='text')

ToolUseBlock(id='toolu_***', input={'latitude': 40.7128, 'longitude': -74.006}, name='get_forecast', type='tool_use')], model='claude-3-5-sonnet-20241022', role='assistant', stop_reason='tool_use', stop_sequence=None, type='message', usage=Usage(...))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: The Claude Desktop executes the chosen tools through the MCP server
&lt;/h2&gt;

&lt;p&gt;The Claude Desktop app will then utilize the protocol to query the weather API. The request will go through the Claude Desktop App, MCP Client, and MCP Server due to the protocol design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Weather API returns the real-time information
&lt;/h2&gt;

&lt;p&gt;The response from Weather API will be returned in reverse order, first to MCP Server, then MCP Client and finally to Claude Desktop App. The payload looks similar to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This Afternoon:
Temperature: 72°F
Wind: 9 mph S
Forecast: A chance of rain showers. Partly sunny. High near 72, with temperatures falling to around 68 in the afternoon. South wind around 9 mph. Chance of precipitation is 30%.

---

Tonight:
Temperature: 62°F
Wind: 6 to 9 mph SE
Forecast: A chance of rain showers before 11pm, then showers and thunderstorms. Cloudy. Low around 62, with temperatures rising to around 64 overnight. Southeast wind 6 to 9 mph. Chance of precipitation is 100%. New rainfall amounts between 1 and 2 inches possible.

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: The results are sent back to Claude LLM
&lt;/h2&gt;

&lt;p&gt;Claude Desktop App will send the original query "Current weather in NYC?" along with the weather forecast payload from Step 5 to Claude LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Claude LLM formulates a natural language response, and Claude Desktop displays the final answer
&lt;/h2&gt;

&lt;p&gt;Claude LLM formulates a natural language response, and Claude Desktop displays the final answer. Based on the forecast data provided, the LLM creates a friendly response, which is then displayed on the Desktop App:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here's the current weather for NYC:
This Afternoon: 72°F with partly sunny skies and a 30% chance of rain showers. South winds around 9 mph.
Tonight: Expect significant weather changes with showers and thunderstorms developing (100% chance), temperatures around 62°F, and 1-2 inches of rainfall possible.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's the whole flow of this simple example! As you can see, it is a mechanism that standardizes and simplifies how the LLM works with external tools or resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is MCP needed?
&lt;/h2&gt;

&lt;p&gt;MCP is so simple that you almost don't need one to orchestrate tool calling. However, it helps standardize resources, and the community has quickly developed many useful MCP servers. There are literally hundreds of them ready for use, such as GitHub, Jira, Slack, Cloudflare, Blender, etc., and the list keeps growing. You can simply add these to your Claude Desktop App or any host (like an IDE or chat client) to extend its capabilities!&lt;/p&gt;

&lt;p&gt;Besides the tools or functions used in this simple example, MCP also supports other capabilities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Resources&lt;/strong&gt;: File-like data that can be read by clients (like API responses or file contents)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: Functions that can be called by the LLM (with user approval)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompts&lt;/strong&gt;: Pre-written templates that help users accomplish specific tasks&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;The MCP ecosystem is quite new, but there's definitely a lot of excitement surrounding it. It will mature further as developers rush to build innovative applications with it.&lt;/p&gt;

&lt;p&gt;While MCP significantly enhances AI capabilities, it also brings a new wave of security threats, which we have already addressed in another article.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Decide if Your Product Needs AI (or If You’re Just Chasing Trends)</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 24 Jul 2025 14:00:00 +0000</pubDate>
      <link>https://forem.com/codelink/how-to-decide-if-your-product-needs-ai-or-if-youre-just-chasing-trends-n0h</link>
      <guid>https://forem.com/codelink/how-to-decide-if-your-product-needs-ai-or-if-youre-just-chasing-trends-n0h</guid>
      <description>&lt;p&gt;In the current technology landscape, "AI-powered" is often treated as a definitive badge of innovation. Investors are drawn to it. Customers expect it. And businesses everywhere are scrambling to ride the hype.&lt;/p&gt;

&lt;p&gt;However, the strategic application of AI is a matter of precision, not trends. Adding AI "just because" can drain budget, burn out teams, and dilute everyone’s focus on the real goals. The critical question is not &lt;em&gt;if&lt;/em&gt; you can use AI, but &lt;em&gt;why&lt;/em&gt; you should. &lt;/p&gt;

&lt;p&gt;Below is a step-by-step guide that’s designed to help you decide with clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Performing a "Yes" or "No" Test for AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcachuntsss7a8nlw5nf1.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%2Fcachuntsss7a8nlw5nf1.png" alt="AI Strengths" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI excels in tasks that require cognitive-level processing. To determine if it’s the right fit, diagnose your own situation with a foundational question: &lt;strong&gt;Is there an intellectual process I’m trying to automate?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your answer is &lt;strong&gt;no&lt;/strong&gt;, and the task can be solved with basic logic or standard control flows, an AI model is unnecessary. Simple rule-based systems are faster, cheaper, and more reliable in those cases. For example, a system that sorts support tickets based on keywords is a clear-cut task for a simple rules engine.&lt;/p&gt;

&lt;p&gt;But if your answer is &lt;strong&gt;yes&lt;/strong&gt;, go deeper: &lt;strong&gt;Can the process be clearly defined with a fixed set of rules?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you can manually write down all the rules—even if the list is long—doing so will give you more stable and consistent results than an AI model. If not, and the process involves nuance, uncertainty, or too many edge cases to list, &lt;strong&gt;that’s when AI makes sense&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Spot the Signs of a Trend-Driven AI Strategy
&lt;/h2&gt;

&lt;p&gt;Before moving forward, it's critical to gut-check your motives. Purposeful application is what separates a powerful AI feature from "AI theater." Here are the common signs that your team is chasing trends rather than value:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI for marketing, not function:&lt;/strong&gt; Are you adding the label just for the sound of it? While it might attract initial clicks, products risk damaging trust when users find there’s no real substance behind the claim.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The human replacement myth:&lt;/strong&gt; AI is a powerful assistant, not a replacement for experts. Your team’s domain knowledge is what keeps an AI model relevant and sharp. Without human feedback, its quality will inevitably degrade.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vague goals:&lt;/strong&gt; An appeal to "improve our product with AI" is not a strategy. If you can't clearly state the problem you're solving and how to measure success, AI won't magically find the answer for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lack of technical understanding:&lt;/strong&gt; Effective AI solutions demand strong engineering and mathematical expertise. Without this, expect models that are probably inefficient, brittle, or incapable of scaling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Insufficient or low-quality data:&lt;/strong&gt; An AI model is a direct reflection of its training data. Without large, relevant, and well-labeled datasets, the model cannot learn or generate meaningful outcomes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ignoring data privacy and security:&lt;/strong&gt; Handling user data is a huge responsibility. A plan for data privacy and security isn't an afterthought; it must be a core part of your AI development from day one.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Being able to spot these signs is the key to separating a valuable feature from a costly distraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: A 5-Step AI Evaluation Framework
&lt;/h2&gt;

&lt;p&gt;Once you've confirmed you have a valid use case and are proceeding for the right reasons, this deliberate framework helps ensure your potential AI feature is strategically sound before you invest deeply. Ready to evaluate a potential AI feature?&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%2Facjosvc7d7ce36f2n775.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%2Facjosvc7d7ce36f2n775.png" alt="AI Evaluation Framework" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Introduce AI expertise to your team:&lt;/strong&gt; Before starting a journey into new territory, you bring an expert guide. Do the same here. Work with experienced AI strategists who can help define the path clearly and understand what's actually feasible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Find the "aha!" moment:&lt;/strong&gt; Where could AI create a genuine "aha!" moment for your users? Pinpoint specific opportunities where it could deliver measurable value, whether through smart automation, deep personalization, or better security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frame the problem clearly:&lt;/strong&gt; Every successful project starts with a clear mission. For AI, that means defining: &lt;strong&gt;Input&lt;/strong&gt; - What data will the system receive?; &lt;strong&gt;Output&lt;/strong&gt; - What result should it generate?; &lt;strong&gt;Success&lt;/strong&gt; -  What does “good performance” look like?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gather data and domain knowledge:&lt;/strong&gt; Collect the right data, then pair it with human wisdom. Your domain experts are the ones who understand the user needs and tricky edge cases that will make an AI solution truly effective.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Develop and iterate together:&lt;/strong&gt; Great AI isn't a one-time setup. It needs to be tested, refined, and improved with a constant feedback loop between your engineers, product owners, and experts. It must be woven into your product, not just bolted onto the side like a forgotten plugin.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts: AI is a Tool, Not a Goal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ultimately, AI is not the goal. It’s a powerful tool for solving the right kinds of problems. True advancement comes from asking the right questions, framing the problem with clarity, and making strategic investments in expertise and data.&lt;/p&gt;

&lt;p&gt;The bottom line will always be this: &lt;strong&gt;AI should serve your product, not distract from it&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;💡 Need Help Deciding If Your Product Needs AI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At CodeLink, our product and AI experts help teams distinguish between real value and industry hype. We partner with startups and enterprises to identify and build smart, practical applications of AI that drive meaningful results. Let's talk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codelink.io/" rel="noopener noreferrer"&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%2Fbt05h3k1gip9fdr8h2f8.png" alt="Talk to our team CTA" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>product</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>From LLM to AI Agent: What’s the Real Journey Behind AI System Development?</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Tue, 22 Apr 2025 08:08:35 +0000</pubDate>
      <link>https://forem.com/codelink/from-llm-to-ai-agent-whats-the-real-journey-behind-ai-system-development-2144</link>
      <guid>https://forem.com/codelink/from-llm-to-ai-agent-whats-the-real-journey-behind-ai-system-development-2144</guid>
      <description>&lt;p&gt;&lt;strong&gt;AI agents are a hot topic, but not every AI system needs to be one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While agents promise autonomy and decision-making power, simpler &amp;amp; more cost-saving solutions better serve many real-world use cases. The key lies in choosing the right architecture for the problem at hand.&lt;/p&gt;

&lt;p&gt;In this post, we'll explore recent developments in Large Language Models (LLMs) and discuss key concepts of AI systems.&lt;/p&gt;

&lt;p&gt;We've worked with LLMs across projects of varying complexity, from zero-shot prompting to chain-of-thought reasoning, from RAG-based architectures to sophisticated workflows and autonomous agents.&lt;/p&gt;

&lt;p&gt;This is an emerging field with evolving terminology. The boundaries between different concepts are still being defined, and classifications remain fluid. As the field progresses, new frameworks and practices emerge to build more reliable AI systems.&lt;/p&gt;

&lt;p&gt;To demonstrate these different systems, we'll walk through a familiar use case – a resume-screening application – to reveal the unexpected leaps in capability (and complexity) at each level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pure LLM
&lt;/h2&gt;

&lt;p&gt;A pure LLM is essentially a lossy compression of the internet, a snapshot of knowledge from its training data. It excels at tasks involving this stored knowledge: summarizing novels, writing essays about global warming, explaining special relativity to a 5-year-old, or composing haikus.&lt;/p&gt;

&lt;p&gt;However, without additional capabilities, an LLM cannot provide real-time information like the current temperature in NYC. This distinguishes pure LLMs from chat applications like ChatGPT, which enhance their core LLM with real-time search and additional tools.&lt;/p&gt;

&lt;p&gt;That said, not all enhancements require external context. There are several prompting techniques, including in-context learning and few-shot learning that help LLMs tackle specific problems without the need of context retrieval.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;To check if a resume is a good fit for a job description, an LLM with one-shot prompting and in-context learning can be utilized to classify it as Passed or Failed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3r4cj0za5ejkgawnf8p.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%2Fw3r4cj0za5ejkgawnf8p.png" alt="AI System Development - Pure LLM Workflow" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  RAG (Retrieval Augmented Generation)
&lt;/h2&gt;

&lt;p&gt;Retrieval methods enhance LLMs by providing relevant context, making them more current, precise, and practical. You can grant LLMs access to internal data for processing and manipulation. This context allows the LLM to extract information, create summaries, and generate responses. RAG can also incorporate real-time information through the latest data retrieval.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;The resume screening application can be improved by retrieving internal company data, such as engineering playbooks, policies, and past resumes, to enrich the context and make better classification decisions.&lt;/li&gt;
&lt;li&gt;Retrieval typically employs tools like vectorization, vector databases, and semantic search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvc5dexjuhd950mqdfem.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%2Fpvc5dexjuhd950mqdfem.png" alt="AI System Development - RAG Workflow" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool Use &amp;amp; AI Workflow
&lt;/h2&gt;

&lt;p&gt;LLMs can automate business processes by following well-defined paths. They're most effective for consistent, well-structured tasks.&lt;/p&gt;

&lt;p&gt;Tool use enables workflow automation. By connecting to APIs, whether for calculators, calendars, email services, or search engines, LLMs can leverage reliable external utilities instead of relying on their internal, non-deterministic capabilities.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;An AI workflow can connect to the hiring portal to fetch resumes and job descriptions → Evaluate qualifications based on experience, education, and skills → Send appropriate email responses (rejection or interview invitation).&lt;/li&gt;
&lt;li&gt;For this resume scanning workflow, the LLM requires access to the database, email API, and calendar API. It follows predefined steps to automate the process programmatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6ccts1bu3ebjhldj7wv.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%2Fk6ccts1bu3ebjhldj7wv.png" alt="AI System Development - Tool Use &amp;amp; AI Workflow" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Agent
&lt;/h2&gt;

&lt;p&gt;AI Agents are systems that reason and make decisions independently. They break down tasks into steps, use external tools as needed, evaluate results, and determine the following actions: whether to store results, request human input, or proceed to the next step.&lt;/p&gt;

&lt;p&gt;This represents another layer of abstraction above tool use &amp;amp; AI workflow, automating both planning and decision-making.&lt;/p&gt;

&lt;p&gt;While AI workflows require explicit user triggers (like button clicks) and follow programmatically defined paths, AI Agents can initiate workflows independently and determine their sequence and combination dynamically.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;An AI Agent can manage the entire recruitment process, including parsing CVs, coordinating availability via chat or email, scheduling interviews, and handling schedule changes.&lt;/li&gt;
&lt;li&gt;This comprehensive task requires the LLM to access databases, email and calendar APIs, plus chat and notification systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup2g6heiihur4qekmtnu.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%2Fup2g6heiihur4qekmtnu.png" alt="AI System Development - AI Agent Workflow" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaway
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Not every system requires an AI agent
&lt;/h3&gt;

&lt;p&gt;Start with simple, composable patterns and add complexity as needed. For some systems, retrieval alone suffices. In our resume screening example, a straightforward workflow works well when the criteria and actions are clear. Consider an Agent approach only when greater autonomy is needed to reduce human intervention.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Focus on reliability over capability
&lt;/h3&gt;

&lt;p&gt;The non-deterministic nature of LLMs makes building dependable systems challenging. While creating proofs of concept is quick, scaling to production often reveals complications. Begin with a sandbox environment, implement consistent testing methods, and establish guardrails for reliability.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>From AI Hype to Real Value: Four Pillars of Successful Generative AI Deployment</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Tue, 18 Feb 2025 18:46:36 +0000</pubDate>
      <link>https://forem.com/codelink/from-ai-hype-to-real-value-four-pillars-of-successful-generative-ai-deployment-3cjh</link>
      <guid>https://forem.com/codelink/from-ai-hype-to-real-value-four-pillars-of-successful-generative-ai-deployment-3cjh</guid>
      <description>&lt;p&gt;&lt;em&gt;When we discuss “AI” here, we’re specifically focusing on Generative AI Deployment within enterprise environments. Generative AI (GenAI)—a form of artificial intelligence based on neural networks and a subset of machine learning—goes beyond traditional models. While conventional machine-learning models often excel at classification or regression tasks, generative AI models create new content—text, images, code—based on learned patterns. This ability to “generate” new data brings unique opportunities and risks, making Generative AI Deployment a critical strategy for modern businesses.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In this article, we explore practical steps and four key pillars for Generative AI Deployment using the corporation’s own data to drive real value. By integrating a robust data strategy, skilled talent, clear application plans, and proactive risk management, you can transition from AI hype to tangible business success.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Approaches to Leveraging Generative AI in Corporate Environments
&lt;/h2&gt;

&lt;p&gt;Broadly, there are two ways organizations might leverage GenAI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Off-the-shelf Tools: Using ready-made AI models “as is” (for example, ChatGPT) without deep customization.&lt;/li&gt;
&lt;li&gt;Customized Enterprise Applications: Integrating an AI model with a company’s internal, proprietary data and processes, tailoring it to meet unique business needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this piece, we focus on the second scenario. We explore practical steps for deploying GenAI models on corporate data to create real value and mitigate risk. Some of today’s most popular GenAI models include OpenAI’s GPT-4, Anthropic’s Claude, Google’s Gemini, and Meta’s LLaMA 2.&lt;/p&gt;

&lt;p&gt;In today’s fast-paced market, many companies feel pressured to integrate AI or risk falling behind. Yet, according to a &lt;a href="https://www2.deloitte.com/content/dam/Deloitte/mx/Documents/consultoria/Q3%20StateOfGenAI_Report_Wave3_v6.pdf" rel="noopener noreferrer"&gt;Deloitte report&lt;/a&gt;, only about 30% of organizations ever move beyond the exploration phase. Why? It’s often not just fear of costly missteps—it’s a lack of the necessary ingredients for success. Without the right data strategy, skilled talent, clear application plans, and robust risk management, even the most promising AI initiatives can stall. This leaves many businesses uncertain and hesitant, unsure how to confidently turn ambition into tangible value.&lt;/p&gt;

&lt;p&gt;Moving forward isn’t just about keeping pace—it’s about securing a long-term advantage. As &lt;a href="https://thelavinagency.com/speakers/ajay-agrawal/" rel="noopener noreferrer"&gt;Ajay Agrawal notes&lt;/a&gt;, “Because AI technology improves with use, whoever gets ahead first will gain a sustained edge over the competition.” In other words, the sooner you start turning experimentation into execution, the more value you’ll reap as your models improve over time.&lt;/p&gt;

&lt;p&gt;This ‘flywheel effect’ means that every incremental piece of data can enhance model performance, further extending competitive advantage.&lt;/p&gt;

&lt;p&gt;Still, no one has to remain in that uncertain state. By focusing on four key areas—&lt;strong&gt;data, talent, strategy, and risk&lt;/strong&gt;—you can move from hesitation to action, from anxiety to achievement. Instead of feeling stuck in a cycle of indecision, you can begin to harness AI in ways that not only safeguard your business but also help it thrive in a competitive landscape.&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%2F0kqsvqvy7q3d7z4mgh30.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%2F0kqsvqvy7q3d7z4mgh30.png" alt="Four Pillars of Successful Generative AI Deployment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Key Pillars
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Data: The Bedrock of AI Success
&lt;/h3&gt;

&lt;p&gt;AI models are only as good as the data they rely on. Without well-structured, secure, and properly permissioned data, insights remain limited, trust erodes, and your investment may never pay off. By establishing clear data governance and quality standards, you create the stable foundation needed for AI solutions that reliably support informed decision-making.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Talent: Bridging the Skills Gap
&lt;/h3&gt;

&lt;p&gt;A shortage of specialized skills often keeps AI projects from taking off. According to a recent &lt;a href="https://www.mckinsey.com/featured-insights/mckinsey-explainers/whats-the-future-of-generative-ai-an-early-view-in-15-charts#/" rel="noopener noreferrer"&gt;McKinsey report&lt;/a&gt;, as organizations set generative AI goals, the demand for “gen AI–literate” employees grows. Businesses must attract the right talent—and offer them meaningful, fulfilling roles—to keep them engaged. Partnering with experienced firms—like &lt;a href="https://www.codelink.io/" rel="noopener noreferrer"&gt;Codelink&lt;/a&gt;, which has guided more than &lt;a href="https://drive.google.com/file/d/1AV7uz_QlO7oomcBj1WJ2FGOIV7R4YRD-/view" rel="noopener noreferrer"&gt;13 organizations&lt;/a&gt; through successful AI projects—helps bridge these gaps. With the right talent in place, you gain the confidence and capability to move from big ideas to measurable outcomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Strategy: Knowing Where (and Where Not) to Deploy AI
&lt;/h3&gt;

&lt;p&gt;GenAI excels at pattern recognition but doesn’t genuinely understand what it’s “saying.” It’s effective in familiar domains but may falter in new, complex situations that demand nuance. Zillow’s attempt to automate its homebuying function revealed the &lt;a href="https://edition.cnn.com/2021/11/09/tech/zillow-ibuying-home-zestimate/index.html" rel="noopener noreferrer"&gt;risk&lt;/a&gt; of pushing AI beyond its comfort zone. Meanwhile, Domino’s found &lt;a href="https://ir.dominos.com/news-releases/news-release-details/dominosr-and-microsoft-cook-ai-driven-innovation-alliance" rel="noopener noreferrer"&gt;success&lt;/a&gt; by using AI in straightforward, well-understood areas to streamline operations. Start where AI can enhance—rather than replace—existing strengths and scale up as trust in the technology deepens.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Risk Mitigation: Tackling Six Core Challenges Head-On
&lt;/h3&gt;

&lt;p&gt;A key component of successful Generative AI Deployment is proactive risk mitigation. When delivering custom AI solutions for our clients, we commonly encounter six major risk categories: &lt;strong&gt;Inaccuracies, Unpredictability, Bias, IP Concerns, Lack of Transparency, and Deception &amp;amp; Fraud&lt;/strong&gt;. A recent &lt;a href="https://www2.deloitte.com/us/en/insights/topics/digital-transformation/generative-ai-and-the-future-enterprise.html" rel="noopener noreferrer"&gt;Deloitte report&lt;/a&gt; urges organizations to “proceed with caution,” noting that GenAI can produce biased or factually incorrect content or draw on copyrighted material without proper authorization.&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%2Fo5g0o15ku0be6kwao59y.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%2Fo5g0o15ku0be6kwao59y.png" alt="Four Pillars of Successful Generative AI Deployment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To help mitigate these issues—both at the input stage (the prompt) and the output stage (the model’s response)—we rely on a combination of &lt;a href="https://aws.amazon.com/bedrock/guardrails/" rel="noopener noreferrer"&gt;AWS Bedrock Guardrails&lt;/a&gt;, &lt;a href="https://developers.google.com/checks/guide/ai-safety/guardrails" rel="noopener noreferrer"&gt;Google’s AI Safety Guardrails&lt;/a&gt;, and open-source frameworks like &lt;a href="https://hub.guardrailsai.com/" rel="noopener noreferrer"&gt;Guardrails-AI&lt;/a&gt;. These solutions can intercept or filter requests before the model generates a response and review the output afterward to flag or remove problematic content.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Bedrock Guardrails&lt;/strong&gt; leverages &lt;strong&gt;Automated Reasoning&lt;/strong&gt; to reduce factual errors from hallucinations while also filtering harmful content. Importantly, these filters can be adapted to align with an organization’s HR policies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails-AI&lt;/strong&gt; provides “jailbreak detection,” scanning &lt;strong&gt;input prompts&lt;/strong&gt; for attempts to override restrictions or generate disallowed content—a valuable defense against &lt;strong&gt;Deception &amp;amp; Fraud&lt;/strong&gt;. It can also monitor model outputs to identify unsafe or noncompliant language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google’s AI Safety Guardrails&lt;/strong&gt; similarly offers pre-trained policies that can review both the &lt;strong&gt;prompt&lt;/strong&gt; and the &lt;strong&gt;response&lt;/strong&gt;, blocking undesirable or unsafe text to foster safer, more transparent LLM deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While these examples illustrate some of the ways to mitigate AI-related risks, this is not an exhaustive review of every feature or functionality these tools provide. Moreover, these guardrail systems remain in preview or alpha stages, so they shouldn’t be viewed as infallible or the ultimate failsafe. To further minimize risk, it’s imperative to keep &lt;strong&gt;humans in the loop&lt;/strong&gt;: human oversight can catch issues that automated tools miss. Additionally, “red teaming”—stress-testing models with challenging or adversarial prompts—is crucial for uncovering hidden vulnerabilities, ensuring a more robust and trustworthy AI deployment.&lt;/p&gt;

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

&lt;p&gt;As you begin integrating generative AI into your organization, remember that success depends on robust data governance, skilled talent, a clear strategy, and proactive risk management. By methodically addressing each of these pillars, you can confidently transition from ambition to tangible value. The choice to act now isn't merely about staying competitive—it's about carving out a lasting edge in a rapidly evolving market.&lt;/p&gt;

&lt;p&gt;At CodeLink, we have delivered AI solutions that drive competitive advantage—from MVPs to enterprise-scale deployments. Ready to take the next step? &lt;a href="https://www.codelink.io/book-discovery-call?utm_source=dev.to&amp;amp;utm_medium=blog&amp;amp;utm_campaign=generative+ai+deployment"&gt;Book a 30-minute chat&lt;/a&gt; with us and discover how we can support your Generative AI initiatives.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing New Features on Codest: Generate Flutter and React Native Apps!</title>
      <dc:creator>CodeLink</dc:creator>
      <pubDate>Thu, 22 Aug 2024 07:20:59 +0000</pubDate>
      <link>https://forem.com/codelink/introducing-new-features-on-codest-generate-flutter-and-react-native-apps-1dme</link>
      <guid>https://forem.com/codelink/introducing-new-features-on-codest-generate-flutter-and-react-native-apps-1dme</guid>
      <description>&lt;p&gt;&lt;em&gt;Our recent newsletter introduced Codest, an AI tool that can generate NextJS apps from images.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Building on this success, our R&amp;amp;D team has expanded Codest’s capabilities to generate Flutter and React Native apps. We documented our progress and results in 2 previous blog articles (Generating Flutter App, Generate React Native App), where we promised these new features would soon be added to our PoC.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Today, we are thrilled to announce that our AI-powered tool, Codest, now supports the generation of Flutter and React Native apps from multiple images!&lt;/em&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Generate Flutter Apps: Our PoC now includes the ability to generate high-quality, modular Flutter code from images. This code separates layout and data, providing a solid foundation for developers to build upon.&lt;/li&gt;
&lt;li&gt;Generate React Native Apps: Similar to our Flutter integration, you can now generate React Native apps, complete with reusable components and structured code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Use Codest?
&lt;/h2&gt;

&lt;p&gt;Codest has been proven to reduce development time by up to 20%, making it an amazing tool for developers to streamline their development process. Whether you’re working on mobile applications or web apps, Codest’s AI-driven approach ensures you get a head start with clean, modular code.&lt;/p&gt;

&lt;p&gt;Below are some of the results we would love to share. You can see the original image on the left and the generated view on the right.&lt;/p&gt;

&lt;h3&gt;
  
  
  React Native
&lt;/h3&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%2F60jb0fclcn4evrlbxahb.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%2F60jb0fclcn4evrlbxahb.png" alt="Generating React Native App 1" width="800" height="748"&gt;&lt;/a&gt;&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%2Fsvdygbyyub60o1pqxo6b.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%2Fsvdygbyyub60o1pqxo6b.png" alt="Generating React Native App 2" width="800" height="748"&gt;&lt;/a&gt;&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%2Fg65x87w09rfmuy346h41.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%2Fg65x87w09rfmuy346h41.png" alt="Generating React Native App 3" width="800" height="732"&gt;&lt;/a&gt;&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%2Fv4t7dkxy24x3gs3zw9fr.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%2Fv4t7dkxy24x3gs3zw9fr.png" alt="Generating React Native App 4" width="800" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Flutter
&lt;/h3&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%2Fci8e9l5cczh379vw8n1c.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%2Fci8e9l5cczh379vw8n1c.png" alt="Generating Flutter App 1" width="800" height="733"&gt;&lt;/a&gt;&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%2Fk49nnga4lo1qqal16hhd.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%2Fk49nnga4lo1qqal16hhd.png" alt="Generating Flutter App 2" width="732" height="689"&gt;&lt;/a&gt;&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%2Fy0lg4d31cu29hpntu4p7.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%2Fy0lg4d31cu29hpntu4p7.png" alt="Generating Flutter App 3" width="737" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Next.js
&lt;/h3&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%2Fob8xv2c338305zzc2lgk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob8xv2c338305zzc2lgk.jpg" alt="Generating NextJS App 1" width="800" height="587"&gt;&lt;/a&gt;&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%2F66uiyqbv9kez01np46as.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66uiyqbv9kez01np46as.jpg" alt="Generating NextJS App 2" width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  See It in Action!
&lt;/h2&gt;

&lt;p&gt;We’ve put together 3 short introduction videos showcasing the main features and how you can use Codest to generate functional apps from images. Check out the video to see the magic happen!&lt;/p&gt;

&lt;h3&gt;
  
  
  React Native
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kGfPtzDpM98"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Flutter
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/TqJkX8L5x54"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Next.js
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/T1aBu6SIvJQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Visit codest.ai today to try out these new features.&lt;/p&gt;

&lt;p&gt;Stay tuned for more updates as we continue to enhance Codest’s capabilities. Happy coding!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nextjs</category>
      <category>flutter</category>
      <category>reactnative</category>
    </item>
  </channel>
</rss>
