<?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: Faith Omobude</title>
    <description>The latest articles on DEV Community by Faith Omobude (@faithomobude).</description>
    <link>https://dev.to/faithomobude</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%2F3716094%2Fc497281a-b296-4e48-8265-e5e30dbb4fab.jpg</url>
      <title>DEV Community: Faith Omobude</title>
      <link>https://dev.to/faithomobude</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/faithomobude"/>
    <language>en</language>
    <item>
      <title>Building a Developer Profile That Keeps Working: Introducing Profile Studio</title>
      <dc:creator>Faith Omobude</dc:creator>
      <pubDate>Wed, 19 Aug 2026 15:25:00 +0000</pubDate>
      <link>https://dev.to/faithomobude/building-a-developer-profile-that-keeps-working-introducing-profile-studio-ada</link>
      <guid>https://dev.to/faithomobude/building-a-developer-profile-that-keeps-working-introducing-profile-studio-ada</guid>
      <description>&lt;p&gt;Whilst you build, your GitHub profile tells us a lot about the kind of developer you are.&lt;/p&gt;

&lt;p&gt;Your repositories show what you build.&lt;/p&gt;

&lt;p&gt;Your contributions show that you build consistently.&lt;/p&gt;

&lt;p&gt;But your profile README gives people a chance to understand &lt;strong&gt;who you are, what you're working on, what you're learning, and what you care about.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recruiters, developers, collaborators, and potential employers may visit your GitHub profile before they ever speak to you.&lt;/p&gt;

&lt;p&gt;And that's what got me thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if a GitHub profile could be more than just a README?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I started building &lt;strong&gt;Profile Studio&lt;/strong&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%2Frzlxbqvstabde04cch68.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%2Frzlxbqvstabde04cch68.png" alt="Customized README interface showcase my information" width="800" height="416"&gt;&lt;/a&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%2Fth65y582c7y6pi35pbvj.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%2Fth65y582c7y6pi35pbvj.png" alt="Contribtion graph and the dev.to integration" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Profile Studio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloudfay.github.io/profile-studio/" rel="noopener noreferrer"&gt;Profile Studio&lt;/a&gt; started as a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make it easier for developers to create a good-looking GitHub profile README.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But as I kept building, the idea evolved.&lt;/p&gt;

&lt;p&gt;I didn't want to build just another README generator.&lt;/p&gt;

&lt;p&gt;I wanted to build a &lt;strong&gt;mini landing page for developers&lt;/strong&gt; that lives directly inside their GitHub profile.&lt;/p&gt;

&lt;p&gt;Something that could bring together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👋 A personalized introduction&lt;/li&gt;
&lt;li&gt;🚀 About-me information&lt;/li&gt;
&lt;li&gt;🛠️ Technology stack&lt;/li&gt;
&lt;li&gt;🔗 Social links&lt;/li&gt;
&lt;li&gt;📊 GitHub statistics&lt;/li&gt;
&lt;li&gt;📈 Contribution activity&lt;/li&gt;
&lt;li&gt;💭 Developer quotes&lt;/li&gt;
&lt;li&gt;📝 DEV.to articles&lt;/li&gt;
&lt;li&gt;🎨 Custom branding&lt;/li&gt;
&lt;li&gt;⚙️ DEV.to automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your GitHub profile should tell your story without requiring someone to dig through your repositories to understand you.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;I've always found it interesting that developers spend so much time building applications but sometimes spend very little time thinking about how people experience their developer identity.&lt;/p&gt;

&lt;p&gt;Your GitHub profile is one of those places.&lt;/p&gt;

&lt;p&gt;You might have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;great projects,&lt;/li&gt;
&lt;li&gt;interesting repositories,&lt;/li&gt;
&lt;li&gt;technical experience,&lt;/li&gt;
&lt;li&gt;articles,&lt;/li&gt;
&lt;li&gt;certifications,&lt;/li&gt;
&lt;li&gt;open-source contributions,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;but if someone lands on your profile and sees an empty or generic README, they don't immediately get that context.&lt;/p&gt;

&lt;p&gt;Profile Studio is my attempt to solve that.&lt;/p&gt;

&lt;p&gt;Not by replacing a portfolio.&lt;/p&gt;

&lt;p&gt;Not by replacing your GitHub repositories.&lt;/p&gt;

&lt;p&gt;But by creating a &lt;strong&gt;better front door to your developer identity.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  It's More Than a README Generator
&lt;/h2&gt;

&lt;p&gt;This distinction is important to me.&lt;/p&gt;

&lt;p&gt;A README generator usually does something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enter some information → generate Markdown → copy it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Profile Studio goes a little further.&lt;/p&gt;

&lt;p&gt;The application lets you configure your profile visually and generates a README that brings those different pieces together.&lt;/p&gt;

&lt;p&gt;And now, it can also package automation for your DEV.to content.&lt;/p&gt;

&lt;p&gt;So the generated output isn't just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can also include the supporting files required to keep your DEV.to section updated automatically.&lt;/p&gt;

&lt;p&gt;That's where the project became much more interesting from an engineering perspective.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture Behind Profile Studio
&lt;/h2&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%2Fsazxze69whg9fze215el.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%2Fsazxze69whg9fze215el.png" alt="Profile-studio UI interface" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Underneath the interface, Profile Studio is intentionally modular.&lt;/p&gt;

&lt;p&gt;The application started with responsibilities living together in a large JavaScript file.&lt;/p&gt;

&lt;p&gt;As the project grew, that became increasingly difficult to reason about.&lt;/p&gt;

&lt;p&gt;So I started separating responsibilities.&lt;/p&gt;

