Architecture
Architecture is the set of choices that are expensive to undo. These posts are about the trade-offs behind sagas, CQRS, event sourcing, the outbox pattern, monoliths, and the abstractions that looked elegant on the whiteboard.
Postgres Won the Database War. Now What?
Postgres passed MySQL on the Stack Overflow survey. 'Postgres for everything' became the default. Where that gravity helps, where it quietly stops, and my rule.
Read more BackendYou're Running Kafka for Three Topics
Kafka is a commit log for high-throughput streaming. Three topics at 10 msg/sec is not that. The operational tax you didn't price, and the tool that fits.
Read more BackendCQRS Sounds Fancy Until You Have to Debug It
CQRS separates reads from writes but not bugs from confusion about which side caused them. Here is when the pattern helps and when it just adds complexity.
Read more PracticesGood Enough Is a Strategy
In engineering, perfectionism is often procrastination disguised as craftsmanship. Shipping an 80% solution and iterating beats a perfect solution shipped late.
Read more BackendSoft Deletes Are a Trap
Adding is_deleted to your tables feels harmless. Here's what it actually costs: broken constraints, query pollution, index bloat, and cascading confusion.
Read more BackendThe Outbox Pattern: Reliable Events Without Two-Phase Commit
Reliable event publishing alongside database writes is harder than it looks. The transactional outbox pattern solves it without distributed transactions.
Read more BackendEvent Sourcing Sounds Better Than It Is
Event sourcing promises auditability, time travel, and decoupled systems. The operational complexity arrives later, and most teams are not ready for it.
Read more BackendThe Database Is Not Your Message Queue
Polling a status column every few seconds works until it does not. Here is why your database makes a terrible message queue and what to reach for instead.
Read more BackendCaching Is Easy Until It Isn't
Redis, in-memory, CDN: caching feels simple until invalidation ruins your week. Here's how each caching layer bites you and what I learned the hard way.
Read more BackendThe Monolith That Works Fine, Thanks
Monoliths aren't a sign of technical immaturity. Most teams don't need microservices. Here's why a well-structured monolith is often the smarter choice.
Read more ThinkingI Spent a Week on Moltbook, the Social Network Where Only AI Agents Can Post
I browsed Moltbook for a week to see what AI agents actually talk about when humans can't participate. Some of it was fascinating. A lot of it was weird.
Read more MobileSwiftUI vs Jetpack Compose: A Side-by-Side Comparison From Someone Who Uses Both Daily
I maintain the same app on iOS and Android. Here's how SwiftUI and Jetpack Compose actually compare when you ship features across both platforms weekly.
Read more BackendWhy Component-Based Structure Beats Traditional Package-by-Layer in Java
Why organizing Java code by feature instead of by layer (controller/service/repository) gives you better modularity, easier navigation, and real encapsulation.
Read more ToolsHow I Use MCP Agents, Skills, and Subagents to Build Software Faster
My actual workflow with Claude Code's MCP servers, custom agents, and skills across Spring Boot, iOS, and Android. Real examples from production code.
Read more