<?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: Churchill Emmanuel</title>
    <description>The latest articles on DEV Community by Churchill Emmanuel (@debugger360).</description>
    <link>https://dev.to/debugger360</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%2F1591408%2Fad35c181-ea97-4bdf-aec0-33b6ee317a52.jpg</url>
      <title>DEV Community: Churchill Emmanuel</title>
      <link>https://dev.to/debugger360</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/debugger360"/>
    <language>en</language>
    <item>
      <title>Two Weeks Stuck on Authentication: My Headless API Journey</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Tue, 18 Nov 2025 17:13:31 +0000</pubDate>
      <link>https://dev.to/debugger360/two-weeks-stuck-on-authentication-my-headless-api-journey-1m65</link>
      <guid>https://dev.to/debugger360/two-weeks-stuck-on-authentication-my-headless-api-journey-1m65</guid>
      <description>&lt;p&gt;Turning my Laravel blog into a Headless CMS API sounded like a simple plan.&lt;br&gt;
Until authentication humbled me.&lt;/p&gt;

&lt;p&gt;I’ve been debugging this for over two weeks now, and each day feels like I’m peeling another layer of confusion off the code.&lt;/p&gt;

&lt;p&gt;At first, I thought the issue was with tokens. Then middleware. Then Laravel itself.&lt;br&gt;
But as usual, the real problem was somewhere between my assumptions and my logic.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1. The Setup That Started It All&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I began with Laravel Sanctum for API authentication.&lt;br&gt;
It looked straightforward at first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// routes/api.php&lt;/span&gt;
&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/login'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;AuthController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'login'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'auth:sanctum'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/user'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;AuthController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'me'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The login route worked perfectly — until it didn’t.&lt;br&gt;
Some requests passed, others failed without reason.&lt;br&gt;
At one point, valid tokens were being rejected.&lt;/p&gt;

&lt;p&gt;Here’s the &lt;code&gt;login&lt;/code&gt; method that caused most of the headaches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'required|email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'required'&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nc"&gt;Auth&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;only&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Invalid credentials'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Auth&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;createToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'api_token'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;plainTextToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="s1"&gt;'user'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'token'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$token&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks fine, right?&lt;br&gt;
Except, when I tested it repeatedly, Sanctum started throwing token mismatch errors or expiring tokens too early.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2. The Debugging Spiral&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;At first, I tried clearing caches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan config:clear
php artisan cache:clear
php artisan route:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That didn’t help.&lt;br&gt;
Then I reinstalled Sanctum.&lt;br&gt;
Still broken.&lt;/p&gt;

&lt;p&gt;I even doubted my API routes.&lt;br&gt;
But the actual problem turned out to be with &lt;strong&gt;how Sanctum handles SPA vs API tokens&lt;/strong&gt;.&lt;br&gt;
Sanctum was originally built for SPA authentication using session cookies, not pure token-based APIs.&lt;/p&gt;

&lt;p&gt;Once I understood that, things started to click.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3. What Finally Worked&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I switched to &lt;strong&gt;token-based authentication&lt;/strong&gt; for full API separation.&lt;br&gt;
In &lt;code&gt;config/sanctum.php&lt;/code&gt;, I set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="s1"&gt;'stateful'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I ensured my frontend (still testing via Postman) sent the right headers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;
Accept: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That single header fixed 60% of my issues.&lt;br&gt;
The rest were logic errors — bad validation, expired tokens, missing guards.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Lessons Learned&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Authentication bugs are not always framework issues. Sometimes it’s how you configured it.&lt;/li&gt;
&lt;li&gt;Always test endpoints individually in Postman.&lt;/li&gt;
&lt;li&gt;Read the docs again. Then again. Slowly.&lt;/li&gt;
&lt;li&gt;Don’t overcomplicate things. Start simple, then layer up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I haven’t even reached the Next.js frontend yet, but this phase taught me something more valuable than a working API:&lt;br&gt;
Debugging is where developers grow.&lt;/p&gt;

&lt;p&gt;It’s not about fixing errors.&lt;br&gt;
It’s about learning to think like your system.&lt;/p&gt;

