Pinned Tweet
Someone found our public signup endpoint and scripted it.
No rate limit.
No CAPTCHA.
No email verification gate.
40,000 fake accounts in six hours.
Support thought it was a viral moment.
It was a bot with a for loop.
How do you rate-limit signup without punishing real users?
๐จ11 Database concepts every backend developer should understand:
๐. ๐๐๐ ๐๐ก๐๐จ๐ซ๐๐ฆ: Distributed Databases
๐. ๐๐ฏ๐๐ง๐ญ๐ฎ๐๐ฅ ๐๐จ๐ง๐ฌ๐ข๐ฌ๐ญ๐๐ง๐๐ฒ: Distributed Systems
๐. ๐๐ฌ๐จ๐ฅ๐๐ญ๐ข๐จ๐ง ๐๐๐ฏ๐๐ฅ๐ฌ: Concurrent Transactions
๐. ๐๐๐ฉ๐ฅ๐ข๐๐๐ญ๐ข๐จ๐ง: Read Scaling
๐. ๐๐ง๐๐๐ฑ๐ข๐ง๐ : Faster Queries
๐. ๐๐๐๐๐ฅ๐จ๐๐ค๐ฌ: Concurrent Access
๐. ๐๐ก๐๐ซ๐๐ข๐ง๐ : Write & Data Scaling
๐. ๐๐๐ซ๐ญ๐ข๐ญ๐ข๐จ๐ง๐ข๐ง๐ : Large Tables
๐. ๐๐ฎ๐๐ซ๐ฒ ๐๐ฅ๐๐ง๐ฌ: Performance Analysis
๐๐. ๐๐จ๐ง๐ง๐๐๐ญ๐ข๐จ๐ง ๐๐จ๐จ๐ฅ๐ข๐ง๐ : Efficient Connections
๐๐. ๐๐ซ๐๐ง๐ฌ๐๐๐ญ๐ข๐จ๐ง๐ฌ: Data Consistency
You don't become a senior developer by surviving more years.
You become one by solving bigger problems.
Focus on learning:
1. Production debugging
2. System design
3. Architecture trade-offs
4. Database internals
5. Caching strategies
6. Observability
7. Security fundamentals
8. Cost optimization
9. Technical communication
10. Decision making under uncertainty
Coding is only one part of engineering.
Systems Design Interview:
One slow downstream dependency.
No circuit breaker anywhere in the call path.
Every request grabs a thread and waits on it.
Thread pool has a limit.
Limit gets hit.
Now requests that never touch that dependency can't get a thread either.
How do you stop one slow service from taking the whole app down?
Copied the same user object two different ways in one PR.
Edited the copy, not the original, on both sides.
Only one original stayed untouched.
QA found the other one three days later.
Interviewer: "Walk me through how you'd design a URL shortener."
Candidate: starts drawing boxes immediately.
That's the moment most system design interviews are already lost.
What separates a pass from a reject in the first 60 seconds:
1, They ask about scale before drawing anything
2, They clarify read vs write ratio out loud
3, They estimate storage before picking a database
4, They say "I'll start simple and add complexity" instead of over-engineering from line one
5, They ask about consistency requirements before naming a specific database
6, They think about failure before thinking about features
7, They say "here's what I'd cut if we had less time" unprompted
I've sat on both sides of this table.
The candidates who get offers aren't smarter.
They just don't start drawing boxes first.
What's the first question you ask in a system design interview?
Here's the question that stumped me in an interview:
You request an Uber right as you walk into a subway tunnel and lose signal completely.
Thirty seconds later, back above ground, a driver is already five minutes away.
How?
This is actually a pretty interesting problem with browser agents.
Why should an AI agent rediscover the same website and repeat the same work every single time?
If it can remember the route and reuse it, browser automation becomes way more efficient.
Definitely worth checking out ๐
For a long time now I've handed my repetitive browser work to Claude Code and Codex through
Playwright MCP.
It works. Most of my browser tasks run themselves now.
But one thing kept bothering me.
Every time I ask for the same task, the agent has no idea it has ever done it before. It takes a full snapshot of the page again, reads the whole thing again, and works the site out from the beginning.
Same task. Same site. Same tokens. Every single time.
So I started writing scripts to help it. Then more scripts. At some point I was writing more browser automation by hand than I was actually automating.
I wrote documentation for the agents. I tried everything I could think of. There is still no real way for an agent to recall what it did last time.
Maybe everyone running agents has hit this and just accepted it as the price.
I don't think that's how it should work. If it did the task yesterday, today should be
cheaper.
So I built Cairn.
It does what Playwright MCP does -- clicks, types, downloads, reads pages. The difference is
it remembers, on @sibylcap memory.
Your AI walks the site once. Cairn writes down the route and checks every step. After that the same task is one call. No page reading. No explaining it again. No new script.
Take the memory away and Cairn is nothing. That is the whole product.
pip install cairn-browser-mcp
cairnmcp.fun
A developer showed me a system design.
Everything looked perfect.
Load balancer.
Multiple servers.
Redis.
Kafka.
Database replicas.
Multi-region deployment.
I asked one question:
โWhat happens when the network between two regions breaks?โ
He paused.
So I continued.
Users in India are writing to Region A.
Users in the US are writing to Region B.
Both regions are healthy.
Both databases are healthy.
But they can't communicate.
Now two users update the same account.
At almost the exact same time.
Region A says:
Balance = โน500
Region B says:
Balance = โน700
The network comes back.
Now what?
Which value wins?
How do you merge the changes?
Do you prefer:
โ Strong consistency?
โ Eventual consistency?
โ Last-write-wins?
โ Conflict resolution?
โ Single-writer architecture?
And suddenlyโฆ
the hardest part of the system isn't the database.
It's deciding what โcorrectโ actually means.
This is why distributed systems are hard.
The machines aren't the scary part.
The failures between them are.
What would you choose?
Video streaming engineers live and die by this distinction:
- TCP
- UDP
Do you care more about every packet arriving, or arriving fast?
If I had to become a better software engineer this year,
I'd stop chasing every new framework.
I'd focus on fundamentals that survive frameworks.
MONTH 1 โ Code
Master:
โข One programming language
โข Data structures
โข Algorithms
โข OOP
โข Error handling
โข Testing
โข Debugging
Build:
โ Something people can actually use
Goal:
Write code you can understand 6 months later.
MONTH 2 โ Databases
Learn:
โข SQL
โข Indexes
โข Transactions
โข Constraints
โข Replication
โข Caching
โข Data modeling
Build:
โ Application with a real database
Then inspect your slow queries.
MONTH 3 โ Backend
Understand:
โข HTTP
โข REST
โข Authentication
โข Authorization
โข Sessions
โข APIs
โข Background jobs
โข Queues
Build:
โ Production-style backend
Don't just make endpoints work.
Think about what happens when they fail.
MONTH 4 โ System Design
Learn:
โข Scalability
โข Load balancing
โข Caching
โข Sharding
โข Replication
โข Messaging
โข Rate limiting
โข Fault tolerance
Design:
โ URL shortener
โ Chat system
โ Notification system
โ Video platform
And explain the trade-offs.
MONTH 5 โ Production
Learn:
โข Docker
โข CI/CD
โข Logging
โข Monitoring
โข Metrics
โข Tracing
โข Security
โข Cloud basics
Deploy your applications.
Production teaches lessons tutorials can't.
MONTH 6 โ Engineering Thinking
Start asking:
Why this database?
Why this architecture?
What happens if this service dies?
What happens when traffic increases 100x?
What happens when the network fails?
What happens when two requests update the same record?
These questions matter more than memorizing another framework.
EVERY WEEK
Build something.
Read code written by better engineers.
Debug something you don't understand.
Write tests.
Read documentation.
Explain what you built.
Repeat.
The goal isn't to know every technology.
It's to become the person who can learn a new technology quickly
because the fundamentals are already there.
That's what I think being a software engineer actually means.
Has anyone actually gotten better at coding by solving LeetCode every day,
or does it mostly make you really good at solving LeetCode problems?
After working on distributed systems for years.
Iโve learned one uncomfortable lesson:
Most production incidents arenโt caused by the happy path.
Theyโre caused by what happens when things go wrong.
Here are 5 failure scenarios every backend engineer should design for:
1. Traffic suddenly spikes
Your API handles 1,000 requests/sec perfectly.
Then a flash sale starts.
Now it gets 20,000.
Without protection:
โข Requests pile up
โข Threads get exhausted
โข Database connections run out
โข Latency increases everywhere
Solution:
โข Rate limiting
โข Load shedding
โข Queuing
โข Autoscaling
โข Backpressure
2. A downstream service becomes slow
Your service is healthy.
But the payment service takes 10 seconds to respond.
Now your threads are waiting.
Then more requests arrive.
Eventually your service becomes unhealthy too.
Solution:
โข Timeouts
โข Circuit breakers
โข Bulkheads
โข Fallbacks
Never let one slow dependency take down your entire system.
3. Cache goes down
Your application was designed around fast Redis reads.
Redis suddenly disappears.
Every request now hits the database.
The database gets overloaded.
Now your cache failure becomes a database failure.
Solution:
โข Cache-aside
โข Graceful degradation
โข Request coalescing
โข Database protection
A cache should make your system faster.
It shouldn't be the reason your system stays alive.
4. A message consumer crashes
The producer keeps publishing.
The consumer is offline.
Messages start accumulating.
When the consumer comes back, it suddenly has thousands of messages to process.
Solution:
โข Monitor consumer lag
โข Control concurrency
โข Use retry policies
โข Use dead-letter queues
โข Make consumers idempotent
Recovery is part of system design.
5. Your database becomes the bottleneck
You scaled your application servers.
But every request still hits one database.
Adding more application servers doesn't solve the problem.
It can actually make it worse.
Solution:
โข Connection pooling
โข Read replicas
โข Caching
โข Query optimization
โข Partitioning/sharding when necessary
The fastest application in the world is useless if its database can't keep up.
Good distributed systems aren't designed only for success.
They're designed for failure.
Which failure scenario have you personally dealt with in production?
I asked a developer:
โHow do you make sure only ONE server processes a job?โ
He said:
โUse a boolean flag in the database.โ
Fair.
Then I added:
โ 100 application servers
โ Job runs every minute
โ Any server can pick it up
โ Servers can crash
โ Network can timeout
โ Processing can take 10 minutes
Now imagine:
Server A checks:
isProcessing = false
Server B checks:
isProcessing = false
Both see the same value.
Both start the job.
You wanted:
1 execution.
You got:
2.
Now add 100 servers.
Suddenly you have duplicate jobs everywhere.
So you introduce a distributed lock.
But then another question appears:
What happens if the server holding the lock crashes?
The lock remains.
The job never runs again.
So you add a TTL.
Better.
Until the job takes longer than the TTL.
The lock expires.
Another server starts processing.
Now two servers are working on the same job again.
Distributed locking looks simple.
Until you start asking:
โWhat happens when things fail?โ
That's usually where the real system design begins.
Kafka looks complicated until you understand the problem it solves.
Learn it in this order:
1. Fundamentals
โ Producers
โ Consumers
โ Topics
โ Partitions
2. Message Flow
โ Records
โ Offsets
โ Consumer Groups
โ Polling
3. Scaling
โ Partitioning
โ Parallelism
โ Replication
โ Rebalancing
4. Reliability
โ Acknowledgements
โ Replication Factor
โ Leader Election
โ Fault Tolerance
5. Delivery
โ At Most Once
โ At Least Once
โ Exactly Once
6. Architecture
โ Event Streaming
โ Event-Driven Systems
โ Log Compaction
โ Retention
7. Production
โ Monitoring
โ Lag
โ Backpressure
โ Failure Recovery
Don't learn Kafka because everyone uses Kafka.
Learn it when your problem actually needs an event streaming platform.
Guys, I just posted a thread with some useful GitHub resources.
I feel it could be really helpful if you're learning Kafka or trying to get better at it.
So, sharing it here ๐
Kafka is easy to learn.
Until you have to actually use it. ๐
Partitions, consumer groups, offsets, Kafka Connect, Streams, CDC...
Thatโs where things get interesting.
So I collected 10 GitHub repositories that can actually help you get better at Kafka.
๐งต๐
10. Confluent Demo Scene
github.com/confluentinc/demoโฆ
This one is packed with practical Kafka demos.
You'll find projects around:
โ Kafka Connect
โ Kafka Streams
โ ksqlDB
โ Kafka โ Elasticsearch
โ Kafka โ S3
โ Kafka โ Database
โ Fraud detection
โ Interactive queries
Perfect when you don't know what to build next.
Open a demo.
Run it.
Understand the architecture.
Then build your own version.
That's how you go from "I know Kafka"
to
"I can actually use Kafka."









