Writing

Engineering Notes.

I like to talk about systems—how to build them in the right way for your needs. There isn’t a one-size-fits-all design; the best solutions are shaped by constraints, scale, and what you actually need to optimize.

Choosing a shard key: user, tenant, region, or time?

DatabasesDistributed SystemsScalability

Shard on the unit most requests already own. Hash to spread load inside that unit; layer region or time when residency, lifecycle, or skew demand it—never pick a key because it fit a slide.

·6 min read

Choosing SQL, NoSQL, and search engines (without bingo cards)

DatabasesDistributed SystemsSystem Design

Start from invariants and access patterns: relational SQL for systems of record, NewSQL when scale meets SQL semantics, NoSQL when the workload is partition-shaped, and search as a rebuildable projection—never the ledger.

·5 min read

OLTP vs OLAP data modeling: two jobs, two shapes

DatabasesData EngineeringStorage

Transactional systems keep the product correct and fast at the row. Warehouses explain the business across huge scans. Mixing the two jobs in one head—or one undifferentiated schema—hurts both.

·4 min read

Idempotency for write APIs: surviving retries without duplicate harm

ReliabilityDistributed SystemsAPI Design

Treat duplicate delivery as normal: idempotency keys for money paths, resource-oriented verbs where they fit, and idempotent consumers when messages are at-least-once.

·5 min read

API versioning and evolution: change without breaking clients

API DesignDistributed SystemsScalability

Prefer additive contracts and tolerant parsers. When you must break, version explicitly, expand-then-contract, and run deprecations like a product launch—not a surprise outage.

·4 min read

Protecting downstream services from traffic spikes

ReliabilityScalabilityLoad Balancing

Rate limits, circuit breakers, load shedding, and bulkheads are how you keep a partner’s bad day from becoming your outage—without pretending dependencies are infinite.

·5 min read

Backpressure in high-traffic systems: fail fast, do not hang

ReliabilityScalabilityDistributed Systems

When load spikes, the winning move is to slow the right things deliberately—pull models, bounded queues, shedding, worker caps, outbound isolation, and clients that back off—instead of letting memory and threads die together.

·5 min read

Queue vs direct RPC: when to use which

Distributed SystemsMessage QueuesArchitecture

RPC is for answers you need right now. Queues buffer load, decouple producers from consumers, and carry retries—when eventual processing is the real requirement.

·5 min read

Synchronous vs asynchronous communication: how to choose

Distributed SystemsMessage QueuesArchitecture

Request–response keeps things simple when the caller must wait. Queues and events buy decoupling and resilience when work can happen later—at the cost of operational complexity.

·5 min read

How a request actually moves through a production system

Distributed SystemsNetworkingBackend

A grounded tour from DNS and the edge through services, data, async work, and back to the browser—with observability and failure modes you can recognize in the wild.

·8 min read

Design for 10× traffic (without rewriting everything)

ScalabilityDistributed SystemsCaching

Statelessness, caching, async paths, backpressure, and runtime knobs — the boring patterns that usually carry you through a 10× spike.

·5 min read

Vertical vs horizontal scaling: trade-offs that actually matter

ScalabilityDistributed SystemsFundamentals

Scale up is fast and simple, scale out is resilient and elastic. The right choice depends on growth shape, failure tolerance, and team maturity.

·4 min read

When should you split a monolith into services?

Distributed SystemsScalabilityArchitecture

A practical take on when a monolith stops being the right shape—told through merge queues, metrics, and one team that split for the wrong reason.

·6 min read

Building Scalable Backend Systems

system designbackendarchitecture

A comprehensive guide to designing systems that can grow with your business needs.

·2 min read

Understanding Distributed Transactions

distributed systemstransactionsconsistency

Deep dive into distributed transactions, trade-offs, and practical patterns.

·2 min read

Database Indexing Strategies

databasesperformanceindexing

Learn how to design indexes that dramatically improve query performance without bloating storage.

·3 min read