&lt;p&gt;And if you can survive two weeks debugging Laravel auth, trust me — you’ll survive anything.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>api</category>
      <category>security</category>
      <category>laravel</category>
    </item>
    <item>
      <title>When Cloudflare Sneezes, the Internet Catches a Cold</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Tue, 18 Nov 2025 16:30:54 +0000</pubDate>
      <link>https://dev.to/debugger360/when-cloudflare-sneezes-the-internet-catches-a-cold-5d73</link>
      <guid>https://dev.to/debugger360/when-cloudflare-sneezes-the-internet-catches-a-cold-5d73</guid>
      <description>&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%2Fez2peemylaii0bovdvxv.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%2Fez2peemylaii0bovdvxv.jpg" alt="Cloudfare is down" width="502" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A breakdown of today’s outage, what it exposed, and why infrastructure still runs the world&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloudflare went down today and the internet panicked.&lt;br&gt;
Apps froze.&lt;br&gt;
Websites refused to load.&lt;br&gt;
Developers refreshed dashboards like their salaries depended on it.&lt;br&gt;
And for a moment, the digital world felt strangely quiet.&lt;/p&gt;

&lt;p&gt;It’s almost funny until you remember how true the meme is:&lt;br&gt;
The entire internet sits on a few layers of infrastructure, and Cloudflare is one of the blocks holding everything together.&lt;/p&gt;

&lt;p&gt;But this outage did something important.&lt;br&gt;
It revealed how fragile our systems are, how dependent we’ve become on a handful of global providers, and how easy it is for the entire web to shake when one of them stumbles.&lt;/p&gt;

&lt;p&gt;Let’s break this down in a practical way.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Internet Is Not as Decentralized as We Think
&lt;/h2&gt;

&lt;p&gt;Everyone likes to imagine the internet as a giant distributed mesh of computers spread all over the world.&lt;br&gt;
The reality is far simpler and less glamorous.&lt;/p&gt;

&lt;p&gt;A few companies carry a disproportionate amount of global traffic.&lt;br&gt;
Cloudflare alone powers:&lt;br&gt;
• DNS resolution&lt;br&gt;
• CDN content delivery&lt;br&gt;
• Security layers&lt;br&gt;
• DDoS protection&lt;br&gt;
• Edge compute&lt;br&gt;
• Routing optimization (Argo)&lt;br&gt;
• API protection&lt;br&gt;
• Reverse proxy&lt;/p&gt;

&lt;p&gt;When Cloudflare has issues, everything stacked above it shakes.&lt;/p&gt;

&lt;p&gt;It’s not because “Cloudflare is too big.”&lt;br&gt;
It is because they solved problems at a scale others avoided.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Today’s Outage Wasn’t About Blame
&lt;/h2&gt;

&lt;p&gt;Cloudflare is one of the most reliable infrastructures on the planet.&lt;br&gt;
Even the best systems fail.&lt;br&gt;
Even the most replicated networks experience downtime.&lt;br&gt;
Even the strongest engineering teams hit unexpected faults.&lt;/p&gt;

&lt;p&gt;The real story isn’t “Cloudflare broke.”&lt;br&gt;
The real story is what the outage exposed about everyone else.&lt;/p&gt;

&lt;p&gt;When users get locked out, developers are reminded of something we forget during smooth days:&lt;br&gt;
Your architecture is fragile if a single failure shuts everything down.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Lessons for Developers, Startups, and Businesses
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A. Redundancy isn’t optional&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If your DNS has no fallback, your service disappears during outages.&lt;br&gt;
If your CDN is single-provider, your global users suffer.&lt;br&gt;
If your API gateway has no backup route, your app becomes unusable.&lt;/p&gt;

&lt;p&gt;Businesses think redundancy is expensive.&lt;br&gt;
Downtime is far more expensive.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;B. Understand every layer your app depends on&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Too many developers know their framework but not their stack.&lt;br&gt;
You must know:&lt;br&gt;
• Where your DNS lives&lt;br&gt;
• How your SSL is served&lt;br&gt;
• Where your traffic is routed&lt;br&gt;
• What caching layer sits in front&lt;br&gt;
• Which provider affects which part of your app&lt;/p&gt;

&lt;p&gt;When outages happen, ignorance multiplies panic.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;C. Outages are learning opportunities&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every major outage globally has given birth to better architecture patterns:&lt;/p&gt;

&lt;p&gt;• The AWS S3 outage led to multi-region replication becoming default.&lt;br&gt;
• The Fastly outage pushed companies to adopt failover CDNs.&lt;br&gt;
• Today’s Cloudflare outage will push more teams toward deeper resilience.&lt;/p&gt;

