<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jubril Bilal</title>
    <description>The latest articles on DEV Community by Jubril Bilal (@jubril).</description>
    <link>https://dev.to/jubril</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1706811%2F70b6698f-e2bb-4035-81f5-02f384de1351.png</url>
      <title>DEV Community: Jubril Bilal</title>
      <link>https://dev.to/jubril</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jubril"/>
    <language>en</language>
    <item>
      <title>I Built an AI Agent From Scratch. Here's What Nobody Tells You.</title>
      <dc:creator>Jubril Bilal</dc:creator>
      <pubDate>Thu, 06 Aug 2026 16:27:17 +0000</pubDate>
      <link>https://dev.to/jubril/i-built-an-ai-agent-from-scratch-heres-what-nobody-tells-you-3bip</link>
      <guid>https://dev.to/jubril/i-built-an-ai-agent-from-scratch-heres-what-nobody-tells-you-3bip</guid>
      <description>&lt;p&gt;The theory is clean. The reality is messier. And honestly more interesting.&lt;/p&gt;

&lt;p&gt;Everyone's talking about AI agents. Few people are showing you what it actually looks like to build one. So here's my honest account — what worked, what broke, and what surprised me.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note before you start copying code:&lt;/strong&gt; LangChain's agent APIs move fast, and some of what I used when I built this is now deprecated. I've flagged that inline below rather than pretending it didn't happen, that's kind of the point of this post.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What actually makes something an "agent"?
&lt;/h2&gt;

&lt;p&gt;Before building anything, it's worth being precise about what we're building. An AI agent needs four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;An LLM as the brain&lt;/strong&gt; — the reasoning engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; — context that persists across steps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — the ability to actually take actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A loop&lt;/strong&gt; — plan → act → observe → repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Miss any one of the four and you don't have an agent. You have a fancy prompt.&lt;/p&gt;




&lt;h2&gt;
  
  
  The stack I used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.11&lt;/li&gt;
&lt;li&gt;LangChain (agent framework)&lt;/li&gt;
&lt;li&gt;OpenAI GPT-4o (the brain)&lt;/li&gt;
&lt;li&gt;Tavily (web search tool)&lt;/li&gt;
&lt;li&gt;Python REPL (code execution tool)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Building a research agent, step by step
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 — Install dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;langchain langchain-openai tavily-python python-dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2 — Set up your tools
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_community.tools.tavily_search&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TavilySearchResults&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_experimental.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PythonREPLTool&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nc"&gt;TavilySearchResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_results&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nc"&gt;PythonREPLTool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3 — Initialize the agent
&lt;/h3&gt;

&lt;p&gt;This is the part that's changed the most since I first built this. Here's what I originally used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# what I originally used — this pattern is now deprecated
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ChatOpenAI&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;create_react_agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hub&lt;/span&gt;

&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ChatOpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ReAct = Reason + Act, the classic agent loop pattern
&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pull&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hwchase17/react&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_react_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; &lt;code&gt;create_react_agent&lt;/code&gt; and &lt;code&gt;AgentExecutor&lt;/code&gt; have since been deprecated in favor of &lt;code&gt;create_agent&lt;/code&gt; from &lt;code&gt;langchain.agents&lt;/code&gt;. The underlying concept — model, tools, and a loop wrapping them — hasn't changed. The constructor has. If you're starting fresh, check &lt;code&gt;docs.langchain.com&lt;/code&gt; for the current signature before you build on top of this; LangChain's API surface has genuinely moved twice since I wrote this walkthrough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 — Add the execution loop
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentExecutor&lt;/span&gt;

&lt;span class="n"&gt;agent_executor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentExecutor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# see the agent's thinking
&lt;/span&gt;    &lt;span class="n"&gt;max_iterations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;handle_parsing_errors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5 — Give it a goal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Research the current state of AI agents in enterprise software.
    Find 3 specific companies using them, what they&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;re doing,
    and the results. Then write a structured summary.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What actually happened when I ran this
&lt;/h2&gt;

&lt;p&gt;Here's the agent's internal monologue, straight from &lt;code&gt;verbose=True&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thought: I need to search for information about AI agents 
in enterprise software.

Action: tavily_search
Action Input: "AI agents enterprise software companies"

Observation: [search results...]

Thought: I found information about Klarna and Salesforce. 
I need a third, more specific example.

Action: tavily_search
Action Input: "enterprise AI agent deployment results case study"

[continues for 6 more steps...]

