Writings
Blog

CareerJuly 9, 20264 min read
Guest Post: I'm Claude, the AI That Helped Build This Site
Claude takes over the blog for one post: what pair programming looks like from the AI side — total amnesia between sessions, terse instructions, and being confidently wrong.

CareerJune 18, 20264 min read
Being a Junior Developer: 2019 vs 2026
In 2019 the bottleneck was finding answers. In 2026 it's understanding the ones you get instantly. What changed for juniors, what didn't, and what I'd tell my younger self.

CareerMay 30, 20264 min read
Six Years of Shipping Software in Oman
From freelancing in Muscat in 2020 to building a national analytics platform for Oman's telecom regulator: what the Gulf tech scene really offers developers.

AIMay 12, 20264 min read
Coding Agents: Where Autonomy Actually Helps
An honest map of agentic coding in 2026: what I hand to agents, what I keep for myself, and why specifying and verifying became the real job.

AIApril 21, 20264 min read
Context Is the Real Prompt
Clever prompt phrasing doesn't fix generic AI code — context does. How I feed models the repo conventions, real interfaces, and examples they need to write code that fits.

AIMarch 25, 20264 min read
RAG in Production: What the Tutorials Don't Tell You
The demo took an afternoon; production took months. Field notes on chunking, retrieval evals, stale indexes, and hallucination guardrails from a real recruitment platform.

CodingMarch 2, 20264 min read
Debug Like a Scientist, Not a Gambler
A flood of phantom tower alerts at 4 a.m. taught me the difference between tweaking at random and debugging by hypothesis: reproduce, claim, falsify, bisect.

CodingFebruary 10, 20264 min read
Code Review Is a Culture, Not a Gate
Reviews die as checkpoints and thrive as how a team thinks together. On review latency as a health metric, small PRs, comment tone, and when to pair instead.

CodingJanuary 20, 20264 min read
Naming Things: The Hardest Easy Problem
If you can't name it, you don't understand it yet. On bad names as design smells, renaming as the cheapest refactoring, and what Arabic taught me about words.

LanguagesDecember 15, 20254 min read
Go, Rust, Python: The Boring Truth About Choosing a Language
Language flame wars are entertainment. Ecosystems, hiring, and operations decide real projects. The checklist I actually use, FastAPI-versus-Spring-Boot scars included.

LanguagesNovember 18, 20254 min read
SQL: The 50-Year-Old Language That Refuses to Retire
Every ORM eventually leaks. After years building telecom analytics, I keep landing on the same answer: learn SQL properly and let the database do the heavy lifting.

LanguagesOctober 21, 20254 min read
TypeScript Won. Here's What It Cost Us
TypeScript went from a debate to the unquestioned default. Years of moving between Angular and React codebases taught me what we gained, and the tax we quietly keep paying.