&lt;p&gt;Outages teach what documentation alone cannot.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. A Reality Check for the Internet
&lt;/h2&gt;

&lt;p&gt;We depend on invisible infrastructure more than we realize.&lt;br&gt;
No matter how strong your application is, it inherits the strengths and weaknesses of the layers below it.&lt;/p&gt;

&lt;p&gt;Cloudflare’s outage didn’t “break the internet.”&lt;br&gt;
It exposed how interconnected everything is.&lt;/p&gt;

&lt;p&gt;And ironically, episodes like this are what make the internet stronger.&lt;br&gt;
Engineers will fix code, patch systems, improve routing logic, reconfigure redundancy, and reinforce their stacks.&lt;/p&gt;

&lt;p&gt;This is how the web matures.&lt;/p&gt;

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

&lt;p&gt;Laugh at the memes, enjoy the jokes, and refresh Twitter for updates.&lt;br&gt;
But remember the deeper message.&lt;/p&gt;

&lt;p&gt;Infrastructure still runs the world.&lt;br&gt;
A single platform going dark affects millions.&lt;br&gt;
And the smartest teams are the ones that prepare for a day like this long before it happens.&lt;/p&gt;

&lt;p&gt;Today was a reminder.&lt;br&gt;
Tomorrow should be an adjustment.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>architecture</category>
      <category>devops</category>
    </item>
    <item>
      <title>What Keeps Me Coding When It Gets Tough</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Mon, 29 Sep 2025 12:48:03 +0000</pubDate>
      <link>https://dev.to/debugger360/what-keeps-me-coding-when-it-gets-tough-11ma</link>
      <guid>https://dev.to/debugger360/what-keeps-me-coding-when-it-gets-tough-11ma</guid>
      <description>&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%2Fdexhyg4t1r1q0zw3p4yf.jpeg" 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%2Fdexhyg4t1r1q0zw3p4yf.jpeg" alt="CORS meme" width="720" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coding isn’t always glamorous.&lt;br&gt;
In fact, some days, it feels like wrestling with invisible enemies. The bugs multiply, the deadlines breathe down your neck, and your confidence takes a hit with every error message on the screen.&lt;/p&gt;

&lt;p&gt;So why do I keep going? Why not just give up when it gets hard?&lt;/p&gt;

&lt;p&gt;For me, it comes down to a few things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The thrill of the “aha!” moment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There’s nothing quite like it.&lt;br&gt;
You’ve been staring at the same bug for hours — maybe even days — and then suddenly, it clicks. That one semicolon, that missing import, that overlooked logic… and boom, the code runs. That tiny victory is addictive. It’s proof that persistence pays off.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The joy of creation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every project, no matter how small, is a chance to bring something new into the world. A simple script that automates a task. A blog site for a client. A portfolio that reflects who I am. Watching ideas turn into reality through lines of code is a satisfaction that keeps pulling me back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Growth through struggle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a lesson coding taught me: frustration isn’t the end, it’s the process.&lt;br&gt;
Every time I struggle, I’m not just learning syntax or frameworks — I’m learning patience, grit, and how to problem-solve under pressure. The real skill isn’t just writing code, it’s staying calm when things fall apart and figuring it out step by step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Persistence over passion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We always hear “follow your passion.” But the truth is, some days passion isn’t enough. Some days, coding feels heavy. On those days, it’s persistence that saves me. Choosing to show up, even when I don’t feel like it. Choosing to learn, even when I feel stuck. That consistency builds resilience — and resilience is what creates long-term growth.&lt;/p&gt;

&lt;p&gt;Coding isn’t always easy. But it’s worth it.&lt;br&gt;
Because every time I push through the tough days, I come out sharper, stronger, and more confident in my ability to figure things out.&lt;/p&gt;

&lt;p&gt;👉 Now I’ll ask you: *What keeps you going when the code fights back?&lt;/p&gt;

</description>
      <category>coding</category>
      <category>discuss</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>The Day I Got Interviewed by AI</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Mon, 22 Sep 2025 12:28:00 +0000</pubDate>
      <link>https://dev.to/debugger360/the-day-i-got-interviewed-by-ai-16d7</link>
      <guid>https://dev.to/debugger360/the-day-i-got-interviewed-by-ai-16d7</guid>
      <description>&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%2F8kckr8rl9j1dthho2kcn.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%2F8kckr8rl9j1dthho2kcn.jpg" alt="AI Lady" width="600" height="600"&gt;&lt;/a&gt;&lt;br&gt;
