Performance98 on Lighthouse, Slow for Real Users: Core Web Vitals
The developer kept sending screenshots of the score. Real users had a median LCP of 4.6 seconds, because the consent script blocked rendering for two of them.
Read MoreThoughts, tutorials and notes on backend engineering & the cloud.
PerformanceThe developer kept sending screenshots of the score. Real users had a median LCP of 4.6 seconds, because the consent script blocked rendering for two of them.
Read More
Backend DevelopmentA founder wanted me to settle it. The product was a dashboard with two hundred users, and the entire performance argument was about a bottleneck that did not exist.
Read More
SRETwenty minutes of confident action, all of it wrong, because I diagnosed in the first ninety seconds and spent the rest defending that guess.
Read More
DevOpsNobody waited for our 24-minute pipeline. They pushed, switched tasks, and came back an hour later — by which time the context was gone.
Read More
FreelancingA UK client asked why they should hire someone in Lahore over Manchester. I answered with cost, which was wrong, and we did not work together.
Read More
FreelancingMy first proposal was 1,400 words about me. Forty of those got two replies, both asking for a lower price. The one that worked was 150 words about them.
Read More
CareerSomeone sent me a roadmap with two hundred boxes and asked how long it would take to finish. Nobody finishes that, and the order is wrong anyway.
Read More
API DevelopmentA partner retried a malformed request forever because we returned 500 instead of 400. Both sides behaved correctly and the system still broke.
Read More
API DevelopmentA customer's retry loop made 1.4 million requests overnight and took the API down. They were not attacking us — their code had a bug and we had no limits.
Read More
TestingEvery service method had a test with the repository mocked. The tests passed whether or not the SQL was valid. Coverage measured how much code ran.
Read More
System DesignSix microservices, Kafka, sharded databases — and nine hundred users. Shipping a change to a form took three weeks.
Read More
Node.jsCPU pinned at 100% on one core, seven idle, database untouched. One endpoint parsed a CSV synchronously — 300ms during which every request was frozen.
Read More
Git"I ran git reset --hard and lost a day of work." He had lost twenty minutes. Getting the rest back took about forty seconds with reflog.
Read More
Message QueuesA team ran Kafka for eighteen months to move four thousand messages a day. That is three a minute. A Postgres table would have done it.
Read More
PerformanceA price change went out and one customer kept seeing the old one. It was cached in four places. We had invalidated one of them.
Read More
Databases"The database is slow" is the least useful sentence in backend work. The database is almost never slow — a specific query is, for one of about six reasons.
Read More
DatabasesA page loaded in 200ms for a year, then took nine seconds. Nothing was deployed. The table had simply crossed four million rows.
Read More
Web FundamentalsA developer spent a day on one CORS error. The top search results tell you to install a browser extension, which is the worst of the available fixes.
Read More
AuthenticationSupport asked me to log out a compromised account. The answer was: we cannot. That token was valid for six more days and nothing could stop it.
Read More
InterviewsI failed my first one by drawing boxes ninety seconds in. Fifteen minutes later the interviewer asked how many users the system had, and I had never asked.
Read More