&lt;p&gt;The current architecture looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──────────────────────────┐
                    │       User / Browser     │
                    └────────────┬─────────────┘
                                 │
                                 ▼
                    ┌──────────────────────────┐
                    │       Profile Studio     │
                    │          UI              │
                    │      index.html          │
                    └────────────┬─────────────┘
                                 │
                                 ▼
                    ┌──────────────────────────┐
                    │          app.js           │
                    │   Wizard + UI State Flow  │
                    └────────────┬─────────────┘
                                 │
              ┌──────────────────┼──────────────────┐
              │                  │                  │
              ▼                  ▼                  ▼
       ┌────────────┐     ┌────────────┐     ┌────────────┐
       │  state.js  │     │ devto.js   │     │ generator  │
       │            │     │            │     │    .js     │
       │ State      │     │ DEV.to API │     │ Markdown   │
       │ management │     │ integration│     │ generation │
       └────────────┘     └─────┬──────┘     └─────┬──────┘
                                │                  │
                                ▼                  ▼
                         ┌────────────┐      ┌─────────────┐
                         │ DEV.to API │      │ README.md   │
                         └────────────┘      └─────────────┘

                         ┌────────────┐
                         │ security.js│
                         │            │
                         │ URL + HTML │
                         │ sanitizing │
                         └────────────┘

                         ┌────────────┐
                         │ catalog.js │
                         │            │
                         │ Tech/social│
                         │ metadata   │
                         └────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The major pieces are separated by responsibility:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;app.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Handles the application flow and UI interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;state.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Owns application state and persistence.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;devto.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Handles DEV.to-specific functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;generator.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Handles README generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;security.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Provides output-safety utilities such as URL validation and HTML/Markdown escaping.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;catalog.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Contains the catalog of technologies, social platforms, badges, and related configuration.&lt;/p&gt;

&lt;p&gt;That separation wasn't where the project started.&lt;/p&gt;

&lt;p&gt;It's where the project &lt;strong&gt;evolved&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that evolution taught me something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A working application isn't necessarily a well-engineered application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  From "It Works" to "It's Engineered"
&lt;/h2&gt;

&lt;p&gt;It's very easy to look at an application and say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It works. Ship it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But working is only one dimension of good software.&lt;/p&gt;

&lt;p&gt;As Profile Studio grew, I started asking different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can someone else understand this code?&lt;/li&gt;
&lt;li&gt;Can I change one feature without breaking three others?&lt;/li&gt;
&lt;li&gt;Are important pieces tested?&lt;/li&gt;
&lt;li&gt;Is user input handled safely?&lt;/li&gt;
&lt;li&gt;What happens when an external service fails?&lt;/li&gt;
&lt;li&gt;Can I diagnose problems when something goes wrong?&lt;/li&gt;
&lt;li&gt;Does the architecture still make sense as the application grows?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application wasn't necessarily broken.&lt;/p&gt;

&lt;p&gt;But responsibilities were beginning to pile up.&lt;/p&gt;

&lt;p&gt;State management was mixed with UI logic.&lt;/p&gt;

&lt;p&gt;External integrations were mixed with application logic.&lt;/p&gt;

&lt;p&gt;README generation was mixed into the rest of the application.&lt;/p&gt;

&lt;p&gt;So I started refactoring.&lt;/p&gt;

&lt;p&gt;Not because the application stopped working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because I wanted it to be easier to keep working.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's one of the engineering lessons this project has been teaching me.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good engineering isn't just about making something work. It's about making it possible for the software to continue working as it evolves.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Security Matters Even at the early stage
&lt;/h2&gt;

&lt;p&gt;One of the things I didn't initially expect to spend so much time thinking about was security.&lt;/p&gt;

&lt;p&gt;Profile Studio accepts user-provided information and external URLs.&lt;/p&gt;

&lt;p&gt;That means the generated output cannot simply trust everything it receives.&lt;/p&gt;

&lt;p&gt;For example, the project has safety helpers such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;safeUrl&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;escapeHtml&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;escapeMdText&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These help prevent unsafe URLs and injected markup from being blindly rendered into generated output.&lt;/p&gt;

&lt;p&gt;This is something I think is easy to overlook when building seemingly "simple" developer tools.&lt;/p&gt;

&lt;p&gt;You might think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It's only generating a README."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the application is still processing input.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;input should be treated as input.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing the Application
&lt;/h2&gt;

&lt;p&gt;The project also has automated tests.&lt;/p&gt;

&lt;p&gt;At the time of writing, the test suite covers things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DEV.to username normalization&lt;/li&gt;
&lt;li&gt;DEV.to URL handling&lt;/li&gt;
&lt;li&gt;DEV.to Markdown generation&lt;/li&gt;
&lt;li&gt;unsafe article URLs&lt;/li&gt;
&lt;li&gt;unsafe cover images&lt;/li&gt;
&lt;li&gt;HTML escaping&lt;/li&gt;
&lt;li&gt;Markdown escaping&lt;/li&gt;
&lt;li&gt;allowed URL schemes&lt;/li&gt;
&lt;li&gt;rejected JavaScript URLs&lt;/li&gt;
&lt;li&gt;rejected data URLs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;safeUrl()&lt;/code&gt; behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current test run is:&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%2Fdd569ezgypo09hmbjoeu.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%2Fdd569ezgypo09hmbjoeu.png" alt="Test run results" width="402" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\js\generator.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--check&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\js\app.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as part of my development workflow.&lt;/p&gt;

&lt;p&gt;It's a small project, but I'm trying to apply the same engineering mindset I'd want to use on larger systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  DEV.to Integration
&lt;/h2&gt;

&lt;p&gt;This is one of the features I'm particularly excited about.&lt;/p&gt;

&lt;p&gt;If you enable the DEV.to section in Profile Studio, provide your DEV.to username, select how many posts you want displayed, and enable &lt;strong&gt;automated DEV.to fetches&lt;/strong&gt;, the generated package includes the files needed to automate the README updates.&lt;/p&gt;

&lt;p&gt;The package contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/
├── profile-studio.json
├── scripts/
│   └── update-devto.js
└── workflows/
    └── devto-readme.yml

README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea is that your GitHub profile can automatically keep its DEV.to section updated instead of requiring you to manually edit the README every time you publish an article.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting Up the DEV.to Package
&lt;/h2&gt;

&lt;p&gt;I've tried to make this accessible even if you're relatively new to Git and GitHub.&lt;/p&gt;

&lt;p&gt;You don't need to be an expert.&lt;/p&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A GitHub account&lt;/li&gt;
&lt;li&gt;A DEV.to account&lt;/li&gt;
&lt;li&gt;Your GitHub username&lt;/li&gt;
&lt;li&gt;Your DEV.to username&lt;/li&gt;
&lt;li&gt;Git installed&lt;/li&gt;
&lt;li&gt;The DEV.to Package ZIP generated by Profile Studio&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your GitHub Special Repository
&lt;/h2&gt;

