I ship mobile apps, and the agent workflows that help teams ship them.
Over ten years of commercial mobile work, native first and cross-platform when it pays, most recently leading mobile at Numan. Alongside that I run My Learning Apps, a solo studio with 20+ apps and more than 900,000 downloads. Before software, I spent twenty years in secondary education.
5 systemsone business risk fixed end to end, Django to mobile
10 daysfrom handover to new patients on the Foundayo launch
Commercial development
Shipping apps in teams
Mobile features owned from product discovery to production: native iOS and Android, shared Kotlin Multiplatform and Flutter code, and the services behind them.
Swift · SwiftUI · Kotlin · KMP · Python/Django BFF
Lead proactive platform maintenance across iOS and Android, keeping the mobile platform fast, stable and easy to build on so teams across the business can do their best work on it.
Took a key coaching business risk from problem to fix end to end: worked with clinical operations and product stakeholders on the approach, then delivered coach-access throttling across the Python/Django monolith, the mobile BFF, the iOS and Android apps and operator tooling, giving clinical teams control of caseload.
Led the mobile slice of the Foundayo launch across iOS, Android, shared Kotlin Multiplatform models and the mobile API. It reached new patients ten days after engineering handover.
Led iOS delivery for GPhC weight and comorbidity verification, including in-app photo capture and resumable upload, the mitigation for the flow's highest-rated churn risk.
Ran referral experimentation end to end, with decision-grade analysis, raising referrals by about 10%.
Mentor engineers, run mobile architecture interviews and lead incident investigations.
Mar 2024 – May 2025
Lead Mobile Engineer · YourParkingSpace
iOS · Android · Flutter
Set technical direction across iOS, Android and Flutter while staying hands-on in production.
Led integration of a shared Flutter module into the established native apps.
Delivered Park and Go on the Uber Guest Ride API.
Shipped Live Activities, abandoned-cart notifications and Firebase Personalisation to lift conversion.
Dec 2022 – Mar 2024
Lead iOS Engineer · YourParkingSpace
SwiftUI · UIKit · Flutter modules · SPM
Led the migration from legacy UIKit to a modular SwiftUI architecture.
Led proactive stability and performance work, improving reliability and release confidence.
Moved mapping from Google Maps to MapKit, saving six figures a year.
Hired, mentored and line-managed the iOS team.
Aug 2021 – Dec 2022
Senior iOS Engineer · YourParkingSpace
SwiftUI · MVVM · Bitrise · Fastlane
Rebuilt a legacy UIKit app in SwiftUI and MVVM.
Set up CI/CD with Bitrise and Fastlane, XCTest automation and Sentry observability.
Integrated payments including Apple Pay, Stripe and PayPal.
Solo apps
My Learning Apps, my own studio since 2016
I founded My Learning Apps Ltd to build educational, accessibility, revision and productivity apps. I own the whole lifecycle: research, design, engineering in Swift, SwiftUI and React Native, release, analytics, marketing and support. Newer apps run AI on the device with Apple Foundation Models, so inference stays private and fast.
Four I'd point a developer at, each chosen for a different part of the stack:
M
Mark My Work = GCSE English
iOS · SwiftUI · Foundation Models
Scan a handwritten answer or paste a typed one and get structured exam feedback: the likely descriptor band and what it takes to reach the next one. Marking runs with Apple's on-device model, so students' work never leaves the phone and the app collects no data.
Save the QR codes you use again and again, like car park and shop codes, and reopen them from a map or a list. Risky links get a warning before they open.
Small, real excerpts from my public repositories, with the problem each one solves and the decision that matters.
MapKitSearch
Location autocomplete for SwiftUI on top of MKLocalSearchCompleter, packaged as an @Observable model you bind straight to .searchable.
The interesting part is a race. Cancelling the completer is best effort, so a callback from a query the user has already cleared can arrive late and refill the list. The model guards against it, and keeps the Objective‑C delegate on the main actor without sending a non‑Sendable array across a boundary.
@MainActor
@Observable
public final class MapKitSearchModel: MapKitSearchProtocol {
public var autoCompleteResults: [MKLocalSearchCompletion] = []
public var searchTerm: String = "" {
didSet {
guard searchTerm != oldValue else { return }
autoComplete()
}
}
func apply(results: [MKLocalSearchCompletion]) {
// `MKLocalSearchCompleter.cancel()` is best effort. A callback from a
// query that was just cleared must not repopulate the suggestions.
guard !searchTerm.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return }
autoCompleteResults = results
lastError = nil
}
}
AppDesignSystem is a SwiftUI package of semantic tokens, layout primitives and accessible components, with a React Native sibling that mirrors the same theme model.
Swift Challenges is 76 interview-style exercises with Swift Testing suites and reference solutions, including a concurrency set on actors, reentrancy, Sendable and cancellation.
@main
struct DemoApp: App {
var body: some Scene {
WindowGroup {
ThemeProvider(theme: .editorial()) {
ContentView()
}
}
}
}
AppDesignSystem: one theme provider, semantic tokens everywhere below it
AI workflows
Making coding agents dependable
I ship AI features to production, and I build the tooling that lets engineers use agents without losing rigour: tickets, roles, independent review and fresh test evidence before anything is accepted.
In production
Coaching AI experiment · Numan
Delivered a production coaching AI experiment across the Home, Care and Treatment areas, with per-user API overrides for safe testing, analytics, a feature-flag rollout and a clean retirement afterwards.
With teams
AI-first engineering · Numan
Introduced agentic delivery with Pi, Claude Code and multi-agent workflows.
Deployed an internal skills marketplace, wrote company-wide Claude skills, and coached product colleagues to use AI safely and on their own.
plan→implement→independent review→test→accept
shepherd
A portable workflow pack for teams of coding agents across harnesses, with a ticket board and one explicit process from plan to acceptance.
A Herdr plugin that passes one change between Claude Code, Codex and OpenCode like a baton: one plans, the next implements, the next reviews, so no tool ever reviews its own work. It commits once every step is approved.
Agent skills for adaptive codebase quizzes, guided tech-test coaching, cross-platform mobile translation and safe iOS demo seeding. Built to speed delivery without deskilling engineers.
Before software I trained as a secondary English and Mathematics teacher and became a senior leader. It's where my educational apps come from, and why mentoring and coaching people through new tools is a big part of how I lead.
2000 – 2021
Education leadership · Secondary schools
Senior leader with more than 20 years' experience leading departments, mentoring staff and improving teaching outcomes.
1999 – 2000
Education · Queen Mary University of London, Durham University
BA (Hons) English, 2:1, Queen Mary University of London (1999).
PGCE Secondary English and Mathematics, Durham University (2000).
CV
The short version
Senior mobile engineer and technical lead with 10+ years of commercial mobile experience across iOS, Android and cross-platform, specialising in Swift, SwiftUI and polished consumer products. AI-first: shipping AI-powered features, building on-device AI apps and designing agentic engineering workflows. Based in South Shields, working remotely across the UK.