Home / Blog

Blog

Your blog category

Crash symbolication: the dSYM discipline that keeps stack traces readable

You got a crash in Crashlytics, but the stack trace is hex addresses. Why? Your .dSYM files never made it. The discipline…

Blog 6 min

Log aggregation from zero: building a production ELK stack

How do you collect logs across ten microservices? Here's how the Elasticsearch, Logstash, Kibana stack actually goes together on real projects.

Blog 6 min

How I cut an iOS app from 150MB to 40MB

Dentii's binary had swollen to 150MB. Every release the size crept up. Here's how I got it down to 40MB and what…

Blog 7 min

API gateways in production: Kong vs Traefik vs rolling your own

In a microservice system the gateway is the hinge everything swings on. Kong, Traefik, or a custom gateway: here are the criteria…

Blog 6 min

Subscription analytics: RevenueCat vs a custom implementation

For iOS subscription analytics: the RevenueCat SDK or a custom implementation? What I've tried across 12 apps.

Blog 6 min

Picking a message queue: Redis, RabbitMQ, SQS compared

Async work needs a message queue. Redis, RabbitMQ, AWS SQS. Which one fits which scenario.

Blog 6 min

Collecting in-app feedback: three approaches that actually work

Users hit problems in your app but rarely leave an App Store review. Three approaches to collecting in-app feedback.

Blog 6 min

Pagination: cursor vs offset, and when to pick which

Two ways to paginate lists in an API: offset-based (LIMIT/OFFSET) and cursor-based. How each affects performance and user experience.

Blog 5 min

How I run a TestFlight beta with 200 testers without losing my mind

TestFlight is the iOS beta standard. At 200+ testers the organisation gets tricky. Feedback flow, versioning, and communication.

Blog 6 min

When to shard a database, and how to make the call

Sharding is the classic answer at high scale. Done at the wrong time it's serious operational debt. Here's how to decide.

Blog 5 min

iOS accessibility: the minimum VoiceOver and Dynamic Type discipline I won’t skip

Most iOS devs treat accessibility as an afterthought. Here's the minimum set of things I actually do on every project.

Blog 6 min

API rate limiting: token bucket vs sliding window, in practice

Rate limiting is how you stop API abuse and enforce fair use. Two popular algorithms and their practical implementations.

Blog 6 min