<?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: Adeje Oluwatobiloba</title>
    <description>The latest articles on DEV Community by Adeje Oluwatobiloba (@rubi_cloud).</description>
    <link>https://dev.to/rubi_cloud</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3710510%2Fe000a17d-11e7-4d5f-aa08-debce3056eb7.jpg</url>
      <title>DEV Community: Adeje Oluwatobiloba</title>
      <link>https://dev.to/rubi_cloud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rubi_cloud"/>
    <language>en</language>
    <item>
      <title>Deployed a Production-Ready Three-Tier Node.js Application on AWS</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Wed, 19 Aug 2026 20:32:21 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/deployed-a-production-ready-three-tier-nodejs-application-on-aws-424g</link>
      <guid>https://dev.to/rubi_cloud/deployed-a-production-ready-three-tier-nodejs-application-on-aws-424g</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Deploying an application to AWS is more than launching a few EC2 instances and making the application accessible over the internet. A production-oriented deployment must consider network isolation, security, availability, scalability, load balancing, database resilience, and operational troubleshooting.&lt;/p&gt;

&lt;p&gt;In this project, I deployed a full-stack Book Review Application using a three-tier architecture on AWS. The architecture separates the application into Presentation, Business, and Data tiers, with controlled communication between each layer.&lt;/p&gt;

&lt;p&gt;The final traffic flow is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Internet --&amp;gt; Public ALB --&amp;gt; Web Tier --&amp;gt; Internal ALB --&amp;gt; Application Tier --&amp;gt; Database Tier&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;The objective was to build an architecture where each tier has a clearly defined responsibility and can be secured, scaled, and maintained independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;

&lt;p&gt;The deployment consists of three primary layers:&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Web Tier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Web Tier hosts the Next.js frontend on Ubuntu EC2 instances, with Nginx configured as a reverse proxy. The public ALB distributes incoming HTTP traffic across healthy Web Tier instances deployed across multiple Availability Zones.&lt;/p&gt;

&lt;p&gt;Nginx serves the frontend and can route backend/API requests through the internal ALB, which then forwards traffic to the private Node.js/Express instances.&lt;/p&gt;

&lt;p&gt;The request flow is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Client → Public ALB → Nginx → Internal ALB → Node.js App Tier → RDS&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This design keeps the Application Tier private while allowing the frontend to communicate with backend services through a controlled internal path, providing security, load balancing, scalability, and fault isolation.&lt;/p&gt;

&lt;p&gt;⚙️ &lt;strong&gt;Application Tier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Application Tier hosts the Node.js/Express backend on port 3001, deployed across EC2 instances in private subnets.&lt;/p&gt;

&lt;p&gt;An internal Application Load Balancer distributes API traffic from the Web Tier across healthy application instances.&lt;/p&gt;

&lt;p&gt;Because the Application Tier is private, the backend is not directly exposed to the internet. This provides a controlled communication path between the frontend and backend while allowing the application layer to scale independently.&lt;/p&gt;

&lt;p&gt;🗄️ &lt;strong&gt;Data Tier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Data Tier uses Amazon RDS for MySQL deployed in private subnets with restricted access from the Application Tier.&lt;/p&gt;

&lt;p&gt;A Read Replica was used to offload read-heavy workloads from the primary RDS instance and provide additional read scalability, while Multi-AZ was used to improve high availability and failover.&lt;/p&gt;

&lt;p&gt;This design protects the database from direct public access while providing availability, resilience, and controlled database connectivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;VPC and Network Architecture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The foundation of the deployment is a custom Amazon VPC using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;VPC CIDR: 10.0.0.0/16&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The VPC was divided into six subnets across two Availability Zones:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Availability Zone A &amp;amp; CIDR Block&lt;/th&gt;
&lt;th&gt;Availability Zone_B &amp;amp; CIDR Block&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web&lt;/td&gt;
&lt;td&gt;Web_Public_SubnetA (10.o.1.0/24)&lt;/td&gt;
&lt;td&gt;Web_Public_SubnetB (10.0.2.0/24)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;App_Private_SubnetA (10.0.10.0/24)&lt;/td&gt;
&lt;td&gt;App_Private_SubnetB (10.0.12.0/24)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;DB_Private_SubnetB (10.0.20.0/28)&lt;/td&gt;
&lt;td&gt;DB_Private_SubnetB (10.0.22.0/28)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This subnet segmentation creates clear network boundaries between the three application layers.&lt;/p&gt;

&lt;p&gt;The Web Tier requires public connectivity because it receives traffic from the internet through the public ALB.&lt;/p&gt;

&lt;p&gt;The Application Tier remains private because it should only receive traffic from the Web Tier through the internal ALB.&lt;/p&gt;

&lt;p&gt;The Database Tier is also private and should only accept database connections from the Application Tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Security Group Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Security Groups were configured using a least-privilege approach.&lt;/p&gt;

&lt;p&gt;The major security rules are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web-EC2-SG&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;Internet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App-EC2-SG&lt;/td&gt;
&lt;td&gt;80, 3001&lt;/td&gt;
&lt;td&gt;Web-EC2-SG, App-EC2-SG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RDS-DB-SG&lt;/td&gt;
&lt;td&gt;3306&lt;/td&gt;
&lt;td&gt;App-EC2-SGSG&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This avoids unnecessary CIDR-based access between tiers and ensures that each component only accepts the traffic required for its role.&lt;/p&gt;

&lt;p&gt;Most importantly, the Application and Database tiers are not directly accessible from the public internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Web Tier Deployment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Web Tier was deployed on Ubuntu EC2 instances running the Next.js frontend, with Nginx configured as a reverse proxy. Nginx receives HTTP requests on port 80 and routes them to the appropriate frontend or backend service.&lt;/p&gt;

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

&lt;p&gt;The public ALB performs health checks against the Web Tier and distributes requests only to healthy instances.&lt;/p&gt;

&lt;p&gt;Running multiple instances across Availability Zones reduces dependence on a single EC2 instance and provides a foundation for horizontal scaling.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Application Tier Deployment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The backend was deployed using Node.js and Express.&lt;/p&gt;

