Home / Blog

Blog

Your blog category

Sign in with Apple: mandatory, deceptively easy to get wrong

Under App Store Guideline 4.8, any iOS app that offers third-party login has to offer Sign in with Apple too. Practical notes…

Blog 5 min

Six design principles behind batch pipelines that actually survive production

Shared patterns from three projects where I built reporting, data migration, and nightly aggregation pipelines. Chunking, checkpoints, retry discipline, idempotency.

Blog 5 min

Designing on-call rotation: from solo developer to a real team

I was solo and on-call 24/7 for 5 years. Once the team grew, building a healthy rotation became its own discipline. Thoughts…

Blog 6 min

Image optimization that actually moves LCP: WebP, AVIF, and responsive images

On one e-commerce project, 70% of the page weight was images. Moving to WebP, trying AVIF, and tightening srcset discipline cut LCP…

Blog 5 min

gRPC vs REST: when each one actually makes sense

I moved to gRPC on microservice projects and stayed on REST for monoliths. A side-by-side comparison with the decision criteria that tell…

Blog 4 min

Live Activities and Dynamic Island: lessons from 2 production apps

Live Activities shipped with iOS 16, the Dynamic Island with the iPhone 14 Pro. Here are the ActivityKit patterns I picked up…

Blog 5 min

5 things I missed while scaling background job queues

Across Redis + BullMQ, RabbitMQ, and SQS, I've relearned the same 5 lessons about scaling job queues: poison messages, retry storms, priority…

Blog 5 min

Retrospectives that solve problems, not fill in forms

For many teams, the retrospective has become a 30-minute formality. I'm sharing the structure, facilitation techniques, and action-item discipline that turn it…

Blog 4 min

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…

Blog 5 min

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…

Blog 5 min

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…

Blog 5 min

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…

Blog 4 min