<?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: Jason Yakubu</title>
    <description>The latest articles on DEV Community by Jason Yakubu (@jason_yakubu_cea140854a5b).</description>
    <link>https://dev.to/jason_yakubu_cea140854a5b</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%2F3977716%2Fdb24b596-9aab-48ab-b33a-29fc9d89ddde.jpg</url>
      <title>DEV Community: Jason Yakubu</title>
      <link>https://dev.to/jason_yakubu_cea140854a5b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jason_yakubu_cea140854a5b"/>
    <language>en</language>
    <item>
      <title>Building PatchFlow for the QwenCloud Hackathon</title>
      <dc:creator>Jason Yakubu</dc:creator>
      <pubDate>Wed, 24 Jun 2026 10:19:30 +0000</pubDate>
      <link>https://dev.to/jason_yakubu_cea140854a5b/building-patchflow-for-the-qwencloud-hackathon-38h2</link>
      <guid>https://dev.to/jason_yakubu_cea140854a5b/building-patchflow-for-the-qwencloud-hackathon-38h2</guid>
      <description>&lt;p&gt;Over the past few days, I've been building PatchFlow, an experiment in autonomous API reliability.&lt;br&gt;
The idea started from a frustration I've experienced while building backend systems.&lt;br&gt;
When an API fails, the workflow is often the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reproduce the issue&lt;/li&gt;
&lt;li&gt;Search logs&lt;/li&gt;
&lt;li&gt;Trace the failure&lt;/li&gt;
&lt;li&gt;Find the relevant code&lt;/li&gt;
&lt;li&gt;Create a fix&lt;/li&gt;
&lt;li&gt;Open a pull request
Even with modern tooling, much of this process remains manual.
I wanted to explore whether some of these steps could be automated.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The&lt;/strong&gt; &lt;strong&gt;Idea&lt;/strong&gt;&lt;br&gt;
PatchFlow is designed to help developers move from:&lt;br&gt;
Issue → Root Cause → Patch&lt;br&gt;
The goal is not simply to detect failures but to assist with understanding and fixing them.&lt;br&gt;
At a high level, the workflow looks like this:&lt;br&gt;
Plain text&lt;br&gt;
OpenAPI Specification&lt;br&gt;
        ↓&lt;br&gt;
Endpoint Discovery&lt;br&gt;
        ↓&lt;br&gt;
Reliability Testing&lt;br&gt;
        ↓&lt;br&gt;
Failure Analysis&lt;br&gt;
        ↓&lt;br&gt;
Root Cause Detection&lt;br&gt;
        ↓&lt;br&gt;
Patch Generation&lt;br&gt;
        ↓&lt;br&gt;
GitHub Pull Request&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Early&lt;/strong&gt; &lt;strong&gt;Challenges&lt;/strong&gt;&lt;br&gt;
One of the first technical challenges I encountered was endpoint discovery.&lt;br&gt;
My initial idea was to scan repositories and automatically discover API routes regardless of framework.&lt;br&gt;
The more I explored this approach, the more limitations I found.&lt;br&gt;
Different frameworks expose routes differently:&lt;br&gt;
FastAPI&lt;br&gt;
Django&lt;br&gt;
Express&lt;br&gt;
Next.js&lt;br&gt;
Spring Boot&lt;br&gt;
Attempting to support every framework through repository scanning quickly became complex and inefficient.&lt;br&gt;
Why I Switched to OpenAPI&lt;br&gt;
After researching how existing API platforms operate, I realized that many tools rely on OpenAPI specifications rather than trying to discover endpoints from source code.&lt;br&gt;
OpenAPI already provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint definitions&lt;/li&gt;
&lt;li&gt;Request schemas&lt;/li&gt;
&lt;li&gt;Response schemas&lt;/li&gt;
&lt;li&gt;Methods and parameters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows PatchFlow to focus on reliability testing instead of route discovery.&lt;br&gt;
The architecture immediately became cleaner and more scalable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building&lt;/strong&gt; &lt;strong&gt;with&lt;/strong&gt; &lt;strong&gt;QwenCloud&lt;/strong&gt;&lt;br&gt;
For this project, I'm using QwenCloud to power the reasoning and analysis components of the platform.&lt;br&gt;
The ability to work through architectural tradeoffs, evaluate different approaches, and iterate quickly has been particularly valuable during development.&lt;br&gt;
One example was evaluating multiple approaches for endpoint discovery before settling on an OpenAPI-first workflow.&lt;br&gt;
That decision significantly simplified the overall system design.&lt;br&gt;
Current Progress&lt;br&gt;
So far I have:&lt;/p&gt;