&lt;p&gt;The application listens on:&lt;/p&gt;

&lt;p&gt;Port: 3001&lt;/p&gt;

&lt;p&gt;The backend instances are located in private subnets and are registered with the internal ALB.&lt;/p&gt;

&lt;p&gt;The internal ALB provides load distribution between backend instances while keeping the API servers inaccessible from the public internet.&lt;/p&gt;

&lt;p&gt;This separation also allows the Application Tier to scale independently of the Web Tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Database Deployment with Amazon RDS&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The database layer uses Amazon RDS for MySQL.&lt;/p&gt;

&lt;p&gt;The RDS instances are deployed using a DB subnets configuration spanning the private database subnets.&lt;/p&gt;

&lt;p&gt;The database is not publicly accessible.&lt;/p&gt;

&lt;p&gt;The RDS Security Group permits MySQL traffic only from the Application Tier.&lt;/p&gt;

&lt;p&gt;This provides an additional security boundary between application logic and persistent data.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Multi-AZ and Read Replica&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Two database concepts are particularly important in this architecture: Multi-AZ and Read Replicas.&lt;/p&gt;

&lt;p&gt;They solve different problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-AZ: Multi-AZ is primarily used for high availability and failover.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the primary database instance becomes unavailable, AWS can fail over to the standby instance.&lt;/p&gt;

&lt;p&gt;The goal is therefore resilience rather than increasing read capacity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read Replica: A Read Replica is primarily used for read scalability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For workloads with a large number of read operations, suitable read traffic can be directed to the replica rather than sending every query to the primary database.&lt;/p&gt;

&lt;p&gt;This can reduce read pressure on the primary database and provide additional capacity for read-heavy workloads.&lt;/p&gt;

&lt;p&gt;A key distinction is:&lt;/p&gt;

&lt;p&gt;Multi-AZ = high availability&lt;/p&gt;

&lt;p&gt;Read Replica = read scalability&lt;/p&gt;

&lt;p&gt;The Read Replica should therefore not be presented as the primary failover mechanism for the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Architecture?
&lt;/h3&gt;

&lt;p&gt;The primary reason for using a three-tier architecture is separation of concerns.&lt;/p&gt;

&lt;p&gt;Each tier has a specific responsibility:&lt;/p&gt;

&lt;p&gt;Web Tier: presentation and user interaction&lt;br&gt;
Application Tier: business logic and API processing&lt;br&gt;
Data Tier: persistent data storage&lt;/p&gt;

&lt;p&gt;This separation provides several operational advantages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Security: Private application and database tiers reduce the attack surface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Each tier can be scaled independently according to its workload.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Availability: Multiple Availability Zones, load balancing, and database redundancy reduce single points of failure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintainability: Changes to one layer can be managed without unnecessarily affecting the others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fault Isolation: A failure in one component does not automatically require the entire application to be unavailable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;p&gt;This deployment reinforced several core cloud and DevOps principles:&lt;/p&gt;

&lt;p&gt;Security: Don't expose components unnecessarily. Control communication using least-privilege access.&lt;/p&gt;

&lt;p&gt;Scalability: Design components so they can scale independently.&lt;/p&gt;

&lt;p&gt;Availability: Eliminate unnecessary single points of failure through redundancy and Multi-AZ architecture.&lt;/p&gt;

&lt;p&gt;Automation and repeatability: Infrastructure and application deployment should eventually become reproducible rather than dependent on manual configuration.&lt;/p&gt;

&lt;p&gt;Observability and troubleshooting: Understanding how traffic moves through the system makes failures easier to isolate and resolve.&lt;/p&gt;

&lt;p&gt;Most importantly, I learned that cloud engineering is not simply about deploying AWS services.&lt;/p&gt;

&lt;p&gt;It is about understanding how those services work together to create a secure, reliable, scalable, and maintainable system.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;The completed architecture provides a production-style foundation for the Book Review Application:&lt;/p&gt;

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

&lt;p&gt;The project provided hands-on experience across AWS networking, EC2, Application Load Balancers, Nginx, Node.js, Next.js, RDS, security groups, private networking, high availability, scalability, and troubleshooting.&lt;/p&gt;

&lt;p&gt;More importantly, it shifted my thinking from simply deploying an application to engineering the platform that the application runs on.&lt;/p&gt;

&lt;p&gt;P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by Pravin Mishra. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Read-Only Jira Intelligence Layer for Claude Code with MCP</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Tue, 18 Aug 2026 09:26:20 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/building-a-read-only-jira-intelligence-layer-for-claude-code-with-mcp-55o3</link>
      <guid>https://dev.to/rubi_cloud/building-a-read-only-jira-intelligence-layer-for-claude-code-with-mcp-55o3</guid>
      <description>&lt;p&gt;&lt;em&gt;AI-assisted engineering is moving beyond code generation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A more interesting use case is giving an AI assistant controlled access to the systems engineers already use for planning and delivery.&lt;/p&gt;

&lt;p&gt;I recently built a small integration that connects Claude Code to Jira through Atlassian MCP (mcp-atlassian), allowing Claude Code to retrieve live sprint data and analyze delivery health directly from the terminal.&lt;/p&gt;

&lt;p&gt;The goal was not to let AI modify Jira.&lt;/p&gt;

&lt;p&gt;It was to give AI enough context to observe, analyze, and surface useful insights while keeping humans responsible for operational decisions.&lt;/p&gt;

&lt;p&gt;The core workflow is:&lt;/p&gt;

&lt;p&gt;Gather → Analyze → Human Act → Verify&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Connecting Jira to Claude Code&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I registered the Jira MCP server in the project's .mcp.json configuration using uvx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jira"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp-atlassian"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration defines how Claude Code discovers and communicates with the MCP server.&lt;/p&gt;

&lt;p&gt;The important concept here is the Model Context Protocol (MCP) abstraction.&lt;/p&gt;

