#architecture
33 posts
- #DistributedDilemmas: all 24 days in one place
In February 2025 I posted one distributed systems dilemma a day on X. I made it to day 24. Here they all are, with the diagrams.
- Day 24 of #DistributedDilemmas: Distributed sessions are a persistent headache
Distributed sessions are a persistent headache. Sticky sessions don't scale, but fully distributed sessions add complexity. Consider JWT or externalized…
- Day 23 of #DistributedDilemmas: Distributed caching layers often become consistency nightmares
Distributed caching layers often become consistency nightmares. As cache invalidation schemes attempt to maintain coherence, real-world implementations…
- Day 22 of #DistributedDilemmas: Distributed background jobs need careful orchestration
Distributed background jobs need careful orchestration. While stateless architectures simplify scaling, they risk duplicate processing like Slack alerts…
- Day 21 of #DistributedDilemmas: Event sourcing isn't a silver bullet for distribution
Event sourcing isn't a silver bullet for distribution. Replay and snapshots become bottlenecks at scale. Design for efficient event storage and retrieval…
- Day 20 of #DistributedDilemmas: Distributed rate limiting is harder than it looks
Distributed rate limiting is harder than it looks. Local rate limits don't prevent global abuse. Global protection requires coordination mechanisms like…
- Day 19 of #DistributedDilemmas: Database migrations in distributed systems require meticulous planning due to their inherent complexity
Database migrations in distributed systems require meticulous planning due to their inherent complexity. Schema changes become distributed coordination…
- Day 18 of #DistributedDilemmas: Microservice authentication is a distributed minefield
Microservice authentication is a distributed minefield. While JWTs excel at decentralized authentication, they introduce authorization complexity due to…
- Day 17 of #DistributedDilemmas: Distributed cron jobs are a coordination nightmare
Distributed cron jobs are a coordination nightmare. Time drift and job duplication plague naive implementations. Consider distributed schedulers or…
- Day 16 of #DistributedDilemmas: Serverless doesn't mean worry-free
Serverless doesn't mean worry-free. Cold starts and hidden state create new classes of distributed problems. While offering auto-scaling and cost…
- Day 15 of #DistributedDilemmas: Distributed logging creates more noise than signal
Distributed logging creates more noise than signal. Modern distributed systems face two critical logging challenges: 1. Data overload from scattered logs…
- Day 14 of #DistributedDilemmas: Service discovery often becomes a SPOT (single point of failure)
Service discovery often becomes a SPOT (single point of failure). Your registry being unavailable shouldn't prevent finding the registry. Design for…
- Day 13 of #DistributedDilemmas: Configuration sprawl is the silent killer of distributed systems
Configuration sprawl is the silent killer of distributed systems. Environment variables become unmanageable at scale. Treat config as code, not as an…
- Day 12 of #DistributedDilemmas: API versioning perpetuates distributed mistakes
API versioning perpetuates distributed mistakes. v2 endpoints often carry v1's technical debt. Evolve APIs additively to avoid version hell.
- Day 11 of #DistributedDilemmas: Queue-based architectures hide scaling issues
Queue-based architectures hide scaling issues. Kafka topics with long retention become both a blessing and a curse. Backpressure beats unbounded queues!…
- Day 10 of #DistributedDilemmas: Observability becomes obscurity at scale
Observability becomes obscurity at scale. More metrics often mean less visibility. Focus on the critical few signals that truly indicate system health!…
- Day 9 of #DistributedDilemmas: Distributed transactions are a myth at scale
Distributed transactions are a myth at scale. Two-phase commit falls apart under network partitions. Design for compensation, not for distributed…
- Day 8 of #DistributedDilemmas: Eventual consistency is consistently misunderstood
Eventual consistency is consistently misunderstood. CRDTs work better in whitepapers than in production. Real-world systems need a spectrum of consistency…
- Day 7 of #DistributedDilemmas: Network partitions heal dangerously
Network partitions heal dangerously. Merging divergent states introduces subtle data corruption. CAP theorem isn't a choice, it's a law of nature in…
- Day 6 of #DistributedDilemmas: Leader election creates false security
Leader election creates false security. Raft/Paxos implementations often have higher MTTR than the failures they aim to solve. Simplicity frequently beats…
- Day 5 of #DistributedDilemmas: Sharding decisions made today become tomorrow's scaling bottlenecks
Sharding decisions made today become tomorrow's scaling bottlenecks. NoSQL's partitioning promises often cost more than vertical scaling. Distribution ≠…
- Day 4 of #DistributedDilemmas: Idempotency is a lie we tell ourselves
Idempotency is a lie we tell ourselves. Nested partial failures expose retry logic flaws. True exactly-once delivery remains elusive in distributed…
- Day 3 of #DistributedDilemmas: Caching accelerates inconsistency
Caching accelerates inconsistency. Cache invalidation storms often outweigh hit rates. The fastest cache is sometimes no cache at all. Exhibit A: DoorDash…
- 🚀 Launching today: 28 Days of #DistributedDilemmas
Follow me on Twitter/X this February for one battle-tested insight a day on the hidden complexities behind outages, tech debt and architectural nightmares.
- Day 2 of #DistributedDilemmas: Microservices don't eliminate complexity, they redistribute it
Microservices don't eliminate complexity, they redistribute it. Your monolith's function calls become network calls. Pick which failures you want to debug…
- Day 1 of #DistributedDilemmas: Consistency guarantees become availability nightmares
Consistency guarantees become availability nightmares. Every distributed lock is a future bottleneck. Systems that embrace controlled inconsistency often…
- Cell-based architecture, explained: the public version of my Innovation Day talk
My Innovation Day deck was internal, so here's the public version: what a cell is, scaling up and across, blast radius, and what cells cost you.
- The Redis Paradox: my DelhiFOSS 2.0 talk at IIT Delhi, written up
The written version of my DelhiFOSS 2.0 talk on Redis beyond caching: a short history of caches, live driver matching with GEO commands, and Pub/Sub.
- Speccing a Shopify app for a friend: Etsy-to-Shopify inventory sync
A friend needed a Shopify app that keeps stock in sync with Etsy. Before any code, I wrote him a spec to hand to a developer: scope, diagrams and a 70-hour initial estimate.
- Our Journey with Multi-region Cloud Architecture and Data Residency
How Atlassian built its multi-region cloud architecture for data residency, covering region creation, service hydration, tenant migration and self-serve moves.
- Elevating Trust: Atlassian's Journey to HIPAA Eligibility Expansion!
How Atlassian expanded HIPAA eligibility by replacing a manual BAA process with a self-serve flow and a new service integrating IronClad with Admin Hub.
- Two system design problems from my 2022 interviews, worked with real numbers
A photo pipeline for a fleet of 360-degree camera cars and an A/B split-testing service: requirements, capacity math, data model and the parts I'd tighten.
- Interview prep, senior edition: a system design checklist, one backtracking template and what loops grade on
My 2022 prep notes for senior and staff interviews: a system design checklist, one Python DFS for seven backtracking problems, rubrics and a STAR story bank.