&lt;p&gt;✅ Defined the product architecture&lt;br&gt;
✅ Chosen an OpenAPI-first testing workflow&lt;br&gt;
✅ Planned GitHub integration for automated pull requests&lt;br&gt;
✅ Started frontend development&lt;br&gt;
Next, I'll focus on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reliability testing engine&lt;/li&gt;
&lt;li&gt;Failure analysis workflows&lt;/li&gt;
&lt;li&gt;GitHub patch generation&lt;/li&gt;
&lt;li&gt;End-to-end demo preparation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt; &lt;strong&gt;I'm&lt;/strong&gt; &lt;strong&gt;Learning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One lesson from this project is that many successful developer tools are effective because they reduce complexity rather than add more intelligence&lt;br&gt;
.&lt;br&gt;
My original design attempted to automatically discover every endpoint in every framework.&lt;br&gt;
The current design is simpler, more practical, and closer to how developers already work.&lt;br&gt;
Sometimes the best solution is not the most automated one.&lt;br&gt;
Looking Ahead&lt;br&gt;
The goal for the remainder of the hackathon is to build a working prototype that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read an OpenAPI specification&lt;/li&gt;
&lt;li&gt;Test critical endpoints&lt;/li&gt;
&lt;li&gt;Identify failures&lt;/li&gt;
&lt;li&gt;Suggest a fix&lt;/li&gt;
&lt;li&gt;Generate a GitHub pull request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll continue sharing updates as PatchFlow evolves&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>devtools</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Why APIs Break in Production and Why We Still Test Them Manually</title>
      <dc:creator>Jason Yakubu</dc:creator>
      <pubDate>Tue, 16 Jun 2026 07:52:55 +0000</pubDate>
      <link>https://dev.to/jason_yakubu_cea140854a5b/why-apis-break-in-production-and-why-we-still-test-them-manually-i81</link>
      <guid>https://dev.to/jason_yakubu_cea140854a5b/why-apis-break-in-production-and-why-we-still-test-them-manually-i81</guid>
      <description>&lt;p&gt;Modern software is built on APIs.&lt;/p&gt;

&lt;p&gt;Every login, every payment, every user action — it all flows through backend APIs. And yet, despite how critical they are, API reliability is still surprisingly fragile.&lt;/p&gt;

&lt;p&gt;We still rely on manual testing tools, handwritten scripts, and fragmented debugging workflows to ensure systems don’t fail in production.&lt;/p&gt;

&lt;p&gt;And somehow, that hasn’t changed in years.&lt;/p&gt;

&lt;p&gt;The Hidden Reality of Backend Systems&lt;/p&gt;

&lt;p&gt;On the surface, APIs look stable:&lt;/p&gt;

&lt;p&gt;They have defined routes&lt;br&gt;
They return structured responses&lt;br&gt;
They pass unit tests&lt;br&gt;
They work in staging&lt;/p&gt;

&lt;p&gt;But in real-world usage, things break in ways that are not always obvious:&lt;/p&gt;

&lt;p&gt;A missing null check crashes a login flow only under specific inputs&lt;br&gt;
A slow database query causes intermittent checkout failures&lt;br&gt;
A malformed payload passes validation in staging but fails in production&lt;br&gt;
A refactored service silently breaks a dependent endpoint&lt;br&gt;
A race condition only appears under load&lt;/p&gt;

&lt;p&gt;These are not rare edge cases — they are everyday production issues.&lt;/p&gt;

&lt;p&gt;And the worst part is:&lt;/p&gt;

&lt;p&gt;Most of them are discovered by users, not developers.&lt;/p&gt;

&lt;p&gt;Why Current API Testing Is Not Enough&lt;/p&gt;

&lt;p&gt;Today’s API testing ecosystem is powerful, but fundamentally limited in scope.&lt;/p&gt;

&lt;p&gt;Postman and manual testing&lt;/p&gt;

&lt;p&gt;Postman is widely used, but it relies on manually defined requests.&lt;/p&gt;

&lt;p&gt;You must already know:&lt;/p&gt;

&lt;p&gt;Which endpoint exists&lt;br&gt;
What payload it expects&lt;br&gt;
What scenarios to test&lt;/p&gt;

&lt;p&gt;It is a tool for executing tests, not discovering system weaknesses.&lt;/p&gt;

&lt;p&gt;CI-based test suites&lt;/p&gt;

&lt;p&gt;Automated tests in CI pipelines help catch regressions, but they suffer from one core limitation:&lt;/p&gt;

&lt;p&gt;They only test what developers explicitly wrote.&lt;/p&gt;

&lt;p&gt;If a scenario was never imagined, it is never tested.&lt;/p&gt;

&lt;p&gt;Observability tools (Datadog, etc.)&lt;/p&gt;

&lt;p&gt;Monitoring tools are excellent at telling you what is broken in production.&lt;/p&gt;

&lt;p&gt;But they operate after the fact.&lt;/p&gt;

&lt;p&gt;They answer:&lt;/p&gt;