&lt;p&gt;Instead of building a custom integration directly into the AI client, MCP provides a standardized interface through which the client can discover and invoke the tools exposed by the server.&lt;/p&gt;

&lt;p&gt;That separation makes the integration easier to reason about and extend.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keeping Credentials Out of the Repository&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Authentication details were kept outside the committed MCP configuration.&lt;/p&gt;

&lt;p&gt;The Jira URL, username, and API token were provided through local environment configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"JIRA_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-site.atlassian.net"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"JIRA_USERNAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"JIRA_API_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_token_here"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The integration uses a dedicated Jira API token rather than embedding credentials directly into the project configuration.&lt;/p&gt;

&lt;p&gt;The important principle is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Architecture belongs in Git. Secrets don't.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The configuration required to understand and reproduce the integration can be version controlled, while credentials remain local and are excluded from source control.&lt;/p&gt;

&lt;p&gt;For a production implementation, I would take this further with a managed secrets solution and appropriate credential rotation policies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pulling Live Jira Sprint Data&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After establishing the MCP connection and verifying it through Claude Code, I could query Jira for current sprint information.&lt;/p&gt;

&lt;p&gt;The available data included:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Issue status&lt;br&gt;
Assignees&lt;br&gt;
Story points&lt;br&gt;
Priorities&lt;br&gt;
Sprint information&lt;br&gt;
Missing estimates&lt;br&gt;
Potentially stagnant or at-risk work&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This changed the role of the AI assistant.&lt;/p&gt;

&lt;p&gt;Instead of asking Claude to reason about manually copied Jira information, I could give it access to current delivery data and let it perform the analysis from the live source.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;AI analysis is only as useful as the context available to the model.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Building a Read-Only /sprint-health Skill&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I then wrapped the analysis into a custom Claude Code /sprint-health skill.&lt;/p&gt;

&lt;p&gt;The skill was intentionally designed around read-only Jira operations, including:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;jira_search&lt;br&gt;
jira_get_issue&lt;br&gt;
jira_get_sprint&lt;br&gt;
jira_get_board&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It does not create issues.&lt;/p&gt;

&lt;p&gt;It does not update tickets.&lt;/p&gt;

&lt;p&gt;It does not add comments.&lt;/p&gt;

&lt;p&gt;It does not transition issues.&lt;/p&gt;

&lt;p&gt;The skill's responsibility is analysis.&lt;/p&gt;

&lt;p&gt;It evaluates information such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Sprint progress&lt;br&gt;
Remaining work&lt;br&gt;
Story-point distribution&lt;br&gt;
Stagnant work&lt;br&gt;
Missing estimates&lt;br&gt;
Potential delivery risks&lt;br&gt;
Areas that may require attention during standup&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The output can then be used to prepare more focused standup discussions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why Read-Only Access Matters&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most interesting part of this project was not connecting Jira to Claude Code.&lt;/p&gt;

&lt;p&gt;It was defining the permission boundary.&lt;/p&gt;

&lt;p&gt;There is a tendency with AI agents to focus on what they can do.&lt;/p&gt;

&lt;p&gt;I was more interested in defining what the agent cannot do.&lt;/p&gt;

&lt;p&gt;The Jira board remains the operational source of truth.&lt;/p&gt;

&lt;p&gt;Claude Code can observe that state and provide analysis, but the human lead remains responsible for deciding what action should be taken.&lt;/p&gt;

&lt;p&gt;That produces a controlled workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gather&lt;/strong&gt;&lt;br&gt;
AI retrieves current Jira data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analyze&lt;/strong&gt;&lt;br&gt;
AI identifies trends, gaps, and potential risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human Act&lt;/strong&gt;&lt;br&gt;
The responsible person reviews the analysis and decides what action to take.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify&lt;/strong&gt;&lt;br&gt;
AI retrieves the updated Jira state and evaluates the sprint again.&lt;/p&gt;

&lt;p&gt;This creates a practical human-in-the-loop model rather than giving the AI unrestricted authority over the project-management system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Least Privilege for AI Agents&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project also reinforced a principle that is well established in security engineering:&lt;/p&gt;

&lt;p&gt;Give a system only the permissions it needs to perform its intended function.&lt;/p&gt;

&lt;p&gt;If the purpose of /sprint-health is to analyze sprint health, it does not need permission to create or modify Jira issues.&lt;/p&gt;

&lt;p&gt;Restricting the available operations reduces the potential impact of an incorrect AI decision or unexpected tool invocation.&lt;/p&gt;

&lt;p&gt;This is especially important as AI agents become increasingly capable of interacting with external systems.&lt;/p&gt;

&lt;p&gt;The question should not only be:&lt;/p&gt;

&lt;p&gt;“What can the agent automate?”&lt;/p&gt;

&lt;p&gt;It should also be:&lt;/p&gt;

&lt;p&gt;“What is the minimum authority the agent actually needs?”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The DevOps Perspective&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a DevOps perspective, I found this project interesting because it connects delivery data with engineering intelligence.&lt;/p&gt;

&lt;p&gt;Traditional workflows often require engineers or delivery leads to manually inspect dashboards, identify trends, and prepare updates.&lt;/p&gt;

&lt;p&gt;With controlled AI access to live project data, some of that analysis can become conversational and repeatable.&lt;/p&gt;

&lt;p&gt;For example, instead of manually checking multiple Jira views, a developer or delivery lead could ask for a sprint-health analysis and receive a structured summary based on the current state of the board.&lt;/p&gt;

&lt;p&gt;The important distinction is that the AI becomes an analysis layer, not the system of record.&lt;/p&gt;

&lt;p&gt;Jira remains Jira.&lt;/p&gt;

&lt;p&gt;The AI simply provides another interface for understanding the information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project taught me several lessons beyond simply configuring an MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration design matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connecting tools to an AI assistant is relatively straightforward. Designing the correct boundaries around that connection is more important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An AI assistant becomes significantly more useful when it can work with current, relevant operational data rather than static information supplied manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Least privilege applies to AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The principle of least privilege should apply to AI agents just as it does to traditional applications and services.&lt;/p&gt;