Some months ago, I had one of the most surreal experiences of my developer journey: I got interviewed by an AI.&lt;/p&gt;

&lt;p&gt;Yes — a literal artificial intelligence. And not the chatbots we’re all used to. This was a full-blown AI interviewer, with a voice, feedback loop, and everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How It Started&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before the session began, I was sent a set of instructions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turn on my camera&lt;/li&gt;
&lt;li&gt;Share my screen&lt;/li&gt;
&lt;li&gt;Keep my mic on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fair enough. The idea was to ensure there was no foul play.&lt;/p&gt;

&lt;p&gt;Then it began.&lt;/p&gt;

&lt;p&gt;A warm, female voice greeted me:&lt;/p&gt;

&lt;p&gt;“Hello Churchill, how are you doing today?”&lt;/p&gt;

&lt;p&gt;She even mentioned my name. I responded verbally — and just like that, the interview kicked off.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Experience&lt;/strong&gt;&lt;br&gt;
As the minutes passed, I was genuinely impressed. She asked me questions, listened to my answers, and even gave feedback based on keywords and scenarios I mentioned. It didn’t feel robotic at all. It honestly felt like I was speaking to a real human being.&lt;/p&gt;

&lt;p&gt;The flow was smooth. Natural. Almost too good to be true.&lt;/p&gt;

&lt;p&gt;And then… Nigeria happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When the Internet Became the Villain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Out of nowhere, my ISP decided it was time to embarrass me. Suddenly, “Auntie AI” (as I nicknamed her) started glitching.&lt;/p&gt;

&lt;p&gt;Sometimes she would cut me off, responding before I had even finished my sentence.&lt;/p&gt;

&lt;p&gt;Other times, she would pause, then reply a whole 30 seconds after I was done speaking.&lt;/p&gt;

&lt;p&gt;The conversation started breaking apart. And then she froze completely.&lt;/p&gt;

&lt;p&gt;I just sat there, watching the timer tick down… 8 minutes left… 5 minutes left… until the meeting ended automatically.&lt;/p&gt;

&lt;p&gt;Interview incomplete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Bigger Picture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s when it hit me: we are truly living in the age of AI evolution — but without proper infrastructure, countries like mine will always be playing catch-up.&lt;/p&gt;

&lt;p&gt;Japan is already decades ahead of even the U.S. in infrastructure. Meanwhile, we’re here fighting ISPs that can barely keep a video call stable. If this gap remains, we won’t just be behind — we’ll be irrelevant in the global tech race.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
The AI interview itself was brilliant — a taste of what the future of hiring could look like. But the experience also revealed something sobering: no matter how much talent you have, your environment and infrastructure can either amplify it or cripple it.&lt;/p&gt;

&lt;p&gt;Until we invest in fixing our infrastructure, we’ll keep being spectators in a game where we should be players.&lt;/p&gt;

&lt;p&gt;God help us. God bless Nigeria. 🇳🇬&lt;/p&gt;

&lt;p&gt;👉 Have you ever had tech let you down at a crucial moment (especially in Nigeria)? I’d love to hear your story.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>interview</category>
      <category>nigeria</category>
    </item>
    <item>
      <title>Why Every Dev Should Set Boundaries With Clients Early</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Fri, 19 Sep 2025 08:22:45 +0000</pubDate>
      <link>https://dev.to/debugger360/why-every-dev-should-set-boundaries-with-clients-early-4ij6</link>
      <guid>https://dev.to/debugger360/why-every-dev-should-set-boundaries-with-clients-early-4ij6</guid>
      <description>&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%2F6wzkv2yoc6nniv2wnyxn.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%2F6wzkv2yoc6nniv2wnyxn.png" alt="Set boundries. Photo credit: thevectorimpact.com" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I first started freelancing, I thought being “helpful” meant saying yes to everything.&lt;/p&gt;

&lt;p&gt;“Yes, I can add that.”&lt;br&gt;
 “Yes, I’ll squeeze that in.”&lt;br&gt;
 “Yes, no problem.”&lt;/p&gt;

&lt;p&gt;But every “yes” without boundaries turned out to be a &lt;strong&gt;silent no&lt;/strong&gt; — no to my own time, no to my health, no to my focus.&lt;br&gt;
And that’s how I learned the hard way: &lt;strong&gt;scope creep is real.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Truth About Boundaries&lt;/strong&gt;&lt;br&gt;
A lot of devs, especially when we’re just starting out, fear that setting boundaries will scare clients away. We think if we speak up, they’ll run to the next freelancer who’s “more flexible.”&lt;/p&gt;