&lt;p&gt;Your GitHub profile README lives in a special repository.&lt;/p&gt;

&lt;p&gt;The repository name must be exactly the same as your GitHub username.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub username:
CloudFay

Special repository:
CloudFay/CloudFay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;github.com/CloudFay/CloudFay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository should be public.&lt;/p&gt;

&lt;p&gt;And then toggle your README.md option &lt;strong&gt;ON&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Download the DEV.to Package
&lt;/h2&gt;

&lt;p&gt;When you enable the DEV.to integration and configure your username and desired number of posts, Profile Studio can generate the DEV.to package.&lt;/p&gt;

&lt;p&gt;Download the &lt;code&gt;.zip&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dev.to-Package.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fe0xtpg5rcn5klvzbww6k.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%2Fe0xtpg5rcn5klvzbww6k.png" alt="Dev.to_package.zip file" width="477" height="23"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Extract the ZIP
&lt;/h2&gt;

&lt;p&gt;On Windows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Right-click the ZIP.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Extract All...&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Extract it somewhere convenient.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should have something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dev.to Package/
├── .github/
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Because &lt;code&gt;.github&lt;/code&gt; is normally treated as a hidden folder, make sure &lt;strong&gt;Hidden items&lt;/strong&gt; are enabled in File Explorer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Create or Open Your Special Repository
&lt;/h2&gt;

&lt;p&gt;Create your GitHub special repository if you don't already have one.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CloudFay/CloudFay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then clone it in your vscode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/YOUR_USERNAME/YOUR_USERNAME.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/CloudFay/CloudFay.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then enter the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;YOUR_USERNAME&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CloudFay&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run in order to open the repository in your Vscode:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4 — Copy the Package Files
&lt;/h2&gt;

&lt;p&gt;This is where the PowerShell commands make the setup much easier.&lt;/p&gt;

&lt;p&gt;If your extracted package is inside your Downloads folder, you can copy the &lt;code&gt;.github&lt;/code&gt; folder directly into your repository with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\Downloads\.github"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".github"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then copy the generated README:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Copy-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\Downloads\README.md"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"README.md"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands essentially tell PowerShell:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Take the package's &lt;code&gt;.github&lt;/code&gt; directory and README and place them into the repository I'm currently working in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Verify the &lt;code&gt;.github&lt;/code&gt; files
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".github"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the automation files.&lt;/p&gt;

&lt;p&gt;Then verify the README:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-ChildItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"README.md"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your repository should now look approximately like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YOUR_USERNAME/
│
├── .github/
│   ├── profile-studio.json
│   ├── scripts/
│   │   └── update-devto.js
│   └── workflows/
│       └── devto-readme.yml
│
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; The &lt;code&gt;.github&lt;/code&gt; directory must be directly inside the root of your special repository.&lt;/p&gt;

&lt;p&gt;You do not want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YOUR_USERNAME/
└── Dev.to Package/
    └── .github/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YOUR_USERNAME/
├── .github/
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5 — Check Git
&lt;/h2&gt;

&lt;p&gt;Before committing anything, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see your README and &lt;code&gt;.github&lt;/code&gt; changes.&lt;/p&gt;

&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;README.md&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;commit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Add DEV.to integration"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And push:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then you see this: &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%2F3a7ggrxbush1luemf0gc.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%2F3a7ggrxbush1luemf0gc.png" alt="My special repository" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6 — Check GitHub Actions
&lt;/h2&gt;

&lt;p&gt;Once the changes reach GitHub:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your repository.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Actions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Find the DEV.to workflow.&lt;/li&gt;
&lt;li&gt;Open the workflow run.&lt;/li&gt;
&lt;li&gt;Check whether it completed successfully.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GitHub Actions is responsible for running the automation.&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%2Fpw5c8gwb9z4lyblbqe5n.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%2Fpw5c8gwb9z4lyblbqe5n.png" alt="the Actions workflow" width="799" height="265"&gt;&lt;/a&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%2Fd4jpo0z8jxeqmnag95xr.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%2Fd4jpo0z8jxeqmnag95xr.png" alt="Jobs run successfully" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7 — Visit Your Profile
&lt;/h2&gt;

&lt;p&gt;Finally, visit:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Your generated README should now appear on your profile.&lt;/p&gt;

&lt;p&gt;And if the DEV.to automation is configured correctly, your articles can be updated automatically according to the package configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Small Project, A Lot of Engineering Lessons
&lt;/h2&gt;

&lt;p&gt;Profile Studio started with a relatively simple goal.&lt;/p&gt;

&lt;p&gt;Generate a better GitHub profile README.&lt;/p&gt;

&lt;p&gt;But building it has exposed me to a much bigger set of engineering problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State management.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular architecture.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;External API integration.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output security.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testing.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Git workflows.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub Actions.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer experience.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automation.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And perhaps most importantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;maintainability.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is still evolving.&lt;/p&gt;

&lt;p&gt;That's actually part of the point.&lt;/p&gt;

&lt;p&gt;I'm building it, breaking things, fixing things, refactoring things, testing things, and documenting what I'm learning along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;There are still plenty of things I'd like to explore with Profile Studio.&lt;/p&gt;

&lt;p&gt;The project is becoming less about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do I generate a README?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and more about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"How can I help developers build a better representation of themselves on GitHub?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are features I'd like to improve.&lt;/p&gt;

&lt;p&gt;There are architectural decisions I'd like to revisit.&lt;/p&gt;

&lt;p&gt;There are probably bugs I haven't discovered yet.&lt;/p&gt;

&lt;p&gt;And there are definitely things I would design differently if I started the project again today.&lt;/p&gt;

&lt;p&gt;That's part of building software.&lt;/p&gt;

&lt;p&gt;You don't always learn everything before you build.&lt;/p&gt;

&lt;p&gt;Sometimes &lt;strong&gt;building is how you learn.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Profile Studio
&lt;/h2&gt;

&lt;p&gt;If you're a developer and want to create your own GitHub profile, you can try Profile Studio here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloudfay.github.io/profile-studio" rel="noopener noreferrer"&gt;🚀 Try Profile Studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source, so if you're interested in the implementation, you can also explore the codebase:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CloudFay/profile-studio" rel="noopener noreferrer"&gt;💻 View the Profile Studio source code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find something that could be improved, have an idea for a feature, or simply want to contribute, I'd love to hear from you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;I'm learning that building software isn't just about getting to the moment where you can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It works."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's also about asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can I understand it six months from now?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Can someone else contribute to it?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Can I safely change it?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What happens when something fails?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Can I trust what the application produces?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those questions are what turn a working application into an engineered application.&lt;/p&gt;