&lt;p&gt;Human oversight remains valuable&lt;/p&gt;

&lt;p&gt;Automation does not mean removing humans from every decision.&lt;/p&gt;

&lt;p&gt;For operational workflows, a better model can be:&lt;/p&gt;

&lt;p&gt;AI observes → AI analyzes → Human decides → System changes → AI verifies&lt;/p&gt;

&lt;p&gt;Source-of-truth boundaries matter&lt;/p&gt;

&lt;p&gt;Jira remains the authoritative system for sprint state.&lt;/p&gt;

&lt;p&gt;The AI should not create a competing source of truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This project started as an experiment with Claude Code, Jira, and Model Context Protocol, but it became a practical exercise in designing controlled AI-assisted engineering workflows.&lt;/p&gt;

&lt;p&gt;The architecture can be summarized simply:&lt;/p&gt;

&lt;p&gt;Jira → MCP → Claude Code → Analysis → Human Decision → Jira&lt;/p&gt;

&lt;p&gt;The interesting part isn't that an AI can read Jira.&lt;/p&gt;

&lt;p&gt;The interesting part is deciding how much access it should have, what responsibility it should carry, and where human authority should remain.&lt;/p&gt;

&lt;p&gt;As AI agents become more integrated into engineering workflows, I believe these boundaries will become increasingly important.&lt;/p&gt;

&lt;p&gt;AI doesn't need permission to change everything to be useful.&lt;/p&gt;

&lt;p&gt;Sometimes the most valuable engineering agent is the one that can observe deeply, analyze intelligently, and act only when explicitly authorized.&lt;/p&gt;

&lt;p&gt;P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by Pravin Mishra. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Building a Layered Code Review Workflow with Git Hooks and AI</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Thu, 23 Jul 2026 19:06:28 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/building-a-layered-code-review-workflow-with-git-hooks-and-ai-17ec</link>
      <guid>https://dev.to/rubi_cloud/building-a-layered-code-review-workflow-with-git-hooks-and-ai-17ec</guid>
      <description>&lt;p&gt;As I progressed through my DevOps internship, I explored a workflow that combines Git pre-commit hooks with AI-assisted code review. While learning how these tools work together, I realized the entire process can be explained using a football analogy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think of a football match.
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Git is VAR
&lt;/h4&gt;

&lt;p&gt;Just as the Video Assistant Referee (VAR) records every play and allows referees to review important moments, Git records every change made to a project. Every commit becomes part of the project's history, making it possible to compare versions, inspect changes, or roll back to a previous state whenever necessary.&lt;/p&gt;

&lt;p&gt;Without Git, recovering from mistakes would be much more difficult. In fact, during this assignment I accidentally performed a git reset &lt;code&gt;--hard HEAD~1&lt;/code&gt;. Thanks to Git's history and the &lt;code&gt;reflog&lt;/code&gt;, I was able to recover my work, this is a reminder of how valuable version control really is.&lt;/p&gt;

&lt;h4&gt;
  
  
  GitHub is the Referee
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;If Git records the match, GitHub acts as the referee.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GitHub manages pull requests, code reviews, approvals, and ultimately determines what gets merged into the main branch. It provides a structured collaboration process where developers can discuss changes, request improvements, and verify code before it becomes part of the production codebase.&lt;/p&gt;

&lt;h4&gt;
  
  
  Git Hooks are the Assistant Referee
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;An Assistant Referee watches for clear rule violations and immediately raises the flag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Git pre-commit hooks serve exactly the same purpose.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before every commit, the hook automatically inspects the staged changes and enforces predefined rules. During this assignment, the hook scanned my staged diff for issues such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Potential leaked secrets&lt;/li&gt;
&lt;li&gt;API key patterns&lt;/li&gt;
&lt;li&gt;Repository policy violations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These checks are deterministic. They don't understand the meaning of the code, they simply verify whether the staged changes violate known rules.&lt;/p&gt;

&lt;p&gt;This makes Git hooks extremely fast and reliable for catching common mistakes before they ever enter the repository.&lt;/p&gt;

&lt;h4&gt;
  
  
  AI-Assisted Code Review is the VAR Review Team
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;While Git hooks look for predefined violations, AI-assisted code review analyzes the same code from a broader perspective.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Does this code match a forbidden pattern?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI asks questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this implementation maintainable?&lt;/li&gt;
&lt;li&gt;Does it follow best practices?&lt;/li&gt;
&lt;li&gt;Could this introduce security risks?&lt;/li&gt;
&lt;li&gt;Is the pull request ready for review?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike rule-based automation, AI evaluates context, allowing it to identify improvements that cannot easily be expressed as regular expressions or fixed validation rules.&lt;/p&gt;

&lt;p&gt;This showed me that AI is not replacing automation, rather it is extending it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Security Through Least Privilege
&lt;/h4&gt;

&lt;p&gt;Another important concept I learned was the principle of least privilege.&lt;/p&gt;

&lt;p&gt;The AI review workflow was intentionally granted only the permissions it required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read repository contents&lt;/li&gt;
&lt;li&gt;Execute validation commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It could not modify code, commit changes, or push to the repository.&lt;/p&gt;

&lt;h5&gt;
  
  
  Actions such as:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;git commit&lt;/li&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;li&gt;Opening a pull request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;remain the responsibility of the developer.&lt;/p&gt;

&lt;p&gt;This design ensures that AI can provide recommendations without making irreversible changes to the codebase.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Takeaways
&lt;/h4&gt;

&lt;p&gt;This week's assignment reinforced several important DevOps practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create feature branches to protect the main branch and support     collaborative development.&lt;/li&gt;
&lt;li&gt;Use Git pre-commit hooks to catch predictable issues before code is committed.&lt;/li&gt;
&lt;li&gt;Combine fixed-rule automation with AI-assisted review for more comprehensive code validation.&lt;/li&gt;
&lt;li&gt;Follow the principle of least privilege by granting tools only the permissions they require.&lt;/li&gt;
&lt;li&gt;Keep developers responsible for repository-changing actions while using automation and AI as decision-support tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Final Thoughts
&lt;/h4&gt;