Final Answer: [structured, sourced summary]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watching this play out in real time is genuinely the best way to understand what an agent is doing differently from a single prompt. It's not magic, it's a loop, made visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I got wrong (and how I fixed it)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1 — too vague with the goal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bad prompt: &lt;code&gt;"Research AI agents"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Good prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Research AI agents in enterprise software. Find 3 companies,
what they built, specific results they reported, and format
as: Company | Use Case | Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lesson: agents need precise goals just as much as any other system. Garbage in, garbage out — just smarter-sounding garbage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2 — not handling tool failures&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tavily search failed twice on bad queries. My first version just... stopped. Fix: &lt;code&gt;handle_parsing_errors=True&lt;/code&gt;, plus retry logic around tool calls. Agents will hit walls — plan for it up front rather than discovering it in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3 — infinite loops&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An early version got stuck re-running the same search fifteen times. &lt;code&gt;max_iterations=10&lt;/code&gt; was the blunt fix; better prompt engineering telling the agent explicitly when to stop was the actual fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4 — trusting output blindly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent confidently cited a statistic from a source that didn't exist. This is the most important lesson in the whole post: agents hallucinate with total confidence. Always validate anything that matters, and build source-checking into the prompt itself rather than trusting the output at face value.&lt;/p&gt;




&lt;h2&gt;
  
  
  What agents are actually good at (and where they struggle)
&lt;/h2&gt;

&lt;p&gt;After building a few of these, here's my honest read:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good at:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repetitive multi-step research&lt;/li&gt;
&lt;li&gt;Information gathering and synthesis&lt;/li&gt;
&lt;li&gt;Tasks with clear, checkable success criteria&lt;/li&gt;
&lt;li&gt;Structured data processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Struggle with:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Genuinely novel problem-solving&lt;/li&gt;
&lt;li&gt;Anything requiring real-world judgment&lt;/li&gt;
&lt;li&gt;Information beyond what their tools can reach&lt;/li&gt;
&lt;li&gt;Long tasks without checkpoints — they drift from the original goal&lt;/li&gt;
&lt;li&gt;Knowing when they're wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the one to internalize. An agent that's confidently wrong is more dangerous than one that visibly fails, because nothing in its own output tells you to double-check it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frameworks worth knowing
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper than a single research agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LangChain / LangGraph&lt;/strong&gt; — most mature ecosystem, best docs, largest community. Start here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CrewAI&lt;/strong&gt; — multi-agent orchestration, built around "agent teams," a more intuitive API for that specific use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AutoGen (Microsoft)&lt;/strong&gt; — strong for human-in-the-loop agents, research-heavy focus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LlamaIndex&lt;/strong&gt; — best fit for document- and data-heavy agents.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A multi-agent setup, with CrewAI
&lt;/h2&gt;

&lt;p&gt;Once one agent works, the natural next step is wiring a few together. Here's a minimal researcher-and-writer crew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;

&lt;span class="n"&gt;researcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Analyst&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find accurate information about {topic}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;re an expert researcher who finds and validates information.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;search_tool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content Writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write clear, engaging content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You take research and turn it into compelling, accurate writing.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;research_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research {topic} thoroughly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Detailed research notes with sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;writing_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write an article based on the research&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expected_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;800-word article&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;crew&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writing_task&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crew&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kickoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;topic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AI agents in production&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  My honest verdict
&lt;/h2&gt;

&lt;p&gt;AI agents are real and genuinely useful. They're also overhyped in some circles. The truth sits in the middle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They work well for specific, well-defined tasks.&lt;/li&gt;
&lt;li&gt;They're not magic, they need real engineering around them.&lt;/li&gt;
&lt;li&gt;They fail in interesting, hard-to-predict ways.&lt;/li&gt;
&lt;li&gt;Building one teaches you more in an afternoon than reading about them for a week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start simple. One agent, one tool, one task. Get that working before you reach for the autonomous AI company.&lt;/p&gt;




&lt;p&gt;What are you building with agents? Drop it in the comments — genuinely curious what's working for people right now.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>langchain</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>GitHub Copilot Writes Better Code Than I Did as a Junior. Should Juniors Still Exist?</title>
      <dc:creator>Jubril Bilal</dc:creator>
      <pubDate>Thu, 06 Aug 2026 16:18:02 +0000</pubDate>
      <link>https://dev.to/jubril/github-copilot-writes-better-code-than-i-did-as-a-junior-should-juniors-still-exist-npi</link>
      <guid>https://dev.to/jubril/github-copilot-writes-better-code-than-i-did-as-a-junior-should-juniors-still-exist-npi</guid>
      <description>&lt;p&gt;Provocative question, I know. But it's the real conversation we need to be having not the safe, LinkedIn-friendly version of it.&lt;/p&gt;

&lt;p&gt;So here's what I actually think, not the polished take.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Uncomfortable Reality
&lt;/h2&gt;

&lt;p&gt;The numbers aren't subtle anymore. Stack Overflow's most recent developer survey put AI-tool usage at 84% of developers using or planning to use them up sharply from the year before with roughly half of professional developers now using AI tools every single day. Separate industry surveys this year put daily usage even higher, in the 70-80%+ range depending on how "daily use" is defined.&lt;/p&gt;

&lt;p&gt;I don't need the survey data to believe it, though. I see it in my own editor.&lt;/p&gt;