&lt;p&gt;And Profile Studio is giving me a very practical place to learn those lessons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm still building. I'm still learning. And this is only the beginning.&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>devops</category>
      <category>profilestudio</category>
      <category>github</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>A Working Application Isn't Necessarily a Well-Engineered Application</title>
      <dc:creator>Faith Omobude</dc:creator>
      <pubDate>Fri, 14 Aug 2026 08:24:24 +0000</pubDate>
      <link>https://dev.to/faithomobude/a-working-application-isnt-necessarily-a-well-engineered-application-391b</link>
      <guid>https://dev.to/faithomobude/a-working-application-isnt-necessarily-a-well-engineered-application-391b</guid>
      <description>&lt;p&gt;When I started building applications, I used to have a fairly simple definition of success:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;𝐈𝐟 𝐢𝐭 𝐰𝐨𝐫𝐤𝐬, 𝐢𝐭'𝐬 𝐰𝐨𝐫𝐤𝐢𝐧𝐠.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And honestly, that mindset makes sense when you're learning.&lt;/p&gt;

&lt;p&gt;You build a feature.&lt;br&gt;
You run it.&lt;br&gt;
It works.&lt;/p&gt;

&lt;p&gt;You fix a bug.&lt;br&gt;
You run it again.&lt;br&gt;
It works.&lt;/p&gt;

&lt;p&gt;You add another feature.&lt;/p&gt;

&lt;p&gt;It still works.&lt;/p&gt;

&lt;p&gt;So you move on.&lt;/p&gt;

&lt;p&gt;But as I've spent more time building and maintaining applications, I'm realizing that "𝐰𝐨𝐫𝐤𝐢𝐧𝐠" 𝐢𝐬 𝐨𝐧𝐥𝐲 𝐨𝐧𝐞 𝐩𝐚𝐫𝐭 𝐨𝐟 𝐠𝐨𝐨𝐝 𝐬𝐨𝐟𝐭𝐰𝐚𝐫𝐞 𝐞𝐧𝐠𝐢𝐧𝐞𝐞𝐫𝐢𝐧𝐠.&lt;/p&gt;

&lt;p&gt;An application can work perfectly and still be difficult to maintain.&lt;/p&gt;

&lt;p&gt;It can produce the right output while having an architecture that becomes painful to change.&lt;/p&gt;

&lt;p&gt;It can pass a few manual tests while having almost no automated protection against regressions.&lt;/p&gt;

&lt;p&gt;It can look polished while handling user input poorly.&lt;/p&gt;

&lt;p&gt;And it can work today while making tomorrow's development significantly harder.&lt;/p&gt;

&lt;p&gt;That's a distinction I'm learning to appreciate.&lt;/p&gt;




&lt;h2&gt;
  
  
  The questions start changing
&lt;/h2&gt;

&lt;p&gt;Earlier in my development journey, I was mostly asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"𝘏𝘰𝘸 𝘥𝘰 𝘐 𝘮𝘢𝘬𝘦 𝘵𝘩𝘪𝘴 𝘧𝘦𝘢𝘵𝘶𝘳𝘦 𝘸𝘰𝘳𝘬?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now I'm increasingly asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can someone else understand this code?&lt;/li&gt;
&lt;li&gt;Can I change one feature without breaking three others?&lt;/li&gt;
&lt;li&gt;Are the important parts tested?&lt;/li&gt;
&lt;li&gt;What happens when an external service fails?&lt;/li&gt;
&lt;li&gt;Is user input handled safely?&lt;/li&gt;
&lt;li&gt;Can I diagnose a problem when something goes wrong?&lt;/li&gt;
&lt;li&gt;Are responsibilities separated properly?&lt;/li&gt;
&lt;li&gt;Will this architecture still make sense as the application grows?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions don't necessarily make an application look better.&lt;/p&gt;

&lt;p&gt;But they can make it last 𝐥𝐨𝐧𝐠𝐞𝐫.&lt;/p&gt;

&lt;p&gt;And I think that's where engineering starts becoming different from simply writing code.&lt;/p&gt;




&lt;h2&gt;
  
  
  I experienced this while building
&lt;/h2&gt;

&lt;p&gt;I recently found myself confronting this while working on a developer tool.&lt;/p&gt;

&lt;p&gt;The application worked.&lt;/p&gt;

&lt;p&gt;There wasn't some massive bug forcing me to stop everything.&lt;/p&gt;

&lt;p&gt;The problem was subtler.&lt;/p&gt;

&lt;p&gt;As I added features, responsibilities started accumulating in the same places.&lt;/p&gt;

&lt;p&gt;Application state was mixed into the main application logic.&lt;/p&gt;

&lt;p&gt;External integrations were living alongside UI behaviour.&lt;/p&gt;

&lt;p&gt;README generation was becoming part of a large application file.&lt;/p&gt;

&lt;p&gt;Again, nothing was necessarily broken.&lt;/p&gt;

&lt;p&gt;But the code was becoming harder to reason about.&lt;/p&gt;

&lt;p&gt;And that was enough of a problem.&lt;/p&gt;

&lt;p&gt;So I started refactoring.&lt;/p&gt;

&lt;p&gt;I extracted application state into its own module.&lt;/p&gt;

&lt;p&gt;I separated the DEV.to integration.&lt;/p&gt;

&lt;p&gt;I moved README generation into its own generator module.&lt;/p&gt;

&lt;p&gt;I added tests around important behaviour.&lt;/p&gt;

&lt;p&gt;I introduced security helpers for things like URL validation and output escaping.&lt;/p&gt;

&lt;p&gt;And suddenly, the goal of the refactoring became clearer.&lt;/p&gt;

&lt;p&gt;I wasn't refactoring because the application stopped working.&lt;/p&gt;

&lt;p&gt;I was refactoring because I wanted to make it easier to keep working.&lt;/p&gt;




&lt;h2&gt;
  
  
  That's a different way of thinking about software
&lt;/h2&gt;