&lt;p&gt;The football analogy helped me understand the relationship between these tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git records every play like VAR.&lt;/li&gt;
&lt;li&gt;GitHub acts as the Referee, managing reviews and merges.&lt;/li&gt;
&lt;li&gt;Git Hooks function as the Assistant Referee, enforcing predefined rules before play continues.&lt;/li&gt;
&lt;li&gt;AI-assisted code review acts as the VAR Review Team, providing context-aware analysis that goes beyond simple rule checking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern DevOps isn't about replacing one tool with another. It's about combining deterministic automation, intelligent analysis, and human decision-making into a layered workflow that delivers secure, reliable, and maintainable software.&lt;/p&gt;

&lt;p&gt;P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by &lt;a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/" rel="noopener noreferrer"&gt;Pravin Mishra&lt;/a&gt;. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>git</category>
    </item>
    <item>
      <title>Automating Linux Tasks with Bash</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Wed, 22 Jul 2026 13:15:39 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/automating-linux-tasks-with-bash-192l</link>
      <guid>https://dev.to/rubi_cloud/automating-linux-tasks-with-bash-192l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"Every repetitive task is an opportunity waiting to be automated."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;One of the biggest lessons I've learned this weeek in the DevOps Micro Internship (DMI) is that automation begins with understanding the manual process.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Working in production support exposed me to many routine operational tasks. Whether it was gathering system information, validating files and directories, or running the same Linux commands repeatedly, I realized that many of these activities followed a predictable workflow. Although these tasks are essential for maintaining production environments, performing them manually can be time-consuming, inconsistent, and prone to human error.&lt;/p&gt;

&lt;p&gt;This realization made learning Bash scripting more than just another technical exercise, it became an introduction to how automation solves real operational challenges.&lt;/p&gt;

&lt;h4&gt;
  
  
  Understanding Bash
&lt;/h4&gt;

&lt;p&gt;Before writing scripts, I first learned the difference between a shell and Bash.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A shell is a command-line interpreter that allows users to interact with the operating system. Bash (Bourne Again Shell) is one of the most widely used Unix/Linux shells, offering features that make scripting powerful and flexible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One important lesson was verifying the Bash version before writing scripts. Different Bash versions support different features, and writing scripts for the correct version helps avoid compatibility issues across Linux environments.&lt;/p&gt;

&lt;h4&gt;
  
  
  Importance of the shebang:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;#!/bin/bash&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This tells the operating system to execute the script using the Bash interpreter.&lt;/p&gt;

&lt;p&gt;Before running a script directly, execute permissions must also be granted using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chmod +x script.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This allows the operating system to execute the file as a program.&lt;/p&gt;

&lt;h4&gt;
  
  
  Building Scripts with Variables
&lt;/h4&gt;

&lt;p&gt;Variables are one of the simplest but most important concepts in Bash scripting.&lt;/p&gt;

&lt;p&gt;Instead of hardcoding values throughout a script, variables allow information to be stored once and reused multiple times.&lt;/p&gt;

&lt;p&gt;For example, storing usernames, directories, or file paths inside variables makes scripts easier to maintain because updates only need to be made in one location.&lt;/p&gt;

&lt;p&gt;Accessing variable values using the $ symbol also makes scripts dynamic and reusable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Managing Multiple Values with Arrays
&lt;/h4&gt;

&lt;p&gt;As scripts become larger, managing multiple values individually becomes inefficient.&lt;/p&gt;

&lt;p&gt;Arrays solve this problem by storing multiple related items under a single variable.&lt;/p&gt;

&lt;p&gt;Instead of creating several variables, I learned how arrays simplify data management while making loops much easier to implement.&lt;/p&gt;

&lt;p&gt;This is particularly useful when working with multiple servers, directories, or applications that require the same operation.&lt;/p&gt;

&lt;h4&gt;
  
  
  Eliminating Repetition with Loops
&lt;/h4&gt;

&lt;p&gt;One of the concepts that immediately demonstrated the value of automation was the for loop.&lt;/p&gt;

&lt;p&gt;Rather than executing the same command repeatedly, a loop performs an action for every item in a list.&lt;/p&gt;

&lt;p&gt;For example, instead of checking multiple directories manually, a loop can iterate through each directory automatically.&lt;/p&gt;

&lt;p&gt;This simple concept significantly reduces repetitive work while making scripts shorter, cleaner, and easier to maintain.&lt;/p&gt;

&lt;h4&gt;
  
  
  Making Intelligent Decisions with Conditionals
&lt;/h4&gt;

&lt;p&gt;Automation isn't only about repeating commands—it also requires making decisions.&lt;/p&gt;

&lt;p&gt;Using if-else statements, scripts can respond differently depending on specific conditions.&lt;/p&gt;

&lt;p&gt;During my exercises, I learned to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check whether files exist using -f&lt;/li&gt;
&lt;li&gt;Verify directories using -d&lt;/li&gt;
&lt;li&gt;Compare numbers using operators such as -ge&lt;/li&gt;
&lt;li&gt;Execute different commands based on the results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These conditionals make scripts more reliable because they validate conditions before executing operations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Organizing Code with Functions
&lt;/h4&gt;

&lt;p&gt;As scripts become more complex, writing everything in a single block quickly becomes difficult to manage.&lt;/p&gt;

&lt;p&gt;Functions solve this by grouping related commands into reusable blocks.&lt;/p&gt;

&lt;p&gt;Instead of duplicating code throughout a script, a function can be written once and called whenever needed.&lt;/p&gt;

&lt;p&gt;This improves readability, reduces maintenance effort, and makes debugging much easier.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bringing Everything Together
&lt;/h4&gt;

&lt;p&gt;The final assignment combined every concept into a single Bash automation script.&lt;/p&gt;

