How to Actually Design Microservices: Boundaries, Splits, and Database OwnershipYou already know how microservices talk to each other. REST, gRPC, message queues — the communication layer is well-understood territory. But communication is the easy part. The hard part is everythinOct 3 · 20 min readkareemdev.hashnode.dev
How to Scale a Backend Service: From SLOs to Load Testing to Horizontal ScalingMost engineers learn to scale a backend service the same way: the service gets slow, someone adds more replicas, and everyone hopes for the best. Sometimes it works. Often it doesn't, because the realOct 2 · 33 min readkareemdev.hashnode.dev
Fixing Hot Partitions in Multi-Tenant KafkaYou've done everything "right." Your Kafka topic is well-provisioned, your consumer group is scaled out, and on paper your throughput should be more than enough. Yet somehow, lag keeps creeping up on Sep 27 · 11 min readkareemdev.hashnode.dev
Nobody Planned This Stack: How Reliability Really Gets Built in Production SystemsIntroduction: Reliability Is a Non-Functional Requirement When we design a system, we write two kinds of requirements. Functional requirements say what the system does: "A user can top up their balanSep 24 · 21 min readkareemdev.hashnode.dev
Choosing a Rate Limiter That Works in ProductionIntroduction When I first started working with rate limiting, I found myself confused. There are five or six algorithms that all seem to solve "the same problem," they all interact with time, countersSep 22 · 17 min readkareemdev.hashnode.dev