Optimising INP: where JavaScript actually hurts you
INP replaced FID in Core Web Vitals in 2024 and it's a tougher metric. I worked through how JavaScript actually drives INP…
Custom post types and Gutenberg blocks: native registration instead of ACF
I'd grown used to defining custom post types and blocks with ACF. Moving to native register_post_type and register_block_type changed how clean the…
Moving SOAP to REST: three migrations, 18 months of lessons
Common lessons from three SOAP to REST migrations on bank, ERP, and government integrations. Gateway pattern, envelope conversion, and the strategy for…
ASO notes from shipping 12 App Store apps
Some of my apps pull 60% of installs from ASO, others barely grow. Keyword strategy, screenshot order, preview video, localisation: the decisions…
Multi-region deployment is overkill for 90% of products
I rolled back multi-region deployment on two projects where I'd introduced it too early. When it's truly required, when it just piles…
Sprint planning that actually earns its place: negotiation, not ritual
Sprint planning is a ritual on most teams. Two hours long, output fuzzy. Turning it into a practice that actually earns its…
CLS culprits: from font loading to ad slots, and how to fix each one
Cumulative Layout Shift (CLS) is Google's visual stability metric. Where layout shifts come from, and how to fix them.
Custom WP REST API endpoints: authentication and capability checks that hold up
You're writing a custom WordPress REST API endpoint. The security discipline: authentication, authorization, rate limiting.
API key rotation: four scenarios and how to handle each one
What happens when an API key leaks? Without rotation, years of exposure. Four real scenarios and the practical rotation for each.
Dark Mode done right: the discipline from design to code
Dark Mode has been around since iOS 13. Badly implemented apps are still everywhere. The right approach, from design to code.
Disaster recovery: the mistakes I made before a real incident exposed them
Most companies have a DR plan on paper that nobody tests. Here are the failures a real drill will expose.
Story points are not hours: the estimation mistake most teams make
A story point is not hours. But most teams estimate with that assumption. What does good estimation actually look like?