&lt;p&gt;But here’s the reality I’ve discovered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Boundaries don’t make you rigid — they make you reliable.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear agreements don’t push serious clients away — they attract them.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Saying “this will cost extra” isn’t being difficult — it’s being professional.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The clients who run when you set boundaries are the same ones who were going to drain you anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Guardrails Now&lt;/strong&gt;&lt;br&gt;
These days, I don’t start any project without three simple things:&lt;br&gt;
✔️ A &lt;strong&gt;written agreement&lt;/strong&gt; (even if it’s just a simple contract)&lt;br&gt;
 ✔️ A &lt;strong&gt;clear scope&lt;/strong&gt; — what’s included, what’s not&lt;br&gt;
 ✔️ A plan for how &lt;strong&gt;extras&lt;/strong&gt; will be handled (because there will always be extras)&lt;/p&gt;

&lt;p&gt;This doesn’t just protect me; it actually makes the project smoother for the client. Everyone knows what to expect, and trust grows from that clarity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Note to Nigerian Developers&lt;/strong&gt;&lt;br&gt;
In our ecosystem (where clients sometimes expect magic for peanuts 🥲), it’s even more important to set these boundaries. Because if we don’t value our time, skills, and sanity, no one else will.&lt;br&gt;
Boundaries aren’t walls. They’re guardrails. They keep both you and the client safe on the road to a successful project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Word&lt;/strong&gt;&lt;br&gt;
To my fellow devs: set your boundaries early. Trust me, you’ll thank yourself later.&lt;br&gt;
👉 What’s one boundary you wish you set earlier in your career? Drop it in the comments — maybe another dev will learn from your story.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How I Handled Scope Creep on a Client Project</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Mon, 15 Sep 2025 14:59:06 +0000</pubDate>
      <link>https://dev.to/debugger360/how-i-handled-scope-creep-on-a-client-project-3fpe</link>
      <guid>https://dev.to/debugger360/how-i-handled-scope-creep-on-a-client-project-3fpe</guid>
      <description>&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%2Fgqf8o9jehla34gcxsny3.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%2Fgqf8o9jehla34gcxsny3.jpg" alt="Scope creep photo credit: https://builtin.com" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I first started freelancing as a developer, I thought building a simple blog site in PHP would be a straightforward project.&lt;br&gt;
 Spoiler: it wasn’t.&lt;br&gt;
What began as “just a blog” quickly turned into something else.&lt;br&gt;
The client kept asking:&lt;br&gt;
“Can we add this extra feature?”&lt;/p&gt;

&lt;p&gt;“Just a small tweak here.”&lt;/p&gt;

&lt;p&gt;“Maybe a dashboard too?”&lt;/p&gt;

&lt;p&gt;Individually, none of these requests looked harmful. But together, they transformed a blog into something resembling a mini social network. And that’s when I had my first real encounter with scope creep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Went Wrong&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The truth? The client wasn’t being malicious.&lt;br&gt;
 They didn’t realize how “small changes” add up in terms of development time, testing, and maintenance.&lt;br&gt;
The mistake was mine.&lt;br&gt;
 I never:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defined the scope clearly before starting.&lt;/li&gt;
&lt;li&gt;Put the agreement in writing.&lt;/li&gt;
&lt;li&gt;Set up a system for handling new requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because of that, I found myself working longer hours, juggling new features I hadn’t priced for, and watching the project grow way beyond what I’d signed up for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That project became one of my biggest teachers. It showed me that scope creep isn’t just about clients asking for more — it’s about the developer not setting boundaries.&lt;br&gt;
Here are three lessons I carry with me to every project now:&lt;br&gt;
Document everything. Before starting, outline exactly what the project includes (and what it doesn’t).&lt;/p&gt;

&lt;p&gt;Add a clause for change requests. Extra features → extra cost. It’s not rude; it’s professional.&lt;/p&gt;

&lt;p&gt;Communicate early and clearly. Don’t wait until you’re drowning to speak up. The moment a new request pops up, clarify how it affects the timeline and budget.&lt;/p&gt;

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