&lt;p&gt;There's a temptation, especially when you're building quickly, to think about engineering quality as something you add later.&lt;/p&gt;

&lt;p&gt;First:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make it work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maybe we'll clean it up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But I'm starting to think some of these concerns aren't really "cleanup."&lt;/p&gt;

&lt;p&gt;Testing isn't cleanup.&lt;/p&gt;

&lt;p&gt;Security isn't cleanup.&lt;/p&gt;

&lt;p&gt;Good separation of responsibilities isn't cleanup.&lt;/p&gt;

&lt;p&gt;Readable code isn't cleanup.&lt;/p&gt;

&lt;p&gt;A structure that makes future changes easier isn't cleanup.&lt;/p&gt;

&lt;p&gt;They're all part of the product.&lt;/p&gt;




&lt;h2&gt;
  
  
  Maintainability is a feature
&lt;/h2&gt;

&lt;p&gt;This is probably the biggest lesson I'm taking away.&lt;/p&gt;

&lt;p&gt;When we talk about application features, we usually think about things users can directly see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;dashboards&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;li&gt;integrations&lt;/li&gt;
&lt;li&gt;reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But maintainability is also a feature, just one that developers experience rather than end users.&lt;/p&gt;

&lt;p&gt;A maintainable application makes it easier to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;𝙪𝙣𝙙𝙚𝙧𝙨𝙩𝙖𝙣𝙙 → 𝙘𝙝𝙖𝙣𝙜𝙚 → 𝙩𝙚𝙨𝙩 → 𝙙𝙚𝙗𝙪𝙜 → 𝙚𝙭𝙩𝙚𝙣𝙙&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that has a real impact on how quickly a team can build.&lt;/p&gt;




&lt;h2&gt;
  
  
  I'm still learning this
&lt;/h2&gt;

&lt;p&gt;I don't think I've suddenly figured out what "good software engineering" means.&lt;/p&gt;

&lt;p&gt;Far from it.&lt;/p&gt;

&lt;p&gt;I'm learning by building things, breaking things, refactoring things, reading other people's code, and occasionally looking at something I wrote a few weeks earlier and asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"𝙒𝙝𝙮 𝙙𝙞𝙙 𝙄 𝙙𝙤 𝙞𝙩 𝙩𝙝𝙞𝙨 𝙬𝙖𝙮 😂?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that's probably part of the process.&lt;/p&gt;

&lt;p&gt;The more I build, the more I realize that software engineering isn't simply about making something work.&lt;/p&gt;

&lt;p&gt;It's about making something that continues to work as people, requirements, dependencies, and the codebase itself change.&lt;/p&gt;

&lt;p&gt;And I'm beginning to appreciate that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Good engineering isn't just about making software work. It's about making it possible for the software to keep working as it evolves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a lesson I'm taking with me into every project I build from here.&lt;/p&gt;




&lt;p&gt;If you're early in your software journey like me, don't feel like you need to understand all of this immediately.&lt;/p&gt;

&lt;p&gt;Build things.&lt;/p&gt;

&lt;p&gt;Make them work.&lt;/p&gt;

&lt;p&gt;Break them.&lt;/p&gt;

&lt;p&gt;Fix them.&lt;/p&gt;

&lt;p&gt;Then go back and ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What would make this easier to maintain?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because sometimes, that's where the real learning begins.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>devex</category>
      <category>javascript</category>
      <category>buildinginpublic</category>
    </item>
    <item>
      <title>Beyond the Hype: The Realignment of AI Power and the Rise of Model-Agnostic Infrastructure</title>
      <dc:creator>Faith Omobude</dc:creator>
      <pubDate>Tue, 10 Mar 2026 11:32:58 +0000</pubDate>
      <link>https://dev.to/faithomobude/beyond-the-hype-the-realignment-of-ai-power-and-the-rise-of-model-agnostic-infrastructure-1h7n</link>
      <guid>https://dev.to/faithomobude/beyond-the-hype-the-realignment-of-ai-power-and-the-rise-of-model-agnostic-infrastructure-1h7n</guid>
      <description>&lt;p&gt;Just as we've seen in the DevOps world, most organizations adopt AI tools, but few truly understand the outcomes they are buying into. In February 2026, the industry moved past the "honeymoon phase" of generative AI and into a gritty, politically charged reality. What we witnessed wasn't just a series of product updates; it was a fundamental realignment of the power structures that govern how we build, deploy, and trust the intelligence that now powers our production systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Loyalty Trap&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I've had discussions on DevOps generally, and I often talk about the "tool trap", the mistaken belief that installing a tool is the same as a transformation. In the AI space, we are seeing a similar phenomenon: the "loyalty trap". We’ve spent the last two years tethering our workflows to specific models, assuming that the companies behind them would remain the stable, mission-driven entities they claimed to be. &lt;/p&gt;

&lt;p&gt;February 2026 shattered that illusion. From political mega-donations to the militarization of LLMs, the events of the last few weeks have proven that in the world of high-stakes AI, loyalty is a luxury that neither users nor developers can afford. This isn't just a PR crisis; it's a &lt;strong&gt;production risk&lt;/strong&gt;. This is just to say, tech companies are stable ... until they are not.&lt;/p&gt;

&lt;p&gt;And your entire AI layer might depend on them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now, let's talk&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1: The Political Cost of "Neutrality"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The $25 Million Shockwave&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The month began with a seismic shift in the public's perception of OpenAI. When the company’s president donated $25M to MAGA, it wasn't just a personal political statement; it was a brand-defining moment that triggered the #QuitGPT movement. Over 700,000 users pledged to cancel their subscriptions within days.&lt;/p&gt;

&lt;p&gt;I read this and thought, &lt;em&gt;"Wait... people are migrating AI models because of political donations now?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, I've seen teams migrate their entire stack for &lt;strong&gt;far less&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So yes...&lt;/p&gt;

&lt;p&gt;What a time to be alive, don't you think?&lt;/p&gt;

&lt;p&gt;This highlights a critical lesson for tech leaders: in 2026, your cap table and your political affiliations are as much a part of your "product" as your API response times. For the first time, we saw a massive migration of users not because the technology failed, but because the ethics did.&lt;/p&gt;