&lt;p&gt;The script was designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Display user and system information&lt;/li&gt;
&lt;li&gt;Store values using variables&lt;/li&gt;
&lt;li&gt;Manage collections with arrays&lt;/li&gt;
&lt;li&gt;Repeat tasks using loops&lt;/li&gt;
&lt;li&gt;Verify files and directories&lt;/li&gt;
&lt;li&gt;Make decisions with conditionals&lt;/li&gt;
&lt;li&gt;Organize reusable logic using functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although these are foundational Bash concepts, together they represent the building blocks of automation used across Linux administration, DevOps workflows, cloud infrastructure, and production support.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;p&gt;One thing this assignment reinforced is that automation is not simply about writing scripts.&lt;/p&gt;

&lt;p&gt;Automation starts with understanding the manual process. Once the workflow is fully understood, repetitive tasks can be transformed into reusable, reliable, and consistent scripts.&lt;/p&gt;

&lt;p&gt;As someone beginning a career in DevOps, this has changed the way I think about operational work. Instead of asking, "How do I perform this task?", I now find myself asking, "How can I automate this task safely and efficiently?"&lt;/p&gt;

&lt;p&gt;Bash scripting is only one piece of the DevOps ecosystem, but it provides a strong foundation for future topics such as Infrastructure as Code, CI/CD pipelines, configuration management, cloud automation, and production engineering.&lt;/p&gt;

&lt;p&gt;This is just the beginning of my automation journey, and I'm excited to continue building tools that simplify operations, improve reliability, and reduce manual effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by &lt;a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/" rel="noopener noreferrer"&gt;Pravin Mishra&lt;/a&gt;. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>bash</category>
      <category>devops</category>
      <category>linux</category>
    </item>
    <item>
      <title>How the Internet Works: A Beginner's Guide to Networking from Browser to Server</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Wed, 22 Jul 2026 12:39:35 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/how-the-internet-works-a-beginners-guide-to-networking-from-browser-to-server-3g6m</link>
      <guid>https://dev.to/rubi_cloud/how-the-internet-works-a-beginners-guide-to-networking-from-browser-to-server-3g6m</guid>
      <description>&lt;p&gt;Learn how DNS, IP addresses, TCP/IP, packet switching, and HTTPS work together when you visit a website.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"You can't troubleshoot what you don't understand. For a DevOps Engineer, networking isn't optional, it's the foundation behind every deployment, API call, and cloud service."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I first started learning DevOps, networking felt overwhelming. I could memorize terms like DNS, IP Address, TCP/IP, and HTTP/HTTPS, but I struggled to understand how they worked together. I knew the definitions, but I couldn't visualize what actually happens when someone types a website address into a browser.&lt;/p&gt;

&lt;p&gt;To make learning easier, let's use an imaginary online bookstore called EpicReads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Journey Begins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you open your browser and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://epicreads.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From your perspective, it's just a website address.&lt;/p&gt;

&lt;p&gt;Behind the scenes, however, several networking technologies work together in just a few milliseconds to deliver the webpage to your screen.&lt;/p&gt;

&lt;p&gt;Let's walk through that journey step by step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: DNS Finds the Server
&lt;/h3&gt;

&lt;p&gt;The first question your browser asks is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Where is epicreads.com?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Browsers cannot communicate using names like epicreads.com.&lt;/p&gt;

&lt;p&gt;They communicate using IP addresses.&lt;/p&gt;

&lt;p&gt;This is where DNS (Domain Name System) comes in.&lt;/p&gt;

&lt;p&gt;Think of DNS as the internet's phonebook.&lt;/p&gt;

&lt;p&gt;It translates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;epicreads.com

into something computers understand:

52.172.142.222
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This translation happens because of a DNS A Record, which maps a domain name directly to an IPv4 address.&lt;/p&gt;

&lt;p&gt;Without DNS, we'd have to memorize long strings of numbers every time we wanted to visit a website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Connecting to the Server
&lt;/h3&gt;

&lt;p&gt;Now the browser knows where the server lives.&lt;/p&gt;

&lt;p&gt;It begins communicating using the TCP/IP protocol suite.&lt;/p&gt;

&lt;p&gt;This consists of two major protocols:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP (Internet Protocol)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IP is responsible for routing data to the correct destination.&lt;/p&gt;

&lt;p&gt;Think of it as the address written on a package.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP (Transmission Control Protocol)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TCP ensures that every piece of data arrives safely, completely, and in the correct order.&lt;/p&gt;

&lt;p&gt;Think of TCP as the delivery company making sure every package reaches the customer without anything missing.&lt;/p&gt;

&lt;p&gt;Together, TCP/IP forms the foundation of internet communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Packet Switching
&lt;/h3&gt;

&lt;p&gt;The browser doesn't send one huge request.&lt;/p&gt;

&lt;p&gt;Instead, it breaks the request into many smaller pieces called packets.&lt;/p&gt;

&lt;p&gt;This process is known as Packet Switching.&lt;/p&gt;

&lt;p&gt;Each packet can travel through different routers and network paths.&lt;/p&gt;

&lt;p&gt;Some packets may even arrive before others.&lt;/p&gt;

&lt;p&gt;TCP keeps track of every packet and puts them back together once they reach the destination.&lt;/p&gt;

&lt;p&gt;This makes the internet faster, more efficient, and more resilient.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: HTTP and HTTPS
&lt;/h3&gt;

&lt;p&gt;After reaching the server, the browser sends an HTTP or HTTPS request.&lt;/p&gt;

&lt;p&gt;These protocols define how browsers and web servers communicate.&lt;/p&gt;

&lt;p&gt;Today, almost every website uses HTTPS because it encrypts communication between the browser and the server.&lt;/p&gt;

&lt;p&gt;That encryption protects information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;Credit card details&lt;/li&gt;
&lt;li&gt;Personal information&lt;/li&gt;
&lt;li&gt;Login sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without HTTPS, anyone intercepting the traffic could potentially read the transmitted data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: The Server Processes the Request
&lt;/h3&gt;

&lt;p&gt;The request finally reaches the EpicReads web server.&lt;/p&gt;

&lt;p&gt;The server may:&lt;/p&gt;

