tech journal

thoughts on infra, vibe coding, OODA

Been playing with building a small meeting coordination tool, and timezones are deceptively tricky. At first glance, you think “just pick a city, compute the offset, done.” But then you realize some Antarctic research stations have null timezones. OSS libraries like tz and cities.json, are incredible foundations of the internet, but it's a either a reminder that basic infrastructure isn't trivial or that both AI-assisted coding tools AND I are just not there yet.

It's the fun/frustration of coding: iterative debugging, edge cases, and trying to turn an idea into something that works for real people. Full-stack frameworks simplify a lot, but the failures encountered show just how complex even seemingly simple features are.

It also makes me nostalgic. 20+ years ago, I spent lots of time fiddling with SFTP, Apache servers, and SQL to get my B2 (now WordPress) installation running. Today, a managed stack can spin up a real-time, persistent app in minutes. With tons of code and files. Code is now disposable, as they say.

I was going to say that it would be nice to focus more on solving interesting problems rather than wrestling with infrastructure basics. However, the problem with that statement is that many foundational problems like city/timezones remain unsolved at some level (e.g. drop in all-in-one libraries). So infrastructure remains important and learning to solve that problem is just as, or even more important than other things.

Vibe Coding and the OODA Loop

One problem with vibe coding is that it subtly distorts the OODA loop. The “observe” phase is partially outsourced to the AI, which can generate large amounts of plausible structure and logic almost instantly. The issue is that human “orientation” does not scale the same way. Properly understanding, internalising, and stress-testing what the AI has produced takes real time and cognitive effort. When output arrives faster than it can be digested, orientation becomes shallow or deferred.

The temptation then is to let the AI continue the next loop: tweak, regenerate, refine. Momentum replaces comprehension. The code appears to improve, but the human’s mental model lags behind the system’s actual behaviour. This creates a growing orientation gap—things work, but feel slightly wrong, and the discomfort only surfaces later as endless small tweaks. The problem is code that one never fully understands and technical debt that keeps accumulating.

This is why vibe coding only works when the outcome is disposable. Once the artefact starts to matter, the skipped orientation step becomes a liability rather than a convenience. Reclaiming it requires slowing down, rereading, and sometimes stopping altogether. In a world of limited attention, the most rational response is often to identify which projects are disposable and which are not, and commit serious planning time only to the latter. Plan, plan, plan.