&lt;p&gt;Welcome to &lt;strong&gt;non-functional requirements 2.0&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Monetization Pivot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Around the same time, ChatGPT began showing ads to free users. For a tool that has become the "second brain" for millions of developers, the introduction of interruptive advertising was the final straw. &lt;/p&gt;

&lt;p&gt;The result? &lt;/p&gt;

&lt;p&gt;Users began migrating towards Claude AI.&lt;/p&gt;

&lt;p&gt;Anthropic, which had been positioned as the "safer, more academic" alternative, suddenly found itself the &lt;strong&gt;unexpected winner&lt;/strong&gt; of OpenAI’s aggressive monetization experiment.&lt;/p&gt;

&lt;p&gt;SHOCKING!!!!&lt;/p&gt;

&lt;p&gt;Tell me why I'm so loving this. &lt;/p&gt;

&lt;p&gt;It's like watching two cloud providers fight, and somehow &lt;strong&gt;DigitalOcean wins by doing absolutely nothing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Moving on...&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 2: The Developer Ecosystem and the "Open" Fallacy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Peter Steinberger/OpenClaw incident&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The developer community, which has always been the backbone of AI adoption, faced its own set of challenges. Anthropic, in a move that can only be described as a PR nightmare, sent a cease-and-desist to Peter Steinberger over the name "ClawdBot." While it was technically a trademark protection move, it felt like a betrayal to the devs who had been Anthropic’s biggest evangelists.&lt;/p&gt;

&lt;p&gt;This was followed by Anthropic banning Claude subscription tokens in OpenClaw. In a poetic twist of fate, OpenClaw officially switched to OpenAI models, and Steinberger, the very developer Anthropic had alienated, joined OpenAI to build agents for the competition. &lt;/p&gt;

&lt;p&gt;At this point, the story started feeling less like a tech news article and more like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Season 3 of Silicon Valley: AI Edition."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You alienate a developer, and the developer joins your competitor.&lt;/p&gt;

&lt;p&gt;You can't script that better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Lesson for DevOps Leaders: Anti-Patterns in AI Platforms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the "Golden Path" in reverse. When you make it difficult for developers to build on your platform, whether through aggressive legal action or sudden API restrictions, they will find the path of least resistance. &lt;/p&gt;

&lt;p&gt;In the DevOps industry, we know that Developer Experience (DevEx) is the nervous system of productivity. When DevEx breaks, adoption quietly walks out the door and sometimes takes half your ecosystem with it.&lt;/p&gt;

&lt;p&gt;Anthropic's recent moves are a classic &lt;strong&gt;anti-pattern&lt;/strong&gt;. Instead of building a well-lit road for developers to follow, they've erected toll booths and legal barriers.&lt;/p&gt;

&lt;p&gt;And developers have a very predictable response to that.&lt;/p&gt;

&lt;p&gt;They just leave.&lt;/p&gt;

&lt;p&gt;If your legal department is interacting with developers more than your DevRel team, something has probably gone very wrong.&lt;/p&gt;

&lt;p&gt;In the talent wars of 2026, your legal department shouldn't be your most active developer relations team.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 3: Ethics vs. Expansion: The Battle for the Pentagon
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Great Divergence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Perhaps the most significant event of February 2026 was the divergence in how the two giants approached government contracts. Anthropic made headlines by refusing Pentagon demands for mass surveillance and autonomous weapons integration.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Well... that escalated quickly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This principled stand, however, came at a cost: the Trump administration subsequently banned every federal agency from using Anthropic, labeling them &lt;em&gt;"left-wing nut jobs."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At that moment, I realized something interesting about AI infrastructure in 2026:&lt;/p&gt;

&lt;p&gt;Apparently, model selection is now also a geopolitical decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The OpenAI Pivot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The very same night, OpenAI signed a massive deal for the Pentagon's classified network. Sam Altman's subsequent post about &lt;em&gt;"deep respect for safely"&lt;/em&gt; rang hollow for many, especially as the company quietly dropped the word &lt;strong&gt;"safely"&lt;/strong&gt; from its own mission statement.&lt;/p&gt;

&lt;p&gt;When companies start editing mission statements quietly, engineers start reading commit history like detectives.&lt;/p&gt;

&lt;p&gt;This move has profound implications for the software engineering industry.&lt;/p&gt;

&lt;p&gt;We can now see the emergence of two distinct AI ecosystems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The State-Aligned AI&lt;/strong&gt;: High-scale, government-funded, and deeply integrated into the military-industrial complex.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Independent AI&lt;/strong&gt;: Focused on research, safety, and potentially limited by political gatekeeping.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we might be choosing between &lt;strong&gt;AI political blocs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now for the main event (Drumrolls please 😂)&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 4: The Economic Reality: The "Week the AI Replaced Us"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Block Shockwave: 4,000 Lives for AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jack Dorsey's Block (formerly Square) announced a staggering layoff of &lt;strong&gt;4,000 employees, nearly 40% of its workforce&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The reason?&lt;/p&gt;

&lt;p&gt;A direct pivot to AI-driven operations.&lt;/p&gt;

&lt;p&gt;Dorsey's blunt assessment that "most companies are late" sent a chill through the industry.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Well... that's one way to accelerate your AI adoption roadmap.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This isn't just a corporate restructuring; it's a &lt;strong&gt;human displacement spiral&lt;/strong&gt;. For the first time, a major fintech player has publicly traded half its headcount for automated agents.&lt;/p&gt;

&lt;p&gt;In the DevOps world, we've always automated to empower engineers; we are now entering an era where automation is being used to replace them.&lt;/p&gt;

&lt;p&gt;And that's a very uncomfortable shift.&lt;/p&gt;

&lt;p&gt;For years, we said:&lt;br&gt;
"Automation removes toil."&lt;/p&gt;

&lt;p&gt;Now the uncomfortable question appearing in boardrooms is, "What if automation removes the job?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Anthropic "Displacement" Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adding fuel to the fire, Anthropic released a landmark research report mapping out what some are calling the &lt;strong&gt;"Great Recession for White-Collar Workers."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The findings were sobering.&lt;/p&gt;

&lt;p&gt;While mass layoffs hadn't fully materialized across the board yet, the youngest workers in high-exposure fields (like junior developers and QA engineers) are already being squeezed out of the hiring market. &lt;/p&gt;

&lt;p&gt;Every generation of engineers is told, "Learn this new technology or get left behind," but this time I hear, "Learn how to work with AI... or compete against it."&lt;/p&gt;