&lt;p&gt;Scope creep is one of those silent killers in software development. It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Destroy your timeline.&lt;/li&gt;
&lt;li&gt;Burn you out.&lt;/li&gt;
&lt;li&gt;Create tension between you and the client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it doesn’t have to. With clear communication and boundaries, projects run smoother, relationships stay intact, and both devs and clients leave happier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
That early PHP blog project was a wake-up call for me. Today, I don’t start any project without proper guardrails in place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To fellow developers:&lt;/strong&gt; learn this lesson early — your sanity will thank you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To clients:&lt;/strong&gt; when developers set boundaries, it’s not resistance. It’s a way to protect the project (and you) from spiraling out of control.&lt;br&gt;
Because trust me: scope creep can drown you if you let it.&lt;/p&gt;

&lt;p&gt;💬 Have you ever dealt with scope creep? How did you handle it?&lt;/p&gt;

</description>
      <category>php</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Art of Debugging</title>
      <dc:creator>Churchill Emmanuel</dc:creator>
      <pubDate>Fri, 12 Sep 2025 12:22:36 +0000</pubDate>
      <link>https://dev.to/debugger360/the-art-of-debugging-5bdl</link>
      <guid>https://dev.to/debugger360/the-art-of-debugging-5bdl</guid>
      <description>&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%2F8pv1ppdbndqs3ceiocy5.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%2F8pv1ppdbndqs3ceiocy5.jpg" alt="open seseme" width="720" height="727"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Debugging is one of those things every developer dreads at first. You write your code, you’re confident it’ll run — and then boom: red errors, broken features, nothing works the way you expected.&lt;/p&gt;

&lt;p&gt;For a long time, debugging felt like punishment to me. Hours spent staring at a blank screen, scrolling through endless error messages, wondering if I was even cut out for this path.&lt;/p&gt;

&lt;p&gt;But somewhere along the line, I realized something: debugging is not just about fixing broken code.&lt;br&gt;
It’s about training your mind to stay calm when everything seems to be falling apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Errors Have Stories&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every error I’ve encountered has had a story.&lt;br&gt;
Sometimes it was as small as a missing semicolon.&lt;br&gt;
Other times it was a deeper lesson: rushing through code, overlooking documentation, or simply stepping into a concept I didn’t yet understand.&lt;/p&gt;

&lt;p&gt;Take this classic PHP example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
// What I thought would run
echo "Hello World  

// What I actually got: Parse error: syntax error, unexpected end of file
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One missing quotation mark broke the entire script.&lt;br&gt;
Frustrating? Absolutely.&lt;br&gt;
But also a reminder: slow down, read carefully, and respect the details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging as Growth&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The more I debugged, the more I noticed something strange: I wasn’t just fixing code — I was fixing myself.&lt;/p&gt;

&lt;p&gt;For example, in Laravel, I once chased down an error that said:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQLSTATE[42S02]: Base table or view not found: 1146 Table 'userss' doesn't exist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I had written &lt;code&gt;userss&lt;/code&gt; instead of &lt;code&gt;users&lt;/code&gt;. Hours wasted… until I laughed at myself.&lt;br&gt;
Now? I always double-check migrations and spelling before running queries.&lt;/p&gt;

&lt;p&gt;These bugs taught me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Patience when things don’t make sense right away.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resilience when I hit the same wall repeatedly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Humility in admitting I don’t have all the answers (yet).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And most importantly, that bugs aren’t failures — they’re signposts, pointing me to what I need to understand next.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;From Punishment to Process&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, debugging feels less like a punishment and more like a process of becoming.&lt;br&gt;
It’s an art form: the art of turning chaos into clarity.&lt;/p&gt;

&lt;p&gt;Every time I step into the debugging process, I’m not just solving a problem — I’m refining how I think, how I approach challenges, and how I adapt under pressure.&lt;/p&gt;

&lt;p&gt;And honestly, that’s why I’ve grown to love it.&lt;/p&gt;

&lt;p&gt;Because if you can survive debugging, you can survive almost anything.&lt;/p&gt;

&lt;p&gt;✦ What about you? Do you see debugging as a chore, or has it taught you something deeper about yourself?&lt;/p&gt;

&lt;p&gt;💡 I’m sharing my journey as a developer from Nigeria — the struggles, the wins, and the lessons learned along the way. If this resonates, stick around for more.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>growth</category>
      <category>devjournal</category>
      <category>debuggerscribe</category>
    </item>
  </channel>
</rss>
