Home

Case studies

Seven bodies of work across four companies, written as problem → approach → outcome. Client and product names are omitted deliberately — the domain is what matters for judging the work.

Platform & SDK architecture 2021 — present

A modular SDK platform for 50+ third-party apps

Problem

The SDK shipped its layouts and business logic compiled in. Any change to an embedded experience meant a new SDK version, which meant every integrating application had to update, rebuild and get through App Review on its own schedule. The fleet was never on one version, integration onboarding was slow enough to lose deals, and binary size grew with every customer-specific feature.

Approach

Re-architected around Server-Driven UI so experiences are described by the backend and rendered by an already-shipped binary; dependency injection so integrators can substitute their own implementations rather than fork; and hard module boundaries so a customer only carries the size of what they use. Added native plugin layers for React Native and Flutter over one shared behavioural contract, and platform-wide observability so a problem inside someone else's app is still diagnosable.

Outcome

Experience changes now reach the whole fleet without a client release. Integration onboarding time dropped by around 80%, SDK size came down, and the platform reached roughly 2.2M monthly active users across the apps that embed it.

BEFORE Product wants a layout change one screen, every customer app Layout + logic compiled into the SDK new SDK version, changelog, migration notes 50+ customer apps each integrate & rebuild on their own release schedule, not yours App Review, then a staged rollout weeks — and the fleet is never on one version AFTER — Server-Driven UI Product wants a layout change same request Config service emits a new UI description versioned, targetable, reversible SDK renders it — same binary, already shipped DI lets an integrator swap any component Live across the fleet no rebuild, no App Review, no version skew
SDUI didn’t remove the client release train — it removed the fleet’s dependency on it for everything except genuinely new capability. That is what cut integration onboarding time, and it’s also what made SDK binary size a budget worth defending.
  • Swift
  • SwiftUI
  • Server-Driven UI
  • Dependency injection
  • React Native
  • Flutter
  • Node.js
  • Go
  • Python
  • CI/CD
Consumer mobile · video 2021 — 2024

Turning around a flagship consumer video app

Problem

The flagship consumer application crashed frequently enough that stability, not features, was the thing blocking growth. Cold start was slow, video playback and authentication were unreliable, and there was no instrumentation to say which of those was actually costing sessions.

Approach

Instrumented first and optimised second — crash triage, startup profiling, and user-journey analytics before touching architecture. Then rebuilt the streaming, authentication, analytics and notification paths, and used what the app taught us about modularity as the foundation for the SDK platform that followed.

Outcome

Roughly 99% crash-free sessions, and cold start cut by 60—70%. The stabilised architecture became the basis for the modular SDK platform.

  • Swift
  • SwiftUI
  • Video streaming
  • Observability
  • Crash triage
  • Startup profiling
AI & media processing 2023 — present

On-device AI media pipeline

Problem

Avatar generation and media effects needed to run on the device rather than in the cloud — for latency, for cost at 2.2M MAU, and because sending user media to a server changes the privacy conversation entirely. Doing that naively drains the battery and thermally throttles the phone within a minute.

Approach

Built the pipeline on MediaPipe and Apple's Vision framework for detection, Metal for GPU-accelerated processing, and FFmpeg for encode and transform. The engineering work was mostly budget management: keeping the per-frame cost inside a thermal envelope, and degrading quality gracefully rather than stalling when the device is already hot.

Outcome

AI media capability shipped inside the SDK platform, running on device across the app fleet.

  • MediaPipe
  • Apple Vision Framework
  • Metal
  • FFmpeg
  • AVFoundation
  • GPU pipelines
Connected devices · IoT 2019 — 2021

BLE applications for connected hardware

Problem

Production iOS applications controlling smart locks and other connected hardware. The hard part of BLE is never the happy path — it's what the app does when the device is out of range, the phone backgrounds mid-write, or a pairing half-completes and leaves both sides disagreeing about state.

Approach

Built secure device discovery, pairing and communication with explicit state recovery: treat every connection as temporary, make every operation idempotent, and reconcile on reconnect rather than assuming continuity.

Outcome

Production BLE applications with reliable real-time interaction against physical hardware, shipped to the App Store.

  • Core Bluetooth
  • BLE
  • Swift
  • IoT
  • Background reconnection
Enterprise systems 2014 — 2019

Enterprise platforms across aviation, tax and analytics

Problem

A run of enterprise engagements — an aviation training academy platform, a statutory tax-filing system, an analytics product, an order-to-cash workflow, and an executive networking platform. Different domains, one recurring constraint: they had to integrate with systems the client already had and could not change.

Approach

Led architecture and delivery across the set. Workflow automation and reporting on top of secure backend APIs, designed around the integration surface each client was stuck with rather than the one we'd have preferred.

Outcome

Delivered as Technical Lead across the portfolio, defining architecture and mentoring the engineers building it.

  • iOS
  • Enterprise integration
  • Secure APIs
  • Workflow automation
  • Reporting
Commerce & operations 2012 — 2019

Retail, commerce and hospitality applications

Problem

Field and operations applications for a national outdoor-gear retailer, plus digital ordering and point-of-sale systems for restaurant operators. Both share a requirement most consumer apps don't have: the venue's connectivity is unreliable, and the app has to keep working anyway.

Approach

Offline-first data models with reconciliation on reconnect, product catalogue and ordering flows, inventory visibility, POS and payment-gateway integration, and production analytics for the operations side.

Outcome

Multiple applications shipped to the App Store and Google Play across retail, commerce and hospitality operators.

  • iOS
  • Offline-first sync
  • POS integration
  • Payment gateways
  • Catalogue & ordering
  • Analytics

Next

The two products I built end to end, with full architecture write-ups.