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 architecture2021 — 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.
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 · video2021 — 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 processing2023 — 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
Backend · search & ranking2021 — present
Real-time feed and search at 2.2M MAU
Problem
The platform needed a personalised real-time feed and search across content generated by millions of users, served through an SDK embedded in dozens of apps — each of which has its own content universe and its own idea of what should rank.
Approach
Built the feed and search layer on Elasticsearch with Python services in front, designing the index around read patterns rather than convenience, keeping write amplification bounded, and making ranking explainable so a customer asking why an item placed where it did gets a real answer.
Outcome
Real-time feed and search serving roughly 2.2M monthly active users, with compute-heavy ranking work kept off the client.
Elasticsearch
Python
Feed algorithms
Search relevance
Index design
AWS Lambda
Connected devices · IoT2019 — 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 systems2014 — 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 & operations2012 — 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.