&lt;p&gt;And that is a very different ballgame entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 5: The Impact on the DevOps Industry and Tech as a whole
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Shift from Model Loyalty to Model Agnosticism&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In DevOps, we prioritize resilience and portability. The events of February 2026 have forced us to apply these same principles to our AI integrations. We are moving from a world of "ChatGPT-first" to a world of "Model-Agnostic Infrastructure"&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;The "Loyalty" Era (Pre-Feb 2026)&lt;/th&gt;
&lt;th&gt;The "Agnostic" Era (Post-Feb 2026)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vendor Strategy&lt;/td&gt;
&lt;td&gt;Single-model dependency (mostly OpenAI)&lt;/td&gt;
&lt;td&gt;Multi-model orchestration (Claude, GPT, Llama)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;Hard-coded API calls&lt;/td&gt;
&lt;td&gt;Abstracted "AI Gateway" layers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk Management&lt;/td&gt;
&lt;td&gt;Performance-based metrics&lt;/td&gt;
&lt;td&gt;Ethics-based, political, and labor risk assessments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workforce&lt;/td&gt;
&lt;td&gt;Scaling via headcount&lt;/td&gt;
&lt;td&gt;Scaling via Agentic Orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer Sentiment&lt;/td&gt;
&lt;td&gt;Evangelism for specific brands&lt;/td&gt;
&lt;td&gt;Pragmatic, survival-first approach&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The "Safely" Omission and the Trust Deficit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The removal of "safely" from OpenAI's mission statement is more than just a linguistic change; it's a signal to every &lt;strong&gt;Site Reliability Engineer (SRE)&lt;/strong&gt; and DevOps lead that the guardrails are being loosened in favor of rapid deployment. &lt;/p&gt;

&lt;p&gt;In production, we treat "safety" as a non-functional requirement that is as critical as latency or uptime. If the provider is deprioritizing it, we must &lt;strong&gt;Shift Left&lt;/strong&gt; our AI validation. We can no longer treat LLM outputs as trusted data; they must be treated as untrusted user input that requires rigorous automated testing and observability.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: The Toxic Situationship
&lt;/h2&gt;

&lt;p&gt;As we look at the fallout of February 2026, the conclusion is clear: we are all in a toxic situationship with every AI company. The #CancelChatGPT trend proved that users will rotate back to Claude the moment OpenAI crosses a line, only to return to GPT when Anthropic makes a misstep.&lt;/p&gt;

&lt;p&gt;In the DevOps and software engineering industry, this means we must architect for &lt;strong&gt;model agnosticism.&lt;/strong&gt; Just as we don't tie our entire infrastructure to a single cloud provider without a multi-cloud strategy, we can no longer afford to tie our intelligence layer to a single provider.&lt;/p&gt;

&lt;p&gt;The future of tech isn't about loyalty; it's about resilience. It's about building systems that can swap models as easily as we swap containers. Because in this landscape, the only thing you can count on is that the company you trust today will likely be the one you're trying to quit by next Tuesday.&lt;/p&gt;




&lt;p&gt;How is your team handling the shift toward model agnosticism in your CI/CD pipelines? Are you building "AI gateways" yet?, or still hard-coding your API calls?&lt;/p&gt;

&lt;p&gt;Let's discuss in the comments!&lt;/p&gt;

&lt;p&gt;Let's keep making it REAL&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stay tuned for more adventures 😊!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/faithomobude/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://www.github.com/CloudFay" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.x.com/faybyndthecloud" rel="noopener noreferrer"&gt;X&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ai</category>
      <category>sre</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>GitHub Copilot CLI Challenge: I Built an AI Mentor in My Terminal</title>
      <dc:creator>Faith Omobude</dc:creator>
      <pubDate>Sun, 15 Feb 2026 17:02:49 +0000</pubDate>
      <link>https://dev.to/faithomobude/github-copilot-cli-challenge-i-built-an-ai-mentor-in-my-terminal-9g7</link>
      <guid>https://dev.to/faithomobude/github-copilot-cli-challenge-i-built-an-ai-mentor-in-my-terminal-9g7</guid>
      <description>&lt;p&gt;**&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I didn't build clioraOps because I wanted another CLI tool. &lt;/p&gt;

&lt;p&gt;I built it because I was tired of pretending I fully understood what I was running in my terminal.&lt;/p&gt;

&lt;p&gt;A year ago, when I started my cloud/DevOps journey, I noticed a pattern in how I was learning. I would search for a command, copy it, run it, and move on once it worked. The problem was that execution became faster, but understanding didn't always follow.&lt;/p&gt;

&lt;p&gt;If something broke later, I had to start over. &lt;/p&gt;

&lt;p&gt;And in DevOps, that's dangerous.&lt;/p&gt;

&lt;p&gt;Infrastructure mistakes aren't always obvious. A single command can delete data, expose services, or break prodution systems. I realized that many learners including myself, were optimizing for speed instead of comprehension.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;clioraOps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;clioraOps is an AI-powered DevOps learning companion that lives inside the terminal. Instead of just giving answers, it focuses on helping developers understand what they are doing before they execute it.&lt;/p&gt;

&lt;p&gt;The goal isn't automation&lt;/p&gt;

&lt;p&gt;The goal is confidence through understanding.&lt;/p&gt;

&lt;p&gt;clioraOps helps users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Understand deeply through contextual explanations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learn safely by reviewing commands before execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visualize system architectures directly in the terminal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate production-ready configurations using best practices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debug errors with guided reasoning instead of guesswork&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://www.github.com/CloudFay/clioraOps" rel="noopener noreferrer"&gt;https://www.github.com/CloudFay/clioraOps&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fx81fsi26lh576o1vm9g9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx81fsi26lh576o1vm9g9.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Interactions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Asking conceptual questions in natural language &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Safely testing risky commands before execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generating production-ready Docker or CI/CD configurations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visualizing architectures like microservices or pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging infrastructure errors step-by-step&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The experience is conversational but structured around learning rather than shortcuts. &lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot CLI played a major role in how this project evolved.&lt;/p&gt;

&lt;p&gt;Initially, I approached it as a productivity tool — something that could help generate commands faster. But during development, it became more than that. It became a thinking partner inside the terminal.&lt;/p&gt;