&lt;p&gt;Retrieve available books&lt;br&gt;
Check user accounts&lt;br&gt;
Read shopping cart information&lt;br&gt;
Process orders&lt;br&gt;
Query the database&lt;/p&gt;

&lt;p&gt;Once everything is ready, the server creates a response and sends it back to your browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: The Browser Displays the Website
&lt;/h3&gt;

&lt;p&gt;The response also travels across the internet using Packet Switching.&lt;/p&gt;

&lt;p&gt;TCP checks that every packet arrives successfully.&lt;/p&gt;

&lt;p&gt;The browser reassembles the packets, interprets the HTML, CSS, and JavaScript, and finally displays the EpicReads homepage.&lt;/p&gt;

&lt;p&gt;All of this typically happens in less than a second.&lt;/p&gt;

&lt;h3&gt;
  
  
  Putting It All Together
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fer1vu8um28r734y9gkhv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fer1vu8um28r734y9gkhv.png" alt="flow chart diagram of how data travels through the internet" width="800" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you understand this flow, networking becomes much less intimidating.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Networking is one of the most important skills for anyone pursuing a career in DevOps, Cloud Engineering, or Site Reliability Engineering.&lt;/p&gt;

&lt;p&gt;At first, it can feel like a collection of disconnected terms and protocols. But once you understand how DNS, IP addresses, TCP/IP, Packet Switching, and HTTPS work together, the internet starts to make much more sense.&lt;/p&gt;

&lt;p&gt;If you're just beginning your DevOps journey, don't focus solely on memorizing definitions. Focus on understanding the complete flow of a request—from your browser to the server and back again.&lt;/p&gt;

&lt;p&gt;That's when networking truly starts to click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S. This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by &lt;a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/" rel="noopener noreferrer"&gt;Pravin Mishra&lt;/a&gt;. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>networking</category>
      <category>dns</category>
      <category>tcpip</category>
    </item>
    <item>
      <title># Reflection – Week 2</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Fri, 10 Jul 2026 09:23:11 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/-reflection-week-2-4ach</link>
      <guid>https://dev.to/rubi_cloud/-reflection-week-2-4ach</guid>
      <description>&lt;p&gt;"&lt;strong&gt;Shifting from Prompt Engineering to Infrastructure Orchestration&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;Week 2 was a mix of excitement, curiosity, and a little bit of frustration. I learned a lot of new concepts, but I also realized that the best way to understand them is by actually trying them out. Reading or watching tutorials helps, but experimenting with the tools made everything click for me.&lt;/p&gt;

&lt;p&gt;One of the topics I enjoyed learning about was Claude Code. Before this week, I mainly thought of AI as something that answers questions or helps write content. Seeing how Claude can assist with coding, debugging, and understanding projects made me see it differently. It feels less like a search engine and more like someone you can work with while building something. That really changed how I think about using AI in development.&lt;/p&gt;

&lt;p&gt;Another interesting topic was Skills. I liked the idea that you can give an LLM specific skills so it behaves more like a specialist instead of a general assistant. It made me realize that the quality of the output doesn't only depend on the model itself, but also on how you guide it and what tools or skills you give it. That was something I hadn't really thought about before, and I can already see how useful it could be for different types of projects.&lt;/p&gt;

&lt;p&gt;I also learned about Subagents, which was a new concept for me. At first, I didn't really understand why you would need multiple agents instead of just asking one AI to do everything. But after learning more about it, I started to see the benefit. Having different agents focus on different tasks seems like a much cleaner and more organized way to work, especially for bigger projects.&lt;/p&gt;

&lt;p&gt;The biggest challenge I faced this week was running out of tokens while practicing. It happened a few times, and honestly, it was a little annoying because I would be in the middle of exploring an idea and suddenly had to stop. Even though it was frustrating, it also made me think more carefully about how I write prompts and how I use my conversations. I learned that being clear and intentional can make a big difference.&lt;/p&gt;

&lt;p&gt;Despite the challenges, there was one moment this week that I’m really proud of. I was working on setting up infrastructure, and seeing my Terraform files get generated automatically by the AI felt incredible. However, it didn't work perfectly right away and threw an error. Instead of panicking or blindly asking the AI to fix it, I took a step back, read the error output carefully, and figured out how to fix it myself. Actually understanding what went wrong and resolving it was a huge confidence booster.&lt;/p&gt;

&lt;p&gt;This week also changed my mindset a bit. I realized that it's okay not to understand everything immediately. Some of the concepts felt overwhelming at first, but after trying them myself, they became much easier to understand. I'm starting to feel more comfortable experimenting instead of worrying about getting everything right the first time.&lt;/p&gt;

&lt;p&gt;Going forward, one habit I want to build is working on more hands-on projects with Claude instead of only learning the theory. I think building small projects and experimenting with different features will help me remember what I've learned much better than just reading about them. I also want to keep challenging myself by trying new ideas, even if they don't work perfectly on the first attempt.&lt;/p&gt;

&lt;p&gt;Overall, Week 2 helped me see AI as more than just a tool for answering questions. I'm beginning to understand how it can become a real partner in learning and building projects. There were definitely some challenges along the way, but they were part of the learning experience, and I'm looking forward to seeing what I'll be able to build as I keep practicing.&lt;/p&gt;

&lt;p&gt;This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by &lt;a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/" rel="noopener noreferrer"&gt;Pravin Mishra&lt;/a&gt;. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dmibypravinmishra</category>
      <category>agenticai</category>
      <category>devops</category>
      <category>claude</category>
    </item>
    <item>
      <title>DevOps Success Mindset</title>
      <dc:creator>Adeje Oluwatobiloba</dc:creator>
      <pubDate>Thu, 02 Jul 2026 21:37:08 +0000</pubDate>
      <link>https://dev.to/rubi_cloud/devops-success-mindset-hpo</link>
      <guid>https://dev.to/rubi_cloud/devops-success-mindset-hpo</guid>
      <description>&lt;p&gt;The DevOps Mindset: Build Yourself Before You Build Systems&lt;/p&gt;

