Mobile driver's license, from standard to store release
2024–2025Led the mobile side of Colorado's mDL work: identity proofing, liveness, issuance, presentation, secure state, and recovery after redirects or app restarts.
iOS and Android architecture for public-service apps.
At Colorado OIT, I lead iOS and Android architecture for myColorado, the State of Colorado's official citizen app for digital driver's licenses, vehicle registration, licenses, health records, and other state services. Most of my work is in identity, credentials, release reliability, and older app code that still has to keep moving.
The app is not small: about 2M downloads, 610k monthly active users, and 4.8 stars across 144,000+ ratings. The mobile team is small: three developers and three QA engineers. I stay close to the code, mentor the iOS and Android developers beside me, and cross into AWS Lambda or legacy PHP when a mobile feature depends on it.
Led the mobile side of Colorado's mDL work: identity proofing, liveness, issuance, presentation, secure state, and recovery after redirects or app restarts.
Moved reliability from a metric people checked after release into a gate the team uses while traffic is still ramping. Crashlytics now helps decide when to widen, hold, or dig in.
Started the Kotlin Multiplatform layer for business rules shared by both apps. iOS consumes an XCFramework; Android consumes a Maven AAR; both are packaged through Azure.
On a small team, process has to earn its place. I prefer small PRs, named owners, written decisions, and release checks that happen before a rollout reaches everyone. Before I add a dependency or a new pattern, I want to know who will maintain it six months from now.
For mobile ID work, I also watch adjacent rollouts like CA DMV Wallet, LA Wallet, and Apple Wallet ID integrations. Standards are moving quickly; I would rather change a design on paper than migrate the wrong primitive after release.
Contract and freelance work where the mobile app is already important, already in production, or about to take on identity or release risk.
Set architecture, review work, keep iOS and Android aligned, and still write code.
OAuth, proofing, liveness, secure storage, redirects, vendor SDKs, and clear error states.
Move screens and shared code toward SwiftUI, Jetpack Compose, Kotlin, or KMP while features keep shipping.
Build pipelines, fastlane, Azure DevOps, release gates, and internal tools for developers and QA.