{"id":1762,"date":"2026-02-06T14:52:43","date_gmt":"2026-02-06T22:52:43","guid":{"rendered":"http:\/\/blog.nillsf.com\/?p=1762"},"modified":"2026-02-06T14:52:45","modified_gmt":"2026-02-06T22:52:45","slug":"3-lessons-learned-in-a-week-of-vibe-coding","status":"publish","type":"post","link":"https:\/\/nillsf.com\/index.php\/2026\/02\/06\/3-lessons-learned-in-a-week-of-vibe-coding\/","title":{"rendered":"3 lessons learned in a week of vibe coding"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I spent the last week playing around with GitHub Copilot and\nvibe coding a couple of apps and tools. While I\u2019ve been using GitHub Copilot\nfor hobby projects since 2023, I\u2019m not writing code in my day job anymore. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It was great to see how far the tools have come. I\u2019ve used the\nearly versions of agent mode, and I\u2019ve been going back every now and then to\ntest some things; but this week I invested a bit more time in vibe coding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And it\u2019s been amazing. Let me share 3 lessons learned:<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Your SDLC process matters a lot<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">I accidentally broke my production website, and was lucky to\nhave systems in place to quickly roll back. Let me explain:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At one point this past week, I had three different versions\nof my running-blog sitting in different PRs on GitHub. Each made changes to\ndifferent tools I\u2019d been developing. When I initially created my running blog,\nI had never thought about having more than 1 PR, just for the blog post I was\nworking on then.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, that changed this week, and I had an instance where\nI made a configuration mistake on one branch, accidentally pushed that to the\nproduction website and the website was no longer functional. Lucky for me, I\nhad automation setup with GitHub Actions to do a rollback to a working site and\ndidn\u2019t have to do crazy stuff to get it working again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My point in telling this story is that the way your entire software\ndevelopment lifecycle process is set up matters a lot. These agents can create\nmassive amounts of code. That code needs to be reviewed (vibe coded code might\nnot need to be reviewed; but if you plan on working on a production enterprise system,\nI think it still needs to), it needs to be tested, and ideally be put in\nproduction in a safe way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have systems already set up for testing and\nautomation, you\u2019ll be able to benefit more from the agentic code wave than if\nyou don\u2019t have these set up. Software development is not just about writing code;\nit\u2019s about integrating it into a larger system in a safe and repeatable way.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">The tools have improved a lot<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A combination of LLM improvements (codex 5.2 and opus 4.5 in\nparticular) have made the outcome of the agents drastically better. I\u2019ve been\nplaying around with some ideas for a year, and I felt like these LLMs were the\nfirst ones that really got where I was going; and were able to build what I\nneeded them to build. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But we\u2019ve not just seen improvements in LLMs, we\u2019ve also seen\nimprovements in how the tools themselves have evolved. This past week I\u2019ve\nused:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>GitHub Copilot agent mode in Visual Studio Code.\nThe tried-and-true agentic developer.<\/li><li>GitHub Copilot CLI. Gamechanger! It\u2019s so fun to\ndo vibe coding in the terminal. I think I spent 70% of my past week in the CLI\nmaking changes to my apps.<\/li><li>Claude, Codex and Copilot in github.com as\nbackground agents. Super useful, primarily for small background tasks.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you haven\u2019t yet tried out developing in a CLI (either\nGitHub Copilot, claude code or Codex) I recommend you try it out. It\u2019s a very\nrefreshing interface that has a couple of benefits. First, you can have multiple\nCLIs open in parallel working on different branches. Second, it focuses your\nthoughts on the conversation and the spec, less on files and lines of code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Having said that, I believe we\u2019re not going to end up in a\nworld where all development will be done in a CLI. I think the right combination\nof IDE, CLI and background agents is going to be where we end up. Each of those\ntools has a sweet spot use case, and I believe all three will remain relevant.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>IDEs will remain the place where precise work on\ncode will happen. They remain where you work with the agent to change code,\nmake your own changes, and run\/test\/debug your code.<\/li><li>CLIs will be where you can start coding. They\ncan be the fast iterative development cycle. Very lightweight, highly parallel experimentation.<\/li><li>Background agents will be used heavily for async\nbackground tasks. I\u2019ve mainly used them now for small use cases, but I can see\nthem potentially do larger routine tasks as well, like for instance upgrading\nframeworks.<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Instructions matter<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019m not an expert yet, but I have noticed that instructions matter\na lot for the AI agents. Instructions can be about the project and best\npractices; but they can also give the agents nudges on how to be more useful. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One such nudge is something I borrowed after listening to the <a href=\"https:\/\/newsletter.pragmaticengineer.com\/p\/the-creator-of-clawd-i-ship-code\">OpenClaw founder interview on pragmatic engineer<\/a>. He mentioned giving his agents the instruction to take a screenshot of the UI after making UI changes. That\u2019s a brilliant use case for a custom instruction, and something I\u2019ve used in my agents this week.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ideally, I think I would have instructed them to use a UI\nframework like Playwright, and maybe that\u2019s what I\u2019ll test next week. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Back to custom instructions: There are a few ways to give\nthem:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Custom-instruction files: These can either be custom-instructions.md or agents.md (interchangeable). You can define these custom instructions either on a user level, repo level or at an org level; or at multiple levels at the same time. Important to know is these apply to all tasks an agent would execute by default, unless you specify in the instructions files that they only apply to <a href=\"https:\/\/docs.github.com\/en\/enterprise-cloud@latest\/Copilot\/tutorials\/coding-agent\/get-the-best-results#path-specific-instructions\">certain paths<\/a>. <\/li><li>Prompt files: Prompt files define reusable prompts for certain tasks that you, or members of your team, would execute multiple times. Prompt files are mainly task focused. Think about providing a prompt to an agent to create unit tests with specific details about your environment. This wouldn\u2019t go in your custom instructions, because those would apply to all the code generation.<\/li><li>Custom agents: Custom agents apply to an entire session of GitHub Copilot agent mode. They would change the behavior of the chat to have the agent take on a certain persona; like the persona of a tester. You can then iterate with that custom agent.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">While I admit I\u2019m not an expert when it comes to all these config\nfiles, it was clear to me that by even providing some automatically generated\ninstructions, the agents worked way better than they did out of the box.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Agentic coding is having a huge impact on the software\nindustry right now. While my lessons learned this week were 100% in the vibe-coding\ncamp, I do hope you took away:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>You need a mature SDLC process to get the most\nbenefits out of agentic coding.<\/li><li>The interface (IDE\/CLI\/background) matters, and\nwhy all three will remain relevant.<\/li><li>You need to learn how to build guardrails around\nthe agents to have them work best for you.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">AI is getting good at writing functioning code, we now need\nto learn how to integrate that into engineering processes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I spent the last week playing around with GitHub Copilot and vibe coding a couple of apps and tools. While I\u2019ve been using GitHub Copilot for hobby projects since 2023, I\u2019m not writing code in my day job anymore. It was great to see how far the tools have come. I\u2019ve used the early versions [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1763,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[193,31],"tags":[45,194,53],"class_list":["post-1762","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artificial-intelligence","category-software-development","tag-ai","tag-copilot","tag-github"],"jetpack_featured_media_url":"https:\/\/nillsfblog.blob.core.windows.net\/media\/2026\/02\/vibecoding.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/posts\/1762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/comments?post=1762"}],"version-history":[{"count":1,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/posts\/1762\/revisions"}],"predecessor-version":[{"id":1764,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/posts\/1762\/revisions\/1764"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/media\/1763"}],"wp:attachment":[{"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/media?parent=1762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/categories?post=1762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nillsf.com\/index.php\/wp-json\/wp\/v2\/tags?post=1762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}