&lt;p&gt;We often measure growth in DevOps by the tools we know namely Docker, Kubernetes, Terraform, GitHub Actions, Ansible, cloud platforms, and everything in between. While mastering these technologies is important, they're only part of the equation.&lt;/p&gt;

&lt;p&gt;The most valuable system you'll ever build isn't running in the cloud. It's the one that shapes how you think, learn, solve problems, and grow as an engineer.&lt;/p&gt;

&lt;p&gt;Tools will change. Principles won't.&lt;/p&gt;

&lt;p&gt;Here's the mindset that has become increasingly important to me as I continue my journey in DevOps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Long-Term Thinking&lt;br&gt;
There are no overnight experts in DevOps.&lt;br&gt;
Every deployment, failed pipeline, production issue, and late-night debugging session teaches something valuable. These experiences compound over time, shaping both your technical skills and your confidence.&lt;br&gt;
Instead of chasing rapid progress, focus on becoming slightly better every day. Consistency will always outperform short bursts of motivation. &lt;br&gt;
Remember: careers are built one commit, one project, and one lesson at a time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Think Like an Engineer, Not Just a Tool User&lt;br&gt;
Knowing commands is useful. Understanding systems is invaluable.&lt;br&gt;
Great engineers don't jump straight to solutions—they investigate first. They rely on logs, metrics, monitoring data, and evidence instead of assumptions. They ask why before asking how.&lt;br&gt;
When something breaks:&lt;br&gt;
a. Stay calm.&lt;br&gt;
b. Gather information.&lt;br&gt;
c. Identify the root cause.&lt;br&gt;
d. Improve the system so the same problem is less likely to happen again.&lt;br&gt;
DevOps isn't about fixing the same issue repeatedly; it's about    building systems that prevent it from happening in the first place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build More Than You Consume&lt;br&gt;
Tutorials are a great starting point, but they shouldn't be your destination.&lt;br&gt;
The fastest way to grow is to build.&lt;br&gt;
Create projects that challenge you. Experiment with new technologies. Break things in your lab environment. Document your discoveries, even when they don't go as planned.&lt;br&gt;
Every GitHub repository, technical article, and project becomes evidence of your progress.&lt;br&gt;
Your portfolio should speak before your résumé does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Protect Time for Deep Work&lt;br&gt;
Modern engineering comes with endless distractions—notifications, meetings, social media, and constant context switching.&lt;br&gt;
Real progress happens when you dedicate uninterrupted time to meaningful work.&lt;br&gt;
Whether you're debugging Kubernetes, writing Terraform modules, or designing a CI/CD pipeline, focus on one important objective at a time.&lt;br&gt;
Quality engineering requires attention, not multitasking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stay Curious and Adaptable&lt;br&gt;
Technology evolves faster than job titles.&lt;br&gt;
The tools you rely on today may be replaced tomorrow, but the ability to learn will always remain valuable.&lt;br&gt;
Be willing to question old habits, embrace better practices, and remain teachable regardless of your experience.&lt;br&gt;
The best engineers don't know everything.&lt;br&gt;
They simply never stop learning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collaboration Is a DevOps Superpower&lt;br&gt;
DevOps isn't just about automation.&lt;br&gt;
It's about people.&lt;br&gt;
The best solutions emerge from clear communication, thoughtful documentation, constructive feedback, and shared ownership.&lt;br&gt;
Write documentation that helps the next engineer.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Review code with respect.&lt;br&gt;
 Share knowledge freely.&lt;br&gt;
 Celebrate team success, not just individual achievement.&lt;br&gt;
 Strong systems are built by strong teams.&lt;br&gt;
 Measure Progress, Not Perfection&lt;/p&gt;

&lt;p&gt;At the end of each week, ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did I build something meaningful?&lt;/li&gt;
&lt;li&gt;Did I learn something new?&lt;/li&gt;
&lt;li&gt;Did I improve an existing process?&lt;/li&gt;
&lt;li&gt;Did I document or share what I learned?&lt;/li&gt;
&lt;li&gt;Did I help someone else grow?&lt;/li&gt;
&lt;li&gt;Did I take care of my health and maintain a sustainable pace?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need a perfect week.&lt;br&gt;
You just need more good weeks than bad ones.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
DevOps is often associated with automation, cloud infrastructure, containers, and deployment pipelines.&lt;br&gt;
But beneath every reliable system is an engineer who has developed discipline, curiosity, resilience, and a commitment to continuous improvement.&lt;/p&gt;

&lt;p&gt;Invest in your technical skills.&lt;br&gt;
Invest even more in your mindset.&lt;br&gt;
Because tools will evolve, platforms will change, and frameworks will come and go.&lt;br&gt;
A growth mindset, strong engineering principles, and consistent execution will remain your greatest competitive advantage.&lt;br&gt;
Build systems that scale.&lt;br&gt;
Build habits that last.&lt;br&gt;
And never stop building yourself.&lt;/p&gt;

&lt;p&gt;What mindset has had the biggest impact on your growth as an engineer? I'd love to hear your thoughts in the comments.&lt;/p&gt;

&lt;p&gt;This post is part of the DevOps Micro Internship (DMI) with Agentic AI — Cohort 3 — by &lt;a href="https://www.linkedin.com/in/pravin-mishra-aws-trainer/" rel="noopener noreferrer"&gt;Pravin Mishra&lt;/a&gt;. My graded progress is public: &lt;a href="https://dmi.pravinmishra.com/s/Tobilee10.html" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/s/Tobilee10.html&lt;/a&gt; · Start your DevOps journey: &lt;a href="https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3" rel="noopener noreferrer"&gt;https://dmi.pravinmishra.com/?utm_source=student&amp;amp;utm_medium=ps-linkedin&amp;amp;utm_campaign=cohort3&lt;/a&gt; &lt;/p&gt;

</description>
      <category>devops</category>
      <category>productivity</category>
      <category>programming</category>
      <category>cloudnative</category>
    </item>
  </channel>
</rss>
