<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[(Kakpo) Kleber Vincent]]></title><description><![CDATA[(Kakpo) Kleber Vincent]]></description><link>https://kakpoklebervincent.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>(Kakpo) Kleber Vincent</title><link>https://kakpoklebervincent.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 17:05:48 GMT</lastBuildDate><atom:link href="https://kakpoklebervincent.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Rediscovering the Fundamentals: Where My DevOps Journey Actually Begins]]></title><description><![CDATA[Before touching a single pipeline, container, or cloud console, the DevOps Micro Internship (DMI) with Agentic AI starts somewhere quieter: the internet itself.
Week 0 wasn't about tools. It was about]]></description><link>https://kakpoklebervincent.hashnode.dev/rediscovering-the-fundamentals-where-my-devops-journey-actually-begins</link><guid isPermaLink="true">https://kakpoklebervincent.hashnode.dev/rediscovering-the-fundamentals-where-my-devops-journey-actually-begins</guid><dc:creator><![CDATA[Kakpo Kleber Vincent]]></dc:creator><pubDate>Thu, 30 Jul 2026 03:49:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a520a7da154f01ccbea8d7a/7838256e-bb57-4bde-8641-4cbe47a032e2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Before touching a single pipeline, container, or cloud console, the DevOps Micro Internship (DMI) with Agentic AI starts somewhere quieter: the internet itself.</p>
<p>Week 0 wasn't about tools. It was about making sure the ground beneath every tool actually made sense.</p>
<h3>Starting With a Question I Thought I Already Knew</h3>
<p>I opened ChatGPT and asked a simple question:</p>
<p>What is a protocol in networking?</p>
<p>Having spent over 14 years as a Wireless RAN Engineer, I expected nothing more than a quick refresher. Instead, approaching the question honestly, as someone transitioning back into hands-on technical work after years away, and asking for real-life analogies instead of textbook definitions completely changed the learning experience.</p>
<p>A protocol, explained simply, is an agreed-upon set of rules that two systems follow so they can understand each other, much like two people need a shared language before a conversation can make sense.</p>
<p>It sounds simple, but it's the kind of understanding that makes every acronym that follows, TCP, IP, HTTP, finally click instead of simply being memorized.</p>
<h3>Making It Concrete: EpicReads</h3>
<p>To reinforce the concept, I worked through a practical scenario: a friend launching an online bookstore called EpicReads, hosted on a server in Finland.</p>
<p>How does someone in another country actually reach that website?</p>
<p>The answer involves several layers working together.</p>
<p><strong>Packet Switching.</strong> Rather than sending an entire webpage as one large file, packet switching breaks it into many small packets. These packets can travel across different routes on the internet before being reassembled by the recipient's device.</p>
<p><strong>IP Addressing.</strong> Every device connected to the internet, including the EpicReads server, has a unique IP address. Think of it as a digital street address that tells the network exactly where each packet should be delivered.</p>
<p><strong>TCP/IP.</strong> This pairing forms the backbone of internet communication. TCP (Transmission Control Protocol) ensures that every packet arrives correctly, in the proper order, and without corruption. IP (Internet Protocol) determines the most efficient route for those packets to travel between the client and the server. Together, they make reliable communication over the internet possible.</p>
<p><strong>HTTP and HTTPS.</strong> Once the packets reach the server, HTTP (HyperText Transfer Protocol) defines how the browser requests web pages and how the server responds. HTTPS builds on HTTP by adding encryption through SSL/TLS, protecting sensitive information such as login credentials, payment details, and personal data while it travels across the internet.</p>
<p>None of these concepts are particularly difficult in isolation. The real value comes from understanding how they work together as one complete process.</p>
<h3>Two Ways to Build the Same Bookstore</h3>
<p>The next lesson focused on application architecture.</p>
<p>We compared a two-tier architecture, where the frontend communicates directly with the database, against a three-tier architecture, where the frontend, backend, and database are separated into independent layers.</p>
<p>For EpicReads, the three-tier design might look like this:</p>
<ul>
<li><p>Frontend: Next.js or React</p>
</li>
<li><p>Backend: Node.js with Express</p>
</li>
<li><p>Database: MySQL or MongoDB</p>
</li>
</ul>
<p>This separation isn't about adding unnecessary complexity. Instead, it improves maintainability, scalability, security, and flexibility. Each layer can evolve independently, making the application much easier to manage as it grows.</p>
<p>It's also the architecture you'll encounter repeatedly when working with modern cloud-native applications.</p>
<h3>Giving the Bookstore a Name</h3>
<p>The final networking concept was DNS (Domain Name System).</p>
<p>Technically, EpicReads could be accessed directly through its IP address. Practically, nobody wants to memorize a long sequence of numbers.</p>
<p>DNS solves this problem much like your phone's contact list. Instead of remembering a phone number, you simply remember a person's name. When someone types <a href="http://epicreads.com">epicreads.com</a>, DNS quietly translates that domain name into the server's IP address behind the scenes.</p>
<p>Connecting a domain name to an IPv4 address requires an A Record, a small but essential DNS record that performs this mapping.</p>
<p>It's one of those concepts that seems basic until you realize how frequently you'll encounter it in cloud engineering.</p>
<h3>Closing the Loop With the Terminal</h3>
<p>Week 0 ended with something practical.</p>
<p>I opened Visual Studio Code, launched the integrated terminal, and verified that my development environment was working correctly.</p>
<p>It may seem like a small task, but it reinforces one of the most valuable habits in DevOps: always verify your environment before building on top of it. That simple practice saves countless hours of troubleshooting later.</p>
<h3>What This Week Actually Was</h3>
<p>Week 0 wasn't about deployments. It wasn't about Docker, Kubernetes, CI/CD pipelines, or cloud infrastructure.</p>
<p>It was about building the foundation that makes all of those technologies easier to understand.</p>
<p>By the end of the week, I had revisited how data moves across the internet, how applications are structured, how domain names become IP addresses, and how to begin working comfortably within the development tools I'll rely on throughout this journey.</p>
<p>Sometimes the fastest way to move forward is to revisit the fundamentals with fresh eyes.</p>
<p>The technology hasn't changed. My understanding of it has.</p>
<hr />
<p>Grateful to Pravin Mishra for a curriculum that rewards curiosity over shortcuts, and to Anjana Muthunayake (Lead Co-Mentor) and Joy Ukpabi (co-mentor) for their continued support and guidance.</p>
<h3>About the DevOps Micro Internship</h3>
<p>This post is part of my learning journey through the DevOps Micro Internship (DMI) with Agentic AI, Cohort 3, led by Pravin Mishra.</p>
<p>I'm documenting every week's lessons and practical experiences as I transition from over 14 years in Wireless RAN Engineering into Cloud and DevOps Engineering.</p>
<p>You can follow my progress here:</p>
<ul>
<li><p>My DMI Progress Dashboard: <a href="https://dmi.pravinmishra.com/s/kakpoklebervincent.html">https://dmi.pravinmishra.com/s/kakpoklebervincent.html</a></p>
</li>
<li><p>Learn more about the DevOps Micro Internship: <a href="https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3">https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3</a></p>
</li>
</ul>
<p>If you're also transitioning into Cloud or DevOps, I hope these weekly reflections help make the journey a little clearer.</p>
]]></content:encoded></item><item><title><![CDATA[From My First Pull Request to Building My Own Git Safety Net]]></title><description><![CDATA[This week in the DevOps Micro Internship (DMI) with Agentic AI, Cohort 3, I completed two learning practices that looked completely unrelated on the surface.
One was about contributing to someone else]]></description><link>https://kakpoklebervincent.hashnode.dev/from-my-first-pull-request-to-building-my-own-git-safety-net</link><guid isPermaLink="true">https://kakpoklebervincent.hashnode.dev/from-my-first-pull-request-to-building-my-own-git-safety-net</guid><dc:creator><![CDATA[Kakpo Kleber Vincent]]></dc:creator><pubDate>Sat, 25 Jul 2026 16:41:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a520a7da154f01ccbea8d7a/8b32c9e7-a648-430e-a499-cbbe66b661f2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week in the DevOps Micro Internship (DMI) with Agentic AI, Cohort 3, I completed two learning practices that looked completely unrelated on the surface.</p>
<p>One was about contributing to someone else's project.</p>
<p>The other was about protecting my own.</p>
<p>By the end of the week, I realized they were teaching exactly the same lesson from two different directions: professional software development is built on trust, and trust is earned through verification, not assumptions. Whether you're proposing a change to an open-source project or reviewing your own code before it reaches GitHub, the principle is the same. Build workflows that make mistakes difficult and verification easy.</p>
<h2>Part 1: Learning the Real Open-Source Workflow</h2>
<p>I'd read about fork-based collaboration before. Actually doing it was something else entirely.</p>
<p>On paper, the task sounded simple: add my name to a shared <code>pull_</code><a href="http://request.md"><code>request.md</code></a> file and open a Pull Request. The real learning wasn't adding one line of text. It was everything that happened around that one line.</p>
<p>I forked the upstream repository into my own GitHub account instead of cloning it directly, because contributors don't normally have permission to push to the original repository. Inside my local clone, I configured two remotes:</p>
<ul>
<li><p><code>origin</code>, my fork, where I own the changes</p>
</li>
<li><p><code>upstream</code>, the original project, where I receive updates</p>
</li>
</ul>
<p>That separation is the foundation of open-source collaboration. You never push directly to a project you don't own.</p>
<p>From there, I created a dedicated feature branch, made one focused documentation change, committed it with a meaningful message, synchronized my branch with upstream, and pushed the change to my fork before opening a Pull Request.</p>
<p>None of that surprised me. What surprised me was the few quiet minutes before clicking Create Pull Request.</p>
<p>I stopped. I checked the base repository. Then the base branch. Then the head repository. Then the compare branch. Finally, I reviewed the file diff line by line, exactly one file, exactly one added line, nothing else touched.</p>
<p>That small habit, verify before submitting, felt almost unnecessary at the time. A few days later, it turned out to be one of the most valuable lessons of the week.</p>
<h2>Part 2: When a Habit Becomes a Safety Net</h2>
<p>The next practice asked a very different question. Instead of learning how to collaborate, I was asked to build a workflow that could prevent risky changes before they ever became Pull Requests.</p>
<p>Part of that practice involved opening another Pull Request. This time, the target wasn't the shared upstream repository, it was my own fork, because the files were learning artifacts, not contributions intended for the class repository.</p>
<p>When I reached GitHub's comparison page, something interesting happened. GitHub had quietly remembered the destination from my previous Pull Request and automatically selected the upstream repository as the base.</p>
<p>If I had accepted the default without checking, I would have proposed a fake AWS key, a demonstration Git hook, and a personal Claude Code skill to the shared repository used by the entire cohort. It wouldn't have created a real security incident, since the key was intentionally fake, but it would have demonstrated something equally important: tools remember, defaults persist, and convenience can quietly create mistakes.</p>
<p>Because I'd already built the habit of verifying every Pull Request before submitting it, I caught the issue immediately, switched the base repository to my own fork, and continued. That moment reinforced something I hadn't fully appreciated before, verification isn't something you learn once. It's a discipline you practice every single time.</p>
<h2>Part 3: Building a Safety Net That Knows Its Own Limits</h2>
<p>The second half of the week focused on building two different layers of protection into my Git workflow. The interesting part wasn't the tools themselves, it was understanding why neither one should ever exist alone.</p>
<p><strong>Layer one: a deterministic gate.</strong></p>
<p>The first layer was a Git pre-commit hook written entirely in Bash. No AI, no reasoning, no interpretation. Before every commit, it scanned staged files for AWS access-key patterns, private key headers, and oversized files.</p>
<p>To test it, I deliberately staged a fake AWS access key. The hook blocked the commit immediately. Every time, the outcome never changed, no judgment, no negotiation, just deterministic rules.</p>
<p>That consistency is exactly what makes fixed-rule automation valuable. But it's also where its limitations become obvious. The hook only catches what it's explicitly programmed to recognize. If a secret doesn't match a known pattern, the hook has no understanding that it's a secret at all. Rules are reliable. Rules are also limited.</p>
<p><strong>Layer two: a context-aware reviewer.</strong></p>
<p>The second layer approached the exact same staged changes differently. I built a Claude Code skill called <code>/pr-ready</code>. Unlike the hook, it wasn't looking for predefined patterns alone, it was trying to understand the change.</p>
<p>It identified the fake AWS key. It also noticed a debug <code>echo</code> statement that would have exposed that key if the script had actually run. Then it highlighted missing documentation, and drafted a Pull Request title and description for me to review.</p>
<p>That was the moment the distinction became clear. The hook enforced rules. The AI reviewed context. One detected patterns. The other explained why those patterns mattered.</p>
<p>But perhaps the most important design decision wasn't what the AI could do. It was what it couldn't do.</p>
<p>The skill was deliberately configured as read-only. It couldn't modify files. It couldn't commit code. It couldn't push to GitHub. It couldn't open a Pull Request. That wasn't a missing feature, it was an intentional safeguard.</p>
<p>AI can provide analysis. AI can draft documentation. AI can even identify problems humans overlook. But state-changing actions belong to the engineer who is accountable for the result. Every file I fixed, every commit I created, every push, every Pull Request, those decisions remained mine. I used AI as a collaborator, not as a substitute for engineering responsibility.</p>
<h2>The Pattern Hidden Inside Both Practices</h2>
<p>Looking back, I realized these two hands-on practices followed exactly the same structure we'd explored earlier in the internship through the Agentic Loop: <strong>Gather → Analyze → Human Act → Verify</strong>.</p>
<p>In the open-source contribution workflow, gathering meant reviewing the Pull Request, checking every field, and inspecting the diff before submitting it. Analyzing meant confirming the proposed change matched my intention. Acting meant creating the Pull Request. Verifying meant confirming that exactly the right change had been proposed.</p>
<p>In the Git safety-net exercise, both the hook and the AI skill gathered information from the staged changes. The hook analyzed those changes through deterministic rules. The AI analyzed them through reasoning and context. But every action that changed the repository, editing files, committing code, pushing to GitHub, opening the Pull Request, remained a human responsibility. Verification came afterward, rerunning both checks to confirm the issues had genuinely been resolved rather than assuming they had.</p>
<p>The more I reflected on it, the more I realized this isn't just a Git workflow. It's a pattern for building reliable engineering systems. Automation gathers information faster than humans. AI helps interpret that information more intelligently. But accountability still belongs to the person making the final decision.</p>
<h2>Final Thoughts</h2>
<p>When I started this week's work, I thought I was learning Git.</p>
<p>By the end of the week, I realized I was learning something much broader. I wasn't just learning how to contribute to open source, I was learning how professional teams build confidence in every change they ship.</p>
<p>Good engineering isn't simply about writing code. It's about designing workflows that help people trust one another. That trust doesn't come from automation alone. It doesn't come from AI alone. It comes from combining deterministic safeguards, intelligent analysis, and human judgment into a process that makes mistakes less likely and accountability unmistakably clear.</p>
<p>For me, that entire week comes down to one sentence: fixed rules give you a guaranteed floor. AI gives you judgment. A human decides what actually happens.</p>
<hr />
<p>A huge thank you to Pravin Mishra for a curriculum that rewards curiosity over shortcuts, and to Anjana Muthunayake (Lead Co-Mentor) and Joy Ukpabi (Co-Mentor) for their continued guidance and encouragement throughout this journey.</p>
<p><em>P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by</em> <a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/"><em>Pravin Mishra</em></a><em>. My graded progress is public:</em> <a href="https://dmi.pravinmishra.com/s/kakpoklebervincent.html"><em>https://dmi.pravinmishra.com/s/kakpoklebervincent.html</em></a> <em>· Start your DevOps journey:</em> <a href="https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3"><em>https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3</em></a></p>
]]></content:encoded></item><item><title><![CDATA[From My First Bash Script to an AI-Powered Linux Incident Investigator]]></title><description><![CDATA["Automation doesn't replace engineers. It amplifies good engineering."
Artificial Intelligence has become one of the biggest talking points in technology today. Every week, a new AI tool promises to w]]></description><link>https://kakpoklebervincent.hashnode.dev/from-my-first-bash-script-to-an-ai-powered-linux-incident-investigator</link><guid isPermaLink="true">https://kakpoklebervincent.hashnode.dev/from-my-first-bash-script-to-an-ai-powered-linux-incident-investigator</guid><dc:creator><![CDATA[Kakpo Kleber Vincent]]></dc:creator><pubDate>Thu, 23 Jul 2026 11:57:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a520a7da154f01ccbea8d7a/9814e26c-e158-4f9c-a7d2-02a5d8597347.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>"Automation doesn't replace engineers. It amplifies good engineering."</p>
<p>Artificial Intelligence has become one of the biggest talking points in technology today. Every week, a new AI tool promises to write code, automate deployments, troubleshoot systems, or even replace parts of a software engineer's daily workflow. It's easy to believe that AI is becoming the engineer while humans simply supervise.</p>
<p>I used to think that way too.</p>
<p>When I began the <a href="https://dmi.pravinmishra.com">DevOps Micro Internship (DMI) Cohort 3 with Agentic AI</a>, I was excited about learning Claude Code, AI agents, and automation. I imagined building intelligent assistants capable of solving operational problems with little human involvement.</p>
<p>What I didn't expect was that my biggest lesson wouldn't come from AI at all.</p>
<p>It came from Bash.</p>
<p>Yes, the same command-line scripting language that has existed for decades.</p>
<p>Over two assignments, I discovered something that completely changed how I think about automation:</p>
<p>AI without reliable evidence is just sophisticated guessing. Bash provides the evidence. AI provides the reasoning. Engineers provide the judgment.</p>
<p>That realization became the foundation of everything I built.</p>
<p>In this article, I'll share how I progressed from writing my very first Bash script to building an AI-assisted Linux incident investigation workflow using Claude Code, one that deliberately refuses to make changes without human approval.</p>
<p>This wasn't simply an exercise in writing scripts.</p>
<p>It was an exercise in learning how modern DevOps engineers combine automation, observability, artificial intelligence, and human accountability into a safe operational workflow.</p>
<h2>Why Bash Still Matters in the Age of AI</h2>
<p>Whenever a new technology becomes popular, there's a tendency to believe older technologies have become obsolete.</p>
<p>People once said graphical interfaces would eliminate the command line.</p>
<p>Then cloud platforms arrived, and people assumed Linux administration would disappear.</p>
<p>Today, many people believe AI will replace scripting.</p>
<p>After completing these assignments, I can confidently say the opposite is true.</p>
<p>The more capable AI becomes, the more valuable good automation becomes.</p>
<p>Consider this simple question:</p>
<p>How does an AI know whether your Linux server is healthy?</p>
<p>It doesn't.</p>
<p>Claude doesn't magically inspect your server.</p>
<p>It doesn't know if Nginx is running.</p>
<p>It doesn't know whether your disk is almost full.</p>
<p>It doesn't know if your application responds with HTTP 200 or HTTP 500.</p>
<p>Someone, or something, must collect that information first.</p>
<p>That's where Bash comes in.</p>
<p>Bash isn't simply a scripting language.</p>
<p>It's a bridge between the operating system and automation.</p>
<p>It transforms raw system information into structured, repeatable evidence that both humans and AI can understand.</p>
<p>Without Bash, AI has nothing reliable to analyze.</p>
<h2>Learning Bash One Building Block at a Time</h2>
<p>Like many people transitioning into DevOps, I didn't begin by writing complex automation.</p>
<p>I began with the basics.</p>
<p>That stage focused on building a solid Bash foundation before attempting any real operational automation. Rather than jumping straight into advanced scripting, the exercises introduced each concept progressively, from understanding the Bash environment to combining multiple scripting techniques into a reusable automation workflow.</p>
<p>Looking back, I now realize each task was preparing me for something much larger.</p>
<h3>Step One: Understanding the Environment</h3>
<p>Before writing any automation, I first needed to understand the environment where my scripts would run.</p>
<p>One of the first commands I executed was:</p>
<pre><code class="language-bash">echo $SHELL
</code></pre>
<p>This confirmed the default shell running on my Ubuntu system.</p>
<p>Next, I checked the installed Bash version:</p>
<pre><code class="language-bash">bash --version
</code></pre>
<p>At first glance, these commands seem trivial.</p>
<p>But in production environments, assumptions are dangerous.</p>
<p>Different Bash versions support different features.</p>
<p>Verifying the environment before writing scripts is no different from confirming software versions before deploying applications.</p>
<p>Good engineers don't assume.</p>
<p>They verify.</p>
<p>I also created a dedicated workspace to organize every script throughout the assignment.</p>
<p>Instead of scattering files around my home directory, everything lived inside a structured project folder.</p>
<p>It might sound like a small detail.</p>
<p>It isn't.</p>
<p>Well-organized projects become easier to maintain, debug, and extend over time.</p>
<p>That same principle applies whether you're managing Bash scripts, Terraform modules, Kubernetes manifests, or entire software systems.</p>
<h3>Writing My First Bash Script</h3>
<p>Every programmer remembers the excitement of writing their first working program.</p>
<p>Mine was no different.</p>
<p>The script itself was simple.</p>
<p>It displayed a welcome message, printed my name, and showed the current date and time.</p>
<p>Although basic, this script introduced several concepts that every Bash script depends on:</p>
<p>the shebang (<code>#!/bin/bash</code>), sequential command execution, executable permissions, and running scripts from the terminal.</p>
<p>After creating the script, I made it executable using:</p>
<pre><code class="language-bash">chmod +x first-script.sh
</code></pre>
<p>Then executed it using:</p>
<pre><code class="language-bash">./first-script.sh
</code></pre>
<p>That small exercise introduced an important Linux concept.</p>
<p>A script isn't automatically executable simply because it contains valid commands.</p>
<p>Permissions matter.</p>
<p>Linux requires explicit permission before allowing code to run.</p>
<p>It's one of many examples where Linux prioritizes security over convenience.</p>
<p>That philosophy appears repeatedly throughout DevOps engineering.</p>
<h3>Variables: Making Scripts Flexible</h3>
<p>Imagine writing a script that contains your name twenty different times.</p>
<p>Now imagine changing your name.</p>
<p>Every occurrence would need updating.</p>
<p>Variables solve that problem.</p>
<p>Instead of hardcoding information repeatedly, I learned to store values once and reuse them throughout the script.</p>
<p>For example:</p>
<pre><code class="language-bash">name="Kleber Vincent"
role="DevOps Engineer"
location="Nigeria"
</code></pre>
<p>Those values could then be displayed anywhere using:</p>
<pre><code class="language-bash">echo "$name"
</code></pre>
<p>While this seems elementary, variables are one of the most powerful concepts in scripting.</p>
<p>They allow automation to adapt.</p>
<p>The same script can be reused for different users, servers, applications, or environments simply by changing a few values.</p>
<p>Even better, variables don't only store text.</p>
<p>Using command substitution:</p>
<pre><code class="language-bash">today=$(date)
</code></pre>
<p>the script dynamically captured the current system date every time it ran.</p>
<p>Instead of producing static output, the script became aware of its environment.</p>
<p>That distinction is what separates automation from simple text output.</p>
<h3>Arrays: Organizing Related Information</h3>
<p>As my scripts became more capable, I encountered another challenge.</p>
<p>What happens when one variable isn't enough?</p>
<p>Suppose I wanted to work with several DevOps tools:</p>
<p>Git, Docker, Kubernetes, Jenkins, Terraform.</p>
<p>Creating five separate variables would quickly become messy.</p>
<p>Instead, Bash arrays allow related information to be grouped together under a single variable.</p>
<p>For example:</p>
<pre><code class="language-bash">tools=("Git" "Docker" "Terraform" "Kubernetes")
</code></pre>
<p>Now, instead of managing four different variables, the script manages one collection.</p>
<p>Arrays make automation cleaner, more scalable, and easier to extend.</p>
<p>More importantly, they prepare the way for loops.</p>
<p>And loops completely changed how I thought about scripting.</p>
<h3>Loops: Eliminating Repetition Through Automation</h3>
<p>One of the biggest lessons I learned during this stage was that automation isn't just about writing commands, it is about avoiding repetition.</p>
<p>Imagine having a list of twenty servers to check manually.</p>
<p>You could type the same command twenty times.</p>
<p>Or you could write a loop that does it for you.</p>
<p>That is exactly why loops exist.</p>
<p>To understand this concept, I first created a simple counter that displayed numbers from one to five. Although the task itself was straightforward, it introduced one of the most powerful ideas in scripting: allowing a computer to repeat work consistently without manual intervention. Later, I combined loops with arrays to process multiple values automatically, demonstrating how repetitive tasks can be transformed into efficient automation.</p>
<p>A simple example looked like this:</p>
<pre><code class="language-bash">for number in {1..5}
do
    echo "Number: $number"
done
</code></pre>
<p>Five lines of output.</p>
<p>One block of code.</p>
<p>The computer handled the repetition.</p>
<p>That may not sound revolutionary, but almost every automation tool used in DevOps relies on this same principle.</p>
<p>When Ansible configures multiple servers, when Terraform provisions multiple resources, when Kubernetes schedules multiple Pods, something behind the scenes is iterating over a collection of objects.</p>
<p>Learning loops in Bash wasn't simply learning syntax.</p>
<p>It was learning how computers automate repetitive work reliably.</p>
<h3>File Validation: Never Assume</h3>
<p>Another lesson that stood out to me was the importance of validating resources before acting on them.</p>
<p>Suppose your script expects a configuration file.</p>
<p>What happens if someone accidentally deletes it?</p>
<p>Without validation, the script may fail unexpectedly.</p>
<p>Or worse, it may produce incorrect results.</p>
<p>To prevent that, I learned how Bash checks whether files and directories exist before continuing.</p>
<p>Using file test operators such as <code>-d</code> and <code>-f</code>, the script could determine whether a directory or file was present before attempting any operation.</p>
<p>This might seem like defensive programming.</p>
<p>That's because it is.</p>
<p>Production systems should never assume required resources exist.</p>
<p>They verify first.</p>
<p>That single habit dramatically reduces failures caused by missing files, incorrect paths, or unexpected environmental changes.</p>
<h3>Teaching Scripts to Make Decisions</h3>
<p>Until this point, every script I wrote followed instructions exactly as written.</p>
<p>But real-world automation often needs to decide what to do.</p>
<p>Should it continue? Should it stop? Should it display an error? Should it notify an engineer?</p>
<p>That's where conditional statements became essential.</p>
<p>Using if-else logic, I created a script that evaluated a student's score and displayed either Pass or Retry depending on the result. Although simple, the exercise demonstrated how automation can respond differently based on changing input rather than producing the same output every time.</p>
<p>A simplified example looked like this:</p>
<pre><code class="language-bash">if [ "$score" -ge 70 ]
then
    echo "Pass"
else
    echo "Retry"
fi
</code></pre>
<p>While the example involved exam scores, the same concept applies everywhere in DevOps.</p>
<p>If disk usage exceeds 90 percent, raise an alert. If Nginx isn't running, report a failure. If an application returns HTTP 200, mark it healthy.</p>
<p>Good automation doesn't blindly execute commands.</p>
<p>It evaluates conditions before deciding what happens next.</p>
<h3>Functions: Writing Scripts Like an Engineer</h3>
<p>By the end of this stage, my scripts were becoming noticeably longer.</p>
<p>Instead of placing everything inside one large file, I learned how to organize related tasks into reusable functions.</p>
<p>This was one of my favorite topics.</p>
<p>Functions allow you to group related commands under a meaningful name.</p>
<p>Instead of writing the same code repeatedly, you simply call the function whenever it's needed.</p>
<p>For example:</p>
<pre><code class="language-bash">show_header()
show_user()
show_tools()
show_result()
show_footer()
</code></pre>
<p>Each function had a single responsibility.</p>
<p>One displayed the script header. Another displayed user information. Another processed the DevOps tools checklist. Another summarized the results.</p>
<p>Separating logic into functions made the script easier to understand, maintain, and extend. The final automation exercise brought together variables, arrays, loops, conditionals, and functions into one structured workflow, demonstrating how individual Bash concepts work together to solve practical problems.</p>
<p>Looking back, this wasn't simply about making the script cleaner.</p>
<p>It was my first introduction to software design principles.</p>
<p>Large systems become manageable when they're divided into small, reusable components.</p>
<p>The same principle applies whether you're writing Bash, Python, Java, or designing cloud infrastructure.</p>
<h3>Looking Back at the Bash Fundamentals</h3>
<p>When I completed the final Bash automation script, I thought I had finished learning Bash.</p>
<p>In reality, I had only built the foundation.</p>
<p>At the time, my scripts could:</p>
<p>✔ Display information</p>
<p>✔ Store variables</p>
<p>✔ Process arrays</p>
<p>✔ Execute loops</p>
<p>✔ Validate files</p>
<p>✔ Make decisions</p>
<p>✔ Organize reusable functions</p>
<p>Those skills felt useful.</p>
<p>What I didn't yet realize was that every one of them would soon become part of a much larger system.</p>
<p>Variables would become configuration settings. Functions would become health checks. Arrays would define automated workflows. Conditionals would determine system health. Loops would execute repeated diagnostics.</p>
<p>The final Bash script wasn't the destination.</p>
<p>It was the beginning.</p>
<h2>From Learning Bash to Solving Real Problems</h2>
<p>One week later, a very different challenge appeared.</p>
<p>There were no counters. No student scores. No "Hello World."</p>
<p>Instead, the objective was to build something that resembled a real production support tool.</p>
<p>The next stage asked me to create a read-only Linux health triage system capable of investigating an Ubuntu server, collecting operational evidence, and integrating with Claude Code as a reusable AI skill. Rather than allowing the AI to make changes, the workflow followed a disciplined sequence: Gather, Analyze, Human Act, Verify.</p>
<p>This wasn't just another Bash exercise.</p>
<p>It was an incident response workflow.</p>
<p>The difference was immediately obvious.</p>
<p>Instead of writing scripts to demonstrate Bash syntax, I was now writing scripts to answer operational questions such as:</p>
<p>Is Nginx running? Is the server listening on Port 80? Can the application respond to an HTTP request? Is disk usage becoming a problem? Is there enough available memory?</p>
<p>These weren't academic questions.</p>
<p>They're exactly the kinds of checks engineers perform every day when diagnosing production issues.</p>
<p>For the first time, Bash stopped feeling like a scripting language.</p>
<p>It started feeling like an engineering tool.</p>
<p>And that was the moment everything clicked.</p>
<h2>Building a Linux Health Check Script That Thinks Like an Engineer</h2>
<p>By the time I reached this next stage, I already understood the building blocks of Bash.</p>
<p>Variables. Functions. Loops. Conditionals. File validation.</p>
<p>The next challenge wasn't learning new syntax.</p>
<p>It was learning how to combine those concepts into something genuinely useful.</p>
<p>Rather than creating another practice script, I was asked to build a Linux Health Check utility capable of gathering operational evidence from an Ubuntu server.</p>
<p>The goal wasn't to repair anything.</p>
<p>The script had one responsibility:</p>
<p>Observe the system. Report the facts. Change nothing.</p>
<p>That philosophy immediately stood out to me.</p>
<p>Many beginners assume automation should immediately restart services or delete temporary files whenever a problem is detected.</p>
<p>In production environments, that approach can create even bigger incidents.</p>
<p>Sometimes the safest action is to collect accurate information and allow an engineer to decide what happens next.</p>
<p>That became the guiding principle for everything that followed.</p>
<h3>The Five Questions Every Healthy Server Should Answer</h3>
<p>Instead of checking hundreds of different metrics, this stage focused on five essential health checks.</p>
<p>Each one represented a common source of production incidents.</p>
<p><strong>1. Is the Operating System Running Out of Disk Space?</strong></p>
<p>One of the easiest ways to bring down an application is to fill the disk.</p>
<p>Logs continue growing. Applications cannot write temporary files. Databases become unstable. Services begin failing for reasons that seem unrelated.</p>
<p>The first health check measured disk utilization using:</p>
<pre><code class="language-bash">df -h
</code></pre>
<p>Rather than displaying every mounted filesystem, the script extracted the information needed to determine whether disk usage remained within acceptable limits.</p>
<p>If utilization exceeded the defined threshold, the report clearly highlighted the issue.</p>
<p>No cleanup. No file deletion. Just evidence.</p>
<p><strong>2. Is Enough Memory Available?</strong></p>
<p>Applications depend on available RAM.</p>
<p>When memory becomes exhausted, performance drops dramatically. Processes may terminate unexpectedly. Linux may begin swapping heavily to disk.</p>
<p>Using standard Linux commands, the script gathered memory statistics and summarized the results in a format that both engineers and AI could interpret.</p>
<p>Again, the objective wasn't optimization.</p>
<p>It was visibility.</p>
<p><strong>3. Is Nginx Actually Running?</strong></p>
<p>For web applications, one of the quickest checks is confirming that the web server itself is operational.</p>
<p>Instead of guessing, the script queried the service directly.</p>
<pre><code class="language-bash">systemctl status nginx
</code></pre>
<p>or</p>
<pre><code class="language-bash">systemctl is-active nginx
</code></pre>
<p>The result immediately answered an important operational question.</p>
<p>Running? Stopped? Failed?</p>
<p>Instead of manually logging into servers during every incident, the automation collected the answer consistently every time.</p>
<p><strong>4. Is Port 80 Listening?</strong></p>
<p>A running service doesn't necessarily mean users can reach it.</p>
<p>Applications sometimes start successfully while failing to bind to the expected network port.</p>
<p>To verify this, the script checked whether HTTP traffic could actually be accepted.</p>
<p>Typical Linux networking tools made this verification straightforward.</p>
<p>The output became another piece of operational evidence.</p>
<p>One more fact. One less assumption.</p>
<p><strong>5. Does the Application Respond?</strong></p>
<p>This final check moved beyond infrastructure.</p>
<p>It tested the application itself.</p>
<p>Even if the operating system looked healthy, even if Nginx was running, even if Port 80 was listening, users still care about one thing.</p>
<p>Can the application respond?</p>
<p>Using a simple HTTP request, the script verified the application's availability.</p>
<p>A successful response confirmed that requests could reach the service.</p>
<p>An unexpected response immediately became part of the incident report.</p>
<h3>Why Read-Only Automation Matters</h3>
<p>One of my favorite design decisions in this project was something the script didn't do.</p>
<p>It never attempted to repair anything.</p>
<p>No service restarts. No package installations. No deleting files. No killing processes.</p>
<p>At first, I wondered why.</p>
<p>Wouldn't automation be more powerful if it fixed problems automatically?</p>
<p>The answer became clear after thinking like a production engineer.</p>
<p>Imagine an AI notices Nginx has stopped.</p>
<p>Should it restart the service?</p>
<p>Maybe. But what if the reason Nginx stopped was because the disk is full, the configuration file is corrupted, an SSL certificate expired, another application already occupies Port 80, or an engineer intentionally shut it down during maintenance?</p>
<p>Automatically restarting the service might hide the real problem or make the situation worse.</p>
<p>Instead, the workflow deliberately separates observation from action.</p>
<p>That single design choice dramatically reduces operational risk.</p>
<h3>From Raw Commands to Structured Evidence</h3>
<p>A Linux terminal produces enormous amounts of information.</p>
<p>Running a command like <code>df -h</code> may display several lines of output.</p>
<p>Another command might produce dozens more.</p>
<p>Humans can usually interpret that information.</p>
<p>AI, however, performs much better when information is organized consistently.</p>
<p>Instead of dumping raw command output, the Bash script transformed system information into structured sections, something like:</p>
<pre><code class="language-text">========== Disk Usage ==========
Filesystem      Used  Available  Use%
...

========== Memory ==========
...

========== Nginx ==========
Running

========== Port 80 ==========
Listening

========== HTTP Check ==========
HTTP 200 OK
</code></pre>
<p>Notice what happened.</p>
<p>The Bash script wasn't simply executing commands anymore.</p>
<p>It was creating a structured report.</p>
<p>That report became the "language" Claude Code would later read and analyze.</p>
<p>In other words: Bash gathered the evidence. The AI interpreted the evidence. The engineer made the final decision.</p>
<h3>Introducing Claude Code Into the Workflow</h3>
<p>This was the point where the whole project became truly exciting.</p>
<p>Instead of treating AI as something separate from Linux administration, the project combined them into a single workflow.</p>
<p>The Bash script collected reliable facts.</p>
<p>Claude Code received those facts.</p>
<p>Then Claude generated an operational assessment.</p>
<p>But there was one very important rule.</p>
<p>Claude never connected directly to the server.</p>
<p>It never executed Linux commands on its own initiative.</p>
<p>It only analyzed the report generated by Bash.</p>
<p>That distinction matters enormously.</p>
<p>The AI wasn't replacing Linux. It wasn't replacing Bash. It wasn't replacing engineering judgment.</p>
<p>It was acting as an intelligent analyst reviewing evidence collected through trusted automation.</p>
<h3>Designing an AI That Knows Its Limits</h3>
<p>One of the most valuable lessons from this stage wasn't technical.</p>
<p>It was philosophical.</p>
<p>AI should know what it cannot do.</p>
<p>The Claude skill was intentionally designed with clear boundaries. It must never restart services, modify files, install packages, delete data, or execute destructive commands.</p>
<p>Instead, its responsibilities were simple:</p>
<p>✔ Read the report.</p>
<p>✔ Explain what it sees.</p>
<p>✔ Suggest possible causes.</p>
<p>✔ Recommend safe next steps.</p>
<p>✔ Ask a human engineer to approve any corrective action.</p>
<p>That approach reflects one of the core principles of modern DevOps: automation should increase confidence, not increase risk.</p>
<p>Writing those constraints down felt different from writing a normal script. Instead of teaching the system what to do, I was teaching it what to refuse to do, no matter how obvious the fix seemed. When people imagine AI-powered operations, they often picture an assistant that immediately starts fixing things: restart Nginx, delete unnecessary files, install missing packages, reboot the server. That sounds impressive until the AI makes the wrong call.</p>
<p>Picture a production server where Nginx has stopped because the disk is full. Automatically restarting Nginx won't solve the problem, it could delay discovering the real root cause. Or picture a server where the application was intentionally stopped for scheduled maintenance. An AI that blindly restarts services in that situation would actually create an outage where none existed.</p>
<p>The safest AI isn't always the one that can do the most. Sometimes it's the one that knows when to stop and ask for human approval.</p>
<h3>The Gather, Analyze, Human Act, Verify Workflow</h3>
<p>One of my favorite aspects of this workflow was how closely it mirrored a real production support process.</p>
<p>Rather than jumping directly into remediation, the workflow followed a disciplined sequence.</p>
<p><strong>Step 1: Gather.</strong> Everything begins with Bash. The health check script collects evidence from the server. Instead of relying on assumptions, it captures measurable facts: disk usage, memory utilization, Nginx service status, port availability, HTTP response. At this stage, no decisions are made. The script simply observes.</p>
<p><strong>Step 2: Analyze.</strong> The generated report is then provided to Claude Code. Because the information is structured, the AI can quickly identify patterns, for example, "Disk usage is healthy," "Memory utilization is normal," "Nginx service is inactive," "HTTP endpoint cannot be reached." Instead of reading dozens of terminal outputs manually, engineers receive a concise operational summary. The AI becomes an intelligent interpreter rather than a system administrator.</p>
<p><strong>Step 3: Human Act.</strong> This is the most important step. After reviewing Claude's assessment, the engineer decides what should happen next. Maybe restarting Nginx is appropriate. Maybe the configuration file needs inspection. Maybe another engineer is already performing maintenance. Automation provides evidence. AI provides insight. Humans remain responsible for operational decisions. That balance dramatically reduces unnecessary risk.</p>
<p><strong>Step 4: Verify.</strong> Once corrective actions have been completed, the Bash script runs again. The new report confirms whether the issue has actually been resolved. This creates a simple but effective feedback loop:</p>
<pre><code class="language-text">Engineer identifies issue
        ↓
Collect evidence
        ↓
AI explains findings
        ↓
Human approves corrective action
        ↓
Run health checks again
        ↓
Verify resolution
</code></pre>
<p>Notice something important. The AI never assumes the problem has been solved. Verification comes from fresh evidence. That principle is fundamental to good engineering.</p>
<h2>Lessons That Changed My Perspective</h2>
<p>Before beginning these assignments, I viewed Bash as "just another scripting language."</p>
<p>Now I see it differently.</p>
<p>Bash is not simply about writing commands.</p>
<p>It is about creating repeatable operational knowledge.</p>
<p>Every function. Every conditional. Every loop. Every validation.</p>
<p>They all contribute to building reliable automation.</p>
<p>I also learned something equally important about artificial intelligence.</p>
<p>AI is most valuable when paired with trustworthy data.</p>
<p>Without evidence, even the smartest AI can only speculate.</p>
<p>With structured evidence, it becomes an incredibly effective assistant.</p>
<p>That distinction changed how I think about modern DevOps.</p>
<p>The future isn't humans versus AI.</p>
<p>The future is humans working alongside AI.</p>
<h2>Why This Matters for Modern DevOps Engineers</h2>
<p>Today's DevOps engineers are expected to understand far more than infrastructure.</p>
<p>They must be comfortable with Linux, networking, cloud platforms, containers, Kubernetes, CI/CD, Infrastructure as Code, monitoring, security, automation, and artificial intelligence.</p>
<p>That list can feel overwhelming.</p>
<p>But these assignments reminded me that every advanced system still relies on strong fundamentals.</p>
<p>Claude Code didn't replace Bash.</p>
<p>Claude Code depended on Bash.</p>
<p>The AI couldn't analyze information that hadn't been collected.</p>
<p>Likewise, Bash alone couldn't explain patterns across multiple health checks.</p>
<p>Each technology complemented the other.</p>
<p>And that's exactly how modern engineering teams should think about AI.</p>
<p>Not as a replacement.</p>
<p>But as a multiplier.</p>
<h2>Looking Ahead</h2>
<p>Completing these assignments has changed how I approach every future automation project.</p>
<p>Instead of asking, "Can AI solve this problem?"</p>
<p>I now ask, "What reliable evidence should I collect before AI begins reasoning?"</p>
<p>That single question has influenced how I think about infrastructure monitoring, incident response, cloud operations, and production reliability.</p>
<p>As I continue my DevOps journey, I know Bash will remain one of my most valuable tools, not because it is new, but because it provides the foundation upon which reliable automation is built.</p>
<p>And with AI tools like Claude Code acting as thoughtful collaborators rather than uncontrolled operators, the possibilities become even more exciting.</p>
<h2>Final Thoughts</h2>
<p>When I started these assignments, my goal was simply to complete another milestone in the DevOps Micro Internship.</p>
<p>Instead, I gained something much more valuable.</p>
<p>I learned that great automation isn't measured by how many commands it executes.</p>
<p>It's measured by how much confidence it gives engineers.</p>
<p>Bash taught me how to collect reliable evidence.</p>
<p>Claude Code showed me how AI can transform that evidence into meaningful insight.</p>
<p>Together, they demonstrated what the future of DevOps looks like: reliable automation, responsible AI, and human judgment.</p>
<p>That's a future I'm excited to be part of.</p>
<h2>Acknowledgements</h2>
<p>This project was completed as part of the DevOps Micro Internship (DMI) Cohort 3 with Agentic AI, led by Pravin Mishra.</p>
<p>The internship continues to reinforce an important philosophy: learn the fundamentals first, build practical solutions second, and use AI to amplify your engineering, not replace it.</p>
<p>I'm grateful for the opportunity to explore modern DevOps practices in a way that combines Linux, Bash scripting, automation, and AI into real-world engineering workflows.</p>
<h2>Connect With Me</h2>
<p>If you enjoyed this article or you're also transitioning into DevOps, I'd love to connect and learn from your journey.</p>
<p>LinkedIn: <a href="https://www.linkedin.com/in/vincent-kleber-kakpo-8b920b88">https://www.linkedin.com/in/vincent-kleber-kakpo-8b920b88</a></p>
<p>GitHub: <a href="https://github.com/kakpoklebervincent">https://github.com/kakpoklebervincent</a></p>
<p>If this article helped you, consider sharing it with someone learning Linux, Bash, or AI-assisted DevOps.</p>
<p><strong>P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by</strong> <a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/"><strong>Pravin Mishra</strong></a><strong>. My graded progress is public:</strong> <a href="https://dmi.pravinmishra.com/s/kakpoklebervincent.html">https://dmi.pravinmishra.com/s/kakpoklebervincent.html</a> <strong>· Start your DevOps journey:</strong> <a href="https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3"><strong>https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[From Repetition to Reinvention: Why I Chose to Start Again]]></title><description><![CDATA[How returning to the DevOps Micro Internship helped me move from completing lessons to building real engineering confidence.
For a long time, I thought my biggest strength was discipline.
Every weekda]]></description><link>https://kakpoklebervincent.hashnode.dev/from-repetition-to-reinvention-why-i-chose-to-start-again</link><guid isPermaLink="true">https://kakpoklebervincent.hashnode.dev/from-repetition-to-reinvention-why-i-chose-to-start-again</guid><dc:creator><![CDATA[Kakpo Kleber Vincent]]></dc:creator><pubDate>Fri, 17 Jul 2026 14:11:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a520a7da154f01ccbea8d7a/ee9e070c-667e-4e61-96a8-7a393c9dfe5e.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><em>How returning to the DevOps Micro Internship helped me move from completing lessons to building real engineering confidence.</em></h3>
<p>For a long time, I thought my biggest strength was discipline.</p>
<p>Every weekday, my alarm rang at <strong>3:00 a.m.</strong></p>
<p>Before most people had started their day, I had already finished my morning devotion, completed a short workout, and settled into two uninterrupted hours of learning.</p>
<p>It wasn't exciting.</p>
<p>It wasn't easy.</p>
<p>But it was consistent.</p>
<p>That routine carried me through my first DevOps Micro Internship, and I genuinely believed consistency alone would be enough to help me become the engineer I wanted to be.</p>
<p>Then life happened.</p>
<p>A season of family responsibilities pulled me away from my studies. It wasn't planned, but it was necessary.</p>
<p>When I eventually returned, I expected to pick up where I had left off.</p>
<p>Instead, I experienced something that completely changed how I think about learning.</p>
<p>I had completed the lessons.</p>
<p>I hadn't mastered them.</p>
<p>I had gone through CI/CD, Docker, Terraform, and Kubernetes.</p>
<p>I remembered the videos.</p>
<p>I remembered the labs.</p>
<p>I remembered the concepts.</p>
<p>But when I opened a terminal and tried rebuilding everything without following a guide, I struggled.</p>
<p>That moment was difficult to accept.</p>
<p>Not because I couldn't do it.</p>
<p>But because I finally realized I had confused <strong>finishing a course</strong> with <strong>building a skill</strong>.</p>
<p>That's when one sentence came to mind.</p>
<p><strong>I didn't have a discipline problem.</strong></p>
<p><strong>I had a repetition problem.</strong></p>
<p>Watching someone build infrastructure isn't the same as building it yourself.</p>
<p>Following a walkthrough isn't the same as solving problems when nobody is telling you what comes next.</p>
<p>Real confidence only comes through repetition.</p>
<p>That realization became the biggest reason I decided to return for another DevOps Micro Internship.</p>
<p>Many people asked me why I would repeat a programme I had already completed.</p>
<p>For me, the answer was simple.</p>
<p>I wasn't coming back for another certificate.</p>
<p>I was coming back to build competence.</p>
<h2>Why This Time Feels Different</h2>
<p>There was another reason I returned.</p>
<p>During DMI Cohort 2, I had my first introduction to Agentic AI.</p>
<p>At the time, I found it interesting, but I didn't fully understand its significance.</p>
<p>As the months passed, I kept reading, experimenting, and paying attention to how engineering teams were beginning to work.</p>
<p>The more I learned, the more convinced I became that Agentic AI wasn't simply another tool to learn.</p>
<p>It represented a completely different way of building software and infrastructure.</p>
<p>Instead of using AI only to answer questions, engineers were beginning to build systems where AI understood project context, respected engineering standards, automated repetitive work, and collaborated like another member of the team.</p>
<p>I didn't want to be catching up later.</p>
<p>I wanted to grow with the technology while it was still evolving.</p>
<p>Returning to DMI Cohort 3 gave me that opportunity.</p>
<h2>The Small Change That Changed Everything</h2>
<p>This time, I only changed one thing in my learning routine.</p>
<p>One evening every week became <strong>rebuild day</strong>.</p>
<p>No notes.</p>
<p>No videos.</p>
<p>No walkthroughs.</p>
<p>Just me, my laptop, and a blank terminal.</p>
<p>Instead of reviewing the previous week's lab, I rebuilt it completely from memory.</p>
<p>Not because I expected perfection.</p>
<p>But because I wanted to understand <em>why</em> every command existed.</p>
<p>If I couldn't rebuild it myself, then I hadn't really learned it.</p>
<p>That single habit completely changed my approach to learning.</p>
<p>Today, my routine looks like this.</p>
<p>👋 <strong>Monday to Friday (3:00 a.m. to 5:00 a.m.)</strong>: Hands-on DMI learning before the day begins.</p>
<p>👋 <strong>Wednesday evening</strong>: Rebuild the previous week's lab entirely from memory.</p>
<p>👋 <strong>Saturday</strong>: Live DMI session.</p>
<p>👋 <strong>Sunday</strong>: Review, reflection, and preparation for the week ahead.</p>
<p>It isn't a perfect routine.</p>
<p>It's a repeatable one.</p>
<p>As <strong>Pravin Mishra</strong> often says,</p>
<blockquote>
<p><em>"You don't need a perfect routine. You need a repeatable one."</em></p>
</blockquote>
<p>That quote has stayed with me because it perfectly describes what was missing from my first attempt.</p>
<h2>Looking Back Helped Me Move Forward</h2>
<p>When I reflect on this journey, I realize it didn't begin with cloud computing.</p>
<p>Long before Terraform, Kubernetes, GitHub Actions, or Agentic AI became part of my vocabulary, I had already spent years solving infrastructure problems in another industry.</p>
<p>My career started in traditional IT infrastructure before I moved into Wireless Radio Access Network operations.</p>
<p>Over the next fifteen years, I worked in telecommunications, eventually leading a team responsible for more than <strong>14,000 network sites</strong> and over <strong>120 controllers</strong> across Nigeria.</p>
<p>When alarms went off at three o'clock in the morning, there wasn't time to panic.</p>
<p>Customers were already affected.</p>
<p>Services had to be restored.</p>
<p>Root causes had to be found quickly.</p>
<p>Solutions had to work.</p>
<p>Those years taught me lessons that still guide me today.</p>
<p>👋 Stay calm under pressure.</p>
<p>👋 Solve problems methodically.</p>
<p>👋 Take ownership.</p>
<p>👋 Never stop learning.</p>
<p>Technology changes.</p>
<p>Engineering principles do not.</p>
<h2>Reinvention Isn't Starting Over</h2>
<p>As cloud computing became the future of infrastructure, I knew I had a choice.</p>
<p>I could remain comfortable with what I already knew.</p>
<p>Or I could challenge myself to learn again.</p>
<p>I chose to learn again.</p>
<p>Today, that decision has brought me into a world where infrastructure is defined as code, deployments are automated through CI/CD pipelines, Kubernetes orchestrates cloud native applications, and Agentic AI is beginning to reshape how engineers work.</p>
<p>What excites me most isn't simply learning new technologies.</p>
<p>It's seeing telecommunications and cloud engineering gradually become one ecosystem.</p>
<p>Telecommunications is becoming cloud native.</p>
<p>Cloud engineering increasingly benefits from the operational discipline that telecommunications has refined for decades.</p>
<p>Standing between those two worlds is exactly where I want my career to be.</p>
<p>People often think reinvention means leaving the past behind.</p>
<p>I've learned something different.</p>
<p>Reinvention isn't forgetting where you came from.</p>
<p>It's carrying everything you've learned into the future you're building.</p>
<h2>Final Thoughts</h2>
<p>Looking back, I no longer see returning to the DevOps Micro Internship as repeating a course.</p>
<p>I see it as making an investment in myself.</p>
<p>Every early morning.</p>
<p>Every lab rebuilt from memory.</p>
<p>Every challenge solved.</p>
<p>Every lesson learned.</p>
<p>Each one has moved me one step closer to becoming the engineer I want to be.</p>
<p>If you're currently in a season where it feels like you're starting again, don't see it as moving backwards.</p>
<p>Sometimes the strongest engineers aren't the ones who learn the fastest.</p>
<p>They're the ones who are willing to return to the fundamentals until those fundamentals become second nature.</p>
<p>Growth isn't always about learning something new.</p>
<p>Sometimes it's about learning something well.</p>
<p>Thank you for taking the time to read my story.</p>
<p>If any part of this journey resonates with you, I'd genuinely love to hear your thoughts. Every engineer's path is different, but we all grow by sharing experiences, learning from one another, and continually challenging ourselves to improve.</p>
<p>This article is one chapter in my journey from Telecommunications to Cloud Native Engineering. I look forward to sharing many more lessons as I continue learning, building, and growing in public.</p>
<hr />
<p><em>P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by</em> <a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/"><em><strong>Pravin Mishra</strong></em></a><em>. My graded progress is public:</em> <a href="https://dmi.pravinmishra.com/s/kakpoklebervincent.html"><em><strong>https://dmi.pravinmishra.com/s/kakpoklebervincent.html</strong></em></a> <em>· Start your DevOps journey:</em> <a href="https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3"><em><strong>https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3</strong></em></a></p>
]]></content:encoded></item><item><title><![CDATA[Reflection – Week 2: From Following AI to Collaborating with It]]></title><description><![CDATA[By Kleber Vincent (Kakpo)
Introduction
When I began Week 2 of the DevOps Micro Internship with Agentic AI, I thought I would simply be learning how to use another AI tool. Looking back now, I realize ]]></description><link>https://kakpoklebervincent.hashnode.dev/reflection-week-2-from-following-ai-to-collaborating-with-it</link><guid isPermaLink="true">https://kakpoklebervincent.hashnode.dev/reflection-week-2-from-following-ai-to-collaborating-with-it</guid><category><![CDATA[Devops]]></category><category><![CDATA[agentic AI]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[Terraform]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Kakpo Kleber Vincent]]></dc:creator><pubDate>Sat, 11 Jul 2026 11:24:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a520a7da154f01ccbea8d7a/9f71ed86-cf33-4306-894e-bef0e75e4c70.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>By Kleber Vincent (Kakpo)</strong></p>
<h2>Introduction</h2>
<p>When I began Week 2 of the DevOps Micro Internship with Agentic AI, I thought I would simply be learning how to use another AI tool. Looking back now, I realize this week was about something much bigger.</p>
<p>It changed the way I think about working with AI.</p>
<p>Instead of treating AI as something that simply answers questions, I learned how to build a structured working relationship with it. Every assignment added another capability, gradually transforming Claude Code into a reliable engineering assistant that could follow instructions, respect project rules, remember important information, and help me work more efficiently without taking control away from me.</p>
<p>Coming from more than fifteen years in Telecommunications and now transitioning into Cloud Computing, DevOps, and Agentic AI, every assignment reminded me that engineering is not only about solving technical problems. It is equally about creating systems that are reliable, repeatable, and safe.</p>
<p>Week 2 challenged me to slow down, think more carefully, and understand the reasons behind every feature instead of simply trying to finish the assignments.</p>
<p>Every assignment during Week 2 built upon the previous one. What started with understanding Claude's workflow gradually expanded into creating reusable Skills, configuring specialized Subagents, connecting external tools through MCP, implementing safety mechanisms with Hooks and Permissions, and finally giving Claude the ability to remember project-specific knowledge across sessions.</p>
<p>Looking back, I realized I wasn't simply learning individual features. I was learning how to build a complete AI-assisted engineering workflow.</p>
<hr />
<h2>Biggest Technical Insight I Got This Week</h2>
<p>The biggest lesson for me was understanding that Agentic AI is far more than an advanced chatbot.</p>
<p>Throughout this week I learned how different components work together to create a complete engineering workflow.</p>
<p>👋 I learned how <a href="http://CLAUDE.md"><strong>CLAUDE.md</strong></a> provides project instructions that guide Claude before any work begins.</p>
<p>👋 I discovered how <strong>Skills</strong> transform long prompts into reusable commands that improve consistency.</p>
<p>👋 I explored <strong>Subagents</strong>, allowing specialized tasks to be delegated to the most appropriate AI agent.</p>
<p>👋 I configured <strong>MCP</strong> to securely connect Claude Code with GitHub and retrieve live repository information instead of relying only on built-in knowledge.</p>
<p>👋 I implemented <strong>Hooks and Permissions</strong> to prevent unsafe operations before they could execute.</p>
<p>👋 Finally, I experienced <strong>Memory</strong>, where Claude could remember project rules across completely new sessions without needing to be reminded.</p>
<p>Watching all these capabilities work together completely changed my perspective. I no longer see AI as a tool that simply answers questions. I now see it as an engineering partner that can follow structured workflows while still relying on human guidance, review, and oversight.</p>
<hr />
<h2>Biggest Insight I Got About Myself This Week</h2>
<p>This week taught me something important about my own learning style.</p>
<p>I learn best when I build things with my own hands.</p>
<p>Reading documentation is valuable, but I truly understand a concept only after I have configured it, broken it, fixed it, tested it, and documented the outcome.</p>
<p>There were moments when things did not behave as expected. Instead of immediately assuming something was wrong, I learned to investigate more carefully, compare outputs, verify configurations, and understand why the result differed from what I expected.</p>
<p>That shift in mindset has made me much more confident when working with unfamiliar technologies.</p>
<hr />
<h2>My Biggest Weakness or Loop I Noticed</h2>
<p>One habit I noticed is that I sometimes become too focused on getting the expected output.</p>
<p>When Claude's response looked different from the examples provided in the assignment, my first reaction was to think something had gone wrong.</p>
<p>As I investigated further, I realized that the underlying functionality was actually working correctly. Claude had simply explained the hook behaviour differently instead of displaying the exact wording shown in the assignment guide.</p>
<p>That experience reminded me that successful engineering is not about matching screenshots. It is about understanding the behaviour of the system and verifying that it is functioning as intended.</p>
<hr />
<h2>One System I Will Implement From This Week</h2>
<p>One habit I will carry into every future assignment is creating a structured checklist before I begin.</p>
<p>Before starting any task, I will:</p>
<p>👋 Read the entire assignment from beginning to end.</p>
<p>👋 Identify every required screenshot before executing the first command.</p>
<p>👋 Complete one task fully before moving to the next.</p>
<p>👋 Document my work immediately while everything is still fresh.</p>
<p>👋 Commit changes regularly instead of waiting until the very end.</p>
<p>I believe this simple system will reduce mistakes, improve consistency, and make future assignments much easier to complete.</p>
<hr />
<h2>What I Learned About Agentic AI and DevOps</h2>
<p>Before this week, I mostly viewed AI as a tool for generating answers.</p>
<p>Today my perspective is completely different.</p>
<p>I now understand that Agentic AI can participate in structured engineering workflows when it is given the right instructions, permissions, and safety boundaries.</p>
<p>At the same time, I also learned that automation should never replace human responsibility.</p>
<p>👋 Hooks prevent unsafe actions.</p>
<p>👋 Permissions control what AI can access.</p>
<p>👋 Memory improves consistency.</p>
<p>👋 Skills encourage reusable workflows.</p>
<p>👋 MCP connects AI with external systems.</p>
<p>Yet despite all these capabilities, human judgment remains essential.</p>
<p>The engineer is still responsible for reviewing decisions, validating outputs, and ensuring that every action aligns with the goals of the project.</p>
<p>That balance between automation and human oversight is one of the most valuable lessons I will carry forward in my DevOps journey.</p>
<hr />
<h2>My Week 2 Highlight</h2>
<p>The most memorable moment for me was watching Claude remember my project rules after a completely fresh session.</p>
<p>I taught Claude three important facts about the project, closed the session entirely, reopened Claude Code, and asked questions without providing any additional context.</p>
<p>Claude immediately remembered the required hero section background colour without me providing any additional context.</p>
<p>It refused to add JavaScript because of the rule I had previously defined.</p>
<p>It even referenced the stored project memory while explaining its decision.</p>
<p>Seeing that happen made me appreciate the practical value of persistent memory in real engineering environments. It was no longer just an AI conversation. It felt like collaborating with a teammate who genuinely understood the project's standards.</p>
<p>That moment made all the previous assignments come together.</p>
<hr />
<h2>Final Thoughts</h2>
<p>Week 2 has been one of the most rewarding learning experiences since I began my transition into Cloud Computing, DevOps, and Agentic AI.</p>
<p>Every assignment built naturally upon the previous one, and by the end of the week I wasn't simply using Claude Code. I was teaching it how to work with me safely, consistently, and efficiently.</p>
<p>The journey has also reinforced something I have always believed.</p>
<p>Technology continues to evolve, but the willingness to learn, adapt, and improve remains the greatest skill an engineer can possess.</p>
<p>I am excited for the weeks ahead and look forward to building even more real-world projects while continuing to grow as a Cloud and DevOps Engineer.</p>
<p>I would like to sincerely thank <strong>Pravin Mishra</strong> for designing a learning experience that continually challenges us to think beyond simply completing assignments. My sincere appreciation also goes to the entire mentoring team for their guidance, encouragement, and unwavering support throughout this journey. Every lesson has encouraged me to become a better engineer, not just a better learner.</p>
<p>This is only Week 2, yet I can already see how much my mindset has evolved. I look forward to the weeks ahead, building more real-world projects, sharpening my DevOps skills, and continuing my transition from Telecommunications into Cloud Computing, DevOps, and Agentic AI.</p>
<p>One assignment at a time.</p>
<p>One project at a time.</p>
<p>One step closer to becoming the engineer I aspire to be.</p>
<p><em>P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by</em> <a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/"><em><strong>Pravin Mishra</strong></em></a><em>. My graded progress is public:</em> <a href="https://dmi.pravinmishra.com/s/kakpoklebervincent.html"><em><strong>https://dmi.pravinmishra.com/s/kakpoklebervincent.html</strong></em></a> <em>· Start your DevOps journey:</em> <a href="https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3"><em><strong>https://dmi.pravinmishra.com/?utm_source=student&amp;utm_medium=ps-blog&amp;utm_campaign=cohort3</strong></em></a></p>
]]></content:encoded></item></channel></rss>