Blog

API Design Is UX
The endpoints you expose are a product. The developer calling them is your user. Bad DX compounds in ways that bad UI never does.


Working Without a Designer
Most solo developers try to design everything themselves. The better move is to make as few design decisions as possible — and let a system make the rest.


Naming Things for AI
Good names have always mattered. With AI coding tools, they matter more. An LLM reads your code the way a new engineer would — inferring intent from names, not from runtime behavior.


The Interface Is the Contract
Implementations are cheap to change. Interfaces are not. The most expensive line of code you'll write isn't in the logic — it's in the type signature.


Errors Are Data
The instinct when something goes wrong is to catch it and move on. That instinct is wrong. Errors are information about what your system is actually doing — and ignoring them is how silent failures happen.


Testing Is a Design Problem
Most developers think they have a testing problem. They have a design problem. Untestable code is a symptom — and the fix is rarely about the tests.


The Async Mindset
Most performance problems aren't about making things faster — they're about doing work at the wrong time. The synchronous default is a cognitive trap, and escaping it is mostly a shift in how you think.


Scope Is the Real Product
The feature backlog is a graveyard of good ideas that would have killed the product. The hardest skill in indie dev isn't building — it's deciding what not to build.


Version Your Decisions
Git tells you what changed. It doesn't tell you why you made the call. That missing context is what turns a reasonable decision into a mystery six months later.


Prompting Is Programming
Most people treat prompting as guessing. It's actually an engineering discipline — with the same feedback loops, debugging techniques, and abstraction principles as any other code.


The Cost of Dependencies
Every package you add is a bet that someone else will maintain it longer than you need it. That bet is worth thinking about before you run npm install.


Real-Time Is Harder Than It Looks
WebSockets look simple until production. WebRTC looks simple until you need it to work everywhere. Here's what building Clover and Argan actually taught me.


How I Think About Database Design
Schema design is the hardest part of building software to change later. The way to get it right is to start with your queries, not your entities.


When to Rewrite, When to Refactor
The rewrite conversation is one of the most emotionally loaded in engineering. Here's how to tell which one you actually need.


The Second Version
The first version gets you in the room. The second version is where the real work starts.


Shipping Is a Skill
The difference between engineers who finish things and those who don't isn't talent or motivation. It's a set of habits you can actually learn.


Claude Code: What It's Actually Like to Use It
I was skeptical about AI coding tools. After months of regular use, I have a more honest take than the hype suggests.


Most Developer Portfolios Are Broken
What hiring managers actually look for, and why most portfolios miss it completely.


IoT Meets Web: What I Learned Moving Between Hardware and Frontend
Working across IoT and web development teaches you things neither world tells you on its own.


MongoDB Without Mongoose
Mongoose is the default choice for MongoDB in Node.js. I stopped using it — here's why the native driver is often the better option.


Building in the Margins
A full-time job, a master's degree, client projects, and two products in production. Here's how that actually works.


Building with InvoiceTronic: Italian E-Invoicing Without the Pain
I built a full accounting system for my sole proprietorship. The hardest part wasn't the accounting logic — it was the SDI. Here's how InvoiceTronic made it manageable.


Why Expo Changed the Way I Build Mobile Apps
I used to dread mobile development. Expo fixed that — here's exactly how.


Barba Studio is Live
After months of building in the margins of everything else, Barba Studio — a booking management app purpose-built for Italian barbershops — is officially launched.


My Go-To Stack: Node.js, React, and React Native
Why I've built every product I've ever shipped on the same four technologies — and why I wouldn't change a thing.


Next.js App Router: What I Actually Use After One Year
A practical take on which App Router features earn their place — and which ones I've learned to skip.