&lt;p&gt;The biggest challenge wasn’t writing code. It was understanding how to structure interactions between Python workflows and an AI-driven CLI environment.&lt;/p&gt;

&lt;p&gt;Some challenges I faced included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version and command format changes during development&lt;/li&gt;
&lt;li&gt;Handling subprocess interactions cleanly&lt;/li&gt;
&lt;li&gt;Designing prompts that encouraged explanation instead of shortcuts&lt;/li&gt;
&lt;li&gt;Debugging environment and installation issues across systems&lt;/li&gt;
&lt;li&gt;Balancing flexibility with safety in command execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were moments where things broke repeatedly especially around CLI integrations and environment setup but those moments forced me to understand the tooling at a deeper level.&lt;/p&gt;

&lt;p&gt;The biggest realization was this:&lt;/p&gt;

&lt;p&gt;Copilot CLI is most powerful when used as a collaborator, not just an autocomplete tool.&lt;/p&gt;

&lt;p&gt;It helped accelerate experimentation while still allowing me to stay in control of architecture and decision-making.&lt;/p&gt;

&lt;p&gt;For someone building DevOps tools, that balance matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges Faced
&lt;/h2&gt;

&lt;p&gt;Building ClioraOps came with several practical challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing an MVP without overcomplicating the architecture&lt;/li&gt;
&lt;li&gt;Ensuring safety checks didn’t slow down interaction&lt;/li&gt;
&lt;li&gt;Making AI explanations useful for both beginners and advanced users&lt;/li&gt;
&lt;li&gt;Supporting both cloud AI (Gemini) and local models (Ollama)&lt;/li&gt;
&lt;li&gt;Structuring the project so it remains extensible as features grow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the hardest parts was resisting the urge to add more features early. Keeping the MVP focused on learning, safety, and clarity made the tool stronger.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Project Means to Me
&lt;/h2&gt;

&lt;p&gt;ClioraOps represents my transition from simply learning tools to building tools that help others learn better.&lt;/p&gt;

&lt;p&gt;DevOps can feel overwhelming at the beginning. There are too many tools, too many commands, and too many ways to break things.&lt;/p&gt;

&lt;p&gt;I wanted to build something that reduces fear without removing responsibility.&lt;/p&gt;

&lt;p&gt;Something that teaches before it executes.&lt;/p&gt;

&lt;p&gt;And something that grows with the developer using it.&lt;/p&gt;

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

&lt;p&gt;AI is changing how we build software.&lt;/p&gt;

&lt;p&gt;But understanding still matters.&lt;/p&gt;

&lt;p&gt;clioraOps is my attempt to make sure speed doesn’t replace learning, especially in infrastructure and DevOps, where understanding is the difference between automation and reliability.&lt;/p&gt;

&lt;p&gt;If you’re learning DevOps or building in the terminal every day, I’d love your feedback.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Hey Dev.to 👋</title>
      <dc:creator>Faith Omobude</dc:creator>
      <pubDate>Tue, 20 Jan 2026 11:47:26 +0000</pubDate>
      <link>https://dev.to/faithomobude/hey-devto-1dna</link>
      <guid>https://dev.to/faithomobude/hey-devto-1dna</guid>
      <description>&lt;p&gt;Hey Dev.to Community 👋&lt;/p&gt;

&lt;p&gt;My name is &lt;strong&gt;Faith Omobude&lt;/strong&gt;, an aspiring Cloud/DevOps Engineer with a passion for building robust, scalable infrastructure solutions.&lt;/p&gt;

&lt;p&gt;A bit about myself: I'm a Chemistry graduate with a background in Content writing and Digital marketing. Before I began my journey in Cloud, I worked as a &lt;em&gt;social media manager&lt;/em&gt; at &lt;a href="//www.cubithost.com"&gt;Cubithost&lt;/a&gt;. While researching and creating tech-related content, I kept coming across topics related to cloud computing. &lt;/p&gt;

&lt;p&gt;Initially, it was simply curiosity.&lt;/p&gt;

&lt;p&gt;I wanted to understand how modern applications scale and get deployed so smoothly across the world. How do apps stay available? How does everything "just work" behind the scenes?&lt;/p&gt;

&lt;p&gt;That curiosity slowly turned into a hands-on journey of learning and building with cloud technologies, and that's how my Cloud and DevOps journey really began. &lt;/p&gt;




&lt;blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Why I created this Blog?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I created this account to document my journey in DevOps and Cloud, and more importantly, to break down complex concepts in a way beginners (like me) can understand.&lt;/p&gt;

&lt;p&gt;Because let's be honest, DevOps can feel overwhelming. There are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too many tools, &lt;/li&gt;
&lt;li&gt;Too much hype and &lt;/li&gt;
&lt;li&gt;Too many tutorials that assume you already "get it". &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not here to pretend I know everything. &lt;br&gt;
I'm here to learn in public, share what I  build, explain what I understand, and be honest about what I don't.&lt;/p&gt;

&lt;p&gt;Writing helps me clearly, and if it helps someone else along the way, that's a win.&lt;/p&gt;




&lt;blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What You Can Expect From this Blog&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll be writing about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 Beginner-friendly explanations of Cloud, DevOps, and related concepts&lt;/li&gt;
&lt;li&gt;🔨 Projects I'm working on, including what breaks and what I learn&lt;/li&gt;
&lt;li&gt;💡 Mental models, not just commands and configurations&lt;/li&gt;
&lt;li&gt;🔥 Honest opinions on tools, trends, and industry hype&lt;/li&gt;
&lt;li&gt;📈 Career and learning insights for people just starting out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make confusing things feel approachable.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Who This is For&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This blog is mainly for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Beginner learning Cloud or DevOps &lt;/li&gt;
&lt;li&gt;Developers transitioning into DevOps&lt;/li&gt;
&lt;li&gt;Anyone tired of overcomplicated explanations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that sounds like you, welcome 🤗 &lt;/p&gt;




&lt;p&gt;If you ever disagree with something I write, or have a better way of thinking about it, I'd love to hear from you. Learning is better when it's shared.&lt;/p&gt;

&lt;p&gt;Looking forward to connecting and collaborating with you. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;CloudFay out 😎&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>beginners</category>
      <category>learninginpublic</category>
    </item>
  </channel>
</rss>
