Skip to main content

Working on the M365 Companion apps means shipping features fast and keeping code quality tight — all while requirements change faster than Nairobi weather. Vibe coding has become my on-again, off-again relationship: sometimes it drives me mad, other times it saves my day.

So what’s vibe coding? It’s  coding on feel. You know what you want the feature to do, you’ve got your GitHub Copilot agent, or any AI agent ready to autocomplete your thoughts, and together you just… vibe your way to working code. It’s that flowy mix of intuition, momentum, and mild chaos — where syntax catches up to your brain, not the other way around.

🤯 When AI Starts Overthinking

Sometimes, Copilot gives me code that looks like it’s auditioning for a PhD thesis. Complicated logic. Nested conditions. Imports I’ve never seen before. Half the time, it either breaks something… or breaks me.

I’ve learned that when a change doesn’t follow existing patterns, I stop trusting the vibe and take control. I rewrite it myself — with a bit of side-eye and a “nice try, Copilot.”

And honestly, there are moments I spend more time telling the GitHub Copilot agent what not to do than actually coding. Maybe I’m not the best at prompting… or maybe I just lose patience faster than it can autocomplete.

In these instances I keep things balanced: I write the logic myself — clean, intentional, and on-brand with our codebase — then let the agent handle the small stuff: syntax tweaks, comment polishing, and the occasional missing semicolon. It’s also great at transforming my half-baked pseudo logic into real, working code when I just need to get the idea out before I lose it.

The moral of the story? Sometimes you have to vibe less and code more.

🧩 When It Actually Gets It Right

To be fair, vibe coding isn’t all chaos and confusion — sometimes the Copilot agent really gets it.

It helps me write tests from scratch and even nudges me to follow existing patterns (which is huge when I’m jumping between different modules). That said, I still find myself creating or finding existing mocks manually because Copilot has this recurring habit of reinventing the wheel instead of reusing existing code. Why? No clue. But hey — at least it writes solid tests.

It also documents code beautifully. Sometimes too beautifully. I’ve had to trim down overly poetic explanations that read like technical essays. Still, it helps me understand the flow of components I haven’t touched in months. I’d say it’s a 80-20 effort — 80% me tracing logic the old-fashioned way, 20% the agent filling in the blanks when I’m lost in someone else’s code or my own.

The boilerplate stuff basically takes care of itself now — telemetry, aria labels, state initialisation, all that jazz — which frees me up to focus on the real engineering essentials: reviewing pull requests, sipping my tea, topping up my water, and pretending that mid-stretch means I’m still deep in thought.

These little wins are the sweet spots in my vibe coding diaries — moments where AI feels less like a tool and more like a teammate who occasionally over-explains but still gets the job done.

Over the years, I’ve learned that the secret isn’t in the fancy syntax — it’s in the pause. Taking a step back, saying out loud what I’m trying to achieve, usually to my screen, sometimes to my green-tea mug I’m off coffee, and then diving in to see where and how to make it happen without nuking existing behaviour. That’s growth. Or survival. Maybe both.

At the end of the day, vibe coding isn’t about letting AI take over — it’s about learning how to collaborate with it. Some days we vibe, some days we don’t, but either way, I’m learning to code with a little more curiosity and a lot more grace.

Current reads: AI Engineering, Great Expectations

Wine: Kanonkop Cape Blend