Blog archive
214 of 214 articles

Architecting an Open-Source Search Engine: From Algolia Internals to Vector Similarity and Qdrant
High-performance discovery platforms demand sub-50ms query latency, search-as-you-type prefix matching, real-time data synchronization, and semantic vector retrieval. Commercial SaaS solutions like Algolia have long dom…
How an AI Prompt Turned a Complex Multi-Database ETL Project Into Hours of Work
In large organizations, data rarely lives in one place. Some information is stored in Oracle databases, while other datasets live in PostgreSQL.

When Your Domain Talks to Stripe, A DDD Cautionary Tale
A real-world dissection of a circular dependency in a billing module, and how Domain-Driven Design gives you the vocabulary — and the tools…

How I Use AI to Build Production-Ready GraphQL Resources Faster
A practical workflow with Go, PostgreSQL, sqlc, gqlgen, and architecture-aware prompting

Authentication & Authorization: RBAC, ReBAC, ABAC, and PBAC Explained
From “who are you?” to “what can you do?” — a complete guide to modern access control models, with real examples using CASL, Keycloak, and…
Git Reset: Recovering From Unstable AI Code Contributions
The rise of AI-powered development and "vibe coding" has dramatically changed how we build software. Today, tools like GitHub Copilot, ChatGPT, Claude, Cursor, and other AI assistants can generate features, fix bugs, an…

Keycloak + OpenFGA: A Practical Integration Guide
Overview
Deploying a Lovable (TanStack Start) App with GitHub Actions — the Real Story
Deploying a Lovable (TanStack Start) App with GitHub Actions — the Real Story Lovable is a great way to scaffold a TanStack Start app fast. But the moment you want to ship it yourself — on your own domain, through your…

How Domain Boundary Violations Slowly Destroy Your Codebase
Have you ever opened a “service” file and seen it reach deep into three or four other domains? Ever had to add a workaround like…
The Entity You Modeled Isn't the Entity That Persists
A recurring architectural mistake — and the state machine pattern that fixes it. A pattern you've probably seen before There's a particular kind of mess that shows up in almost every system that models a multi-stage bus…
One Door, Two Mechanisms: When Your Domain Model Quietly Forks Itself
I want to talk about a bug that, on the surface, looked trivial. An endpoint was missing.
Understanding Server-Sent Events (SSE): Architecture, Authentication, and Testing in NestJS
Introduction Modern web applications often need real-time communication. Examples include: Notifications Chat applications Live dashboards Stock prices Progress tracking Monitoring systems Most developers immediately th…
When Medium's Bots Fear Your Writing: Why I'm Leaving After 6 Years and 200 Articles
Six years. Two hundred articles. Technical writing about software architecture, data pipelines, and the tools I work with every day.

What Happens When You Hire a Junior Who Vibe Codes as a Senior Engineer
On the difference between generating solutions and understanding problems

Rebuilding the Time Machine: Designing a Dual-Purpose Data Versioning System for Modern Backends…
In traditional software engineering, databases are treated as state machines. When a user updates their profile, a transaction executes an…

The New Generation of E2E Test Automation: Capturing Traffic and Bypassing Auth with Postman and…
End-to-End (E2E) testing ensures that your systems work cohesively, from the user interface down to the backend database. However, as…

Serving an Offline GraphQL Playground in Go: Avoiding the Gin Static File Pitfalls
When building a GraphQL API in Go using gqlgen and Gin, the built-in playground.Handler is the standard way to serve the GraphiQL UI. Out…

Tunneling TCP Connections Over SSH Using socat and nc
The Problem

Real-Time Data Ingestion: Connecting Distributed Kafka to ClickHouse in Docker
Building a high-throughput analytics pipeline requires a database that can ingest millions of rows per second and a message broker that can…

ClickHouse Tiered Storage: Volumes, Storage Policies, and TTL from Scratch to Production
Most ClickHouse deployments start simple: one server, one disk, one table. That works fine until the day you realise you are paying NVMe…