&lt;p&gt;“What failed?”&lt;br&gt;
“Where did it fail?”&lt;/p&gt;

&lt;p&gt;But not:&lt;/p&gt;

&lt;p&gt;“Why did this happen in the first place?”&lt;br&gt;
“Could this have been prevented?”&lt;br&gt;
“How do we fix it automatically?”&lt;br&gt;
The Gap Between Testing and Fixing&lt;/p&gt;

&lt;p&gt;Across the entire software lifecycle, there is a missing layer:&lt;/p&gt;

&lt;p&gt;We test APIs manually or partially automatically&lt;br&gt;
We observe failures in production&lt;br&gt;
We debug and fix issues manually&lt;/p&gt;

&lt;p&gt;But there is no system that closes the loop.&lt;/p&gt;

&lt;p&gt;There is no system that:&lt;/p&gt;

&lt;p&gt;Understands backend APIs, tests them intelligently, identifies failures, and fixes them automatically.&lt;/p&gt;

&lt;p&gt;That gap is where most production bugs live.&lt;/p&gt;

&lt;p&gt;A Different Approach: Treat APIs as Systems, Not Endpoints&lt;/p&gt;

&lt;p&gt;The real problem is not testing individual endpoints.&lt;/p&gt;

&lt;p&gt;The real problem is understanding how the system behaves under failure.&lt;/p&gt;

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

&lt;p&gt;“Does this endpoint work?”&lt;/p&gt;

&lt;p&gt;We should be asking:&lt;/p&gt;

&lt;p&gt;“What happens when this system is stressed, misused, or given unexpected input?”&lt;/p&gt;

&lt;p&gt;This requires moving beyond manual test cases and static assumptions.&lt;/p&gt;

&lt;p&gt;It requires an autonomous approach.&lt;/p&gt;

&lt;p&gt;Toward Autonomous API Reliability&lt;/p&gt;

&lt;p&gt;A more complete system would work like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand the API surface&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of manually defining tests, the system reads structured API definitions (such as OpenAPI specifications) or derives them from the codebase.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate intelligent test scenarios&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It does not just test “happy paths”, but also:&lt;/p&gt;

&lt;p&gt;invalid inputs&lt;br&gt;
missing fields&lt;br&gt;
type mismatches&lt;br&gt;
unexpected payload structures&lt;br&gt;
failure conditions under stress&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simulate real-world failures&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It intentionally breaks assumptions:&lt;/p&gt;

&lt;p&gt;slow responses&lt;br&gt;
partial failures&lt;br&gt;
incorrect sequencing of requests&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Analyze and trace failures&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When something breaks, it does not stop at reporting an error. It traces the failure back to the likely source in the codebase.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Propose and apply fixes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of stopping at detection, it generates code patches and opens pull requests for review.&lt;/p&gt;

&lt;p&gt;This closes the loop between:&lt;/p&gt;

&lt;p&gt;detection → diagnosis → correction&lt;/p&gt;

&lt;p&gt;Why This Matters&lt;/p&gt;

&lt;p&gt;Software complexity is increasing faster than our ability to manually test it.&lt;/p&gt;

&lt;p&gt;Modern backend systems are:&lt;/p&gt;

&lt;p&gt;distributed&lt;br&gt;
event-driven&lt;br&gt;
dependent on multiple services&lt;br&gt;
deployed continuously&lt;/p&gt;

&lt;p&gt;In such environments, manual testing does not scale.&lt;/p&gt;

&lt;p&gt;Even traditional automation struggles because it assumes we can predict all failure cases in advance.&lt;/p&gt;

&lt;p&gt;But real systems don’t fail in predictable ways.&lt;/p&gt;

&lt;p&gt;The Direction Forward&lt;/p&gt;

&lt;p&gt;The future of backend reliability is not more dashboards.&lt;/p&gt;

&lt;p&gt;It is not more manual test scripts.&lt;/p&gt;

&lt;p&gt;It is systems that can:&lt;/p&gt;

&lt;p&gt;understand APIs automatically&lt;br&gt;
stress-test intelligently&lt;br&gt;
identify root causes&lt;br&gt;
and propose fixes in real time&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;Software that participates in its own debugging process.&lt;/p&gt;

&lt;p&gt;Closing Thought&lt;/p&gt;

&lt;p&gt;We have spent years building better tools to write code faster.&lt;/p&gt;

&lt;p&gt;Now the next step is clear:&lt;/p&gt;

&lt;p&gt;We need tools that help us trust code more, not just write it faster.&lt;/p&gt;

&lt;p&gt;Because in production systems, speed of development means nothing without reliability.&lt;/p&gt;

&lt;p&gt;And reliability should not be entirely manual anymore.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>python</category>
      <category>api</category>
    </item>
  </channel>
</rss>