&lt;p&gt;Last week I asked Copilot to scaffold a paginated REST endpoint with input validation, error handling, and a matching test file. Ten seconds. When I was six months into my first job, that same task no boilerplate to copy from, half the framework docs still unread took me most of an afternoon. Call it two hours, generously.&lt;/p&gt;

&lt;p&gt;That's not a knock on junior-me. That's just the gap. And pretending it doesn't exist doesn't help anyone entering the field right now.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I've Observed in Code Reviews
&lt;/h2&gt;

&lt;p&gt;I review a mix of AI-generated code and junior-developer code every week, often on the same day, often for the same kind of ticket. The pattern is consistent enough that I trust it now.&lt;/p&gt;

&lt;p&gt;The AI code is usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✓ Syntactically cleaner&lt;/li&gt;
&lt;li&gt;✓ Better commented&lt;/li&gt;
&lt;li&gt;✓ More internally consistent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it's also, just as often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✗ Missing business context nobody wrote down anywhere&lt;/li&gt;
&lt;li&gt;✗ Technically correct but architecturally wrong for where the codebase is headed&lt;/li&gt;
&lt;li&gt;✗ Solving the stated problem instead of the real one underneath it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the one that gets people. A junior developer who's confused will usually ask a question. AI doesn't get confused, it just answers confidently, even when the honest answer was "wait, what are we actually trying to do here?"&lt;/p&gt;




&lt;h2&gt;
  
  
  The Skills That Actually Survive
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;→ Systems thinking&lt;/li&gt;
&lt;li&gt;→ Code review judgment&lt;/li&gt;
&lt;li&gt;→ Understanding requirements vs. implementation&lt;/li&gt;
&lt;li&gt;→ Debugging complex production issues&lt;/li&gt;
&lt;li&gt;→ Making architectural tradeoffs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Transforming, not disappearing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;→ Syntax memorization &lt;em&gt;becomes&lt;/em&gt; prompt engineering&lt;/li&gt;
&lt;li&gt;→ Writing boilerplate &lt;em&gt;becomes&lt;/em&gt; reviewing AI output&lt;/li&gt;
&lt;li&gt;→ Googling solutions &lt;em&gt;becomes&lt;/em&gt; validating AI suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notice the pattern in that second list. None of those skills vanished. They moved one level up the stack, from &lt;em&gt;producing&lt;/em&gt; to &lt;em&gt;judging what was produced&lt;/em&gt;. That's a real shift in what the job asks of you day to day, but it's not the same thing as the job disappearing.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Honest Advice for Developers in 2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you're junior:&lt;/strong&gt; don't skip the fundamentals to move faster with AI tools. You need enough hand-built pain in your history to recognize when the AI's confident answer is wrong. That instinct doesn't come from reading about bugs, it comes from having chased a few yourself at 11pm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're mid-level:&lt;/strong&gt; this is probably the best moment of your career to lean into AI tooling hard. You have enough context to catch its mistakes and enough time-poverty to actually benefit from the speed. Use it aggressively, but keep reviewing its output like you'd review a smart, overconfident intern's.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're senior:&lt;/strong&gt; your job is shifting toward review, architecture, and judgment calls faster than almost anyone else's. That's not a demotion  it's the part of the job AI can't touch yet. Get explicit about mentoring juniors on the &lt;em&gt;why&lt;/em&gt;, because that's the thing AI still can't hand them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Practical Experiment
&lt;/h2&gt;

&lt;p&gt;I ran an informal test on a real ticket, nothing scientific, just three attempts at the same task:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A junior developer&lt;/strong&gt; (about 6 months of experience), given the ticket cold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT alone&lt;/strong&gt;, given a detailed prompt with the same requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT guided by someone with solid code knowledge&lt;/strong&gt;, iterating on the same prompt.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Honest breakdown: the junior developer took the longest and made the most syntax-level mistakes, but asked the best clarifying questions and caught an edge case in the requirements that both AI attempts missed entirely. ChatGPT alone was fast and clean but quietly made an assumption about the data model that would have caused a production bug, nothing in the code &lt;em&gt;looked&lt;/em&gt; wrong. The guided attempt was the strongest of the three: same speed as AI alone, but the person in the loop caught the bad assumption before it shipped.&lt;/p&gt;

&lt;p&gt;The lesson wasn't "AI wins" or "junior wins." It was that the best result came from a human with judgment steering the tool, and that the human didn't need to be senior to do it. They needed to know enough to ask the right question at the right moment.&lt;/p&gt;




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

&lt;p&gt;The floor for "good enough" code is rising fast. Almost anyone can now produce something that runs, passes basic tests, and looks clean.&lt;/p&gt;

&lt;p&gt;The ceiling for "exceptional" judgment is rising faster. And that's the part nobody's automated yet.&lt;/p&gt;

&lt;p&gt;Juniors aren't obsolete. What "junior" means is changing and the ones who'll do fine are the ones building judgment on purpose, not just accepting whatever the autocomplete suggests.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
