Fulfillment to billing, in one reviewed click
ProductionSaaS billing
Fulfilling orders took two people, several systems touched by hand, and a weekly batch to create the subscriptions afterward. I replaced it with a serial-level inventory dashboard that logs the shipment and creates the invoice and subscription in one reviewed step, with prorate math for mid-term changes and a full serial audit trail.
It stays simple enough that the people using it can see what it did and sort out most problems without me.
Churn analytics dashboard
ProductionSubscription analytics
The billing platform could not produce an accurate cancellation figure, so the people making decisions were working from a number that was close but wrong. I rebuilt the reporting on live billing and accounting data: MRR and subscriber trend, new-logo against expansion revenue, cancellation reasons, and tenure cohorts.
The findings on revenue sources led to the creation of the account management program.
I validated the MRR derivation before building on it. That pass caught a live defect: the paid-through rule was keyed on the wrong date field, so subscriptions that never billed were counting as active revenue.
Year-end was forecast three ways, so the projection carried its own sensitivity instead of a single number.
Cross-device Android signage app
Built, in QAAndroid
The app only ran on hardware the company shipped, and leaned on a WebView plus JS-player plus localhost-server stack. I replaced it with a native Kotlin app that installs on any consumer device, pulls playlists from the existing cloud, caches them, and plays offline.
Built entirely against the existing server contract, with no server-side changes. I read that contract off device logs, because no spec existed, then documented it so the next person would not have to.
Self-service billing the platform could not do
Specification & integrationIn progress
Our terms require billing behavior the vendor's stock portal does not support, and the business chose to keep the terms rather than bend them to the software. At the same time most billing tickets are simple things a customer should be able to do without us: look at an invoice, pay it, change a card, update their details. This is the layer that closes both gaps.
There is one senior developer and their time is the constraint, so I did the expensive part first: recorded every request and response shape from the live billing org instead of trusting the published docs, exercised the calls against our test environment, and wrote the data layer and interface against what actually comes back. It runs standalone on fixtures for review and switches to live calls with one config change. The proxy is specified and not yet built. Demoed to leadership, waiting on development.
It does not stand alone. A past-due banner on the account when suspension is close means fewer accounts reach collections in the first place. Fields tying a serial number to the subscription it belongs to, a link that had never existed here, let fulfillment, billing and support read the same account.
A collections system built between three sets of requirements
ProductionAR & collections
Took requirements from the collection agency, the CFO, and the billing platform and built the layer between them: daily automated pulls, accountant-ready late-fee calculation, and cost-per-recovery tracking.
Balances over 90 days fell more than 90% in the first year.
Taking billing, and finding what was missing
ProcessOperations
Billing became mine in 2024. There was no collections process beyond the platform's default reminder emails and an occasional call from a rep, no way to see what was actually owed across a whole account, and no self-service anything. I found that out by working the problems one at a time: account audits, disputed charges, settlements, past-due chasing, cancellations that had to be dispositioned by hand.
Doing it by hand is what made the gaps specific enough to build against. The systems above came out of that year. None of them were planned in advance. They were the answers to problems I had already solved by hand a hundred times.
Building the case for a platform rebuild
RequirementsOperations
The company was acquired in 2021 and I moved into the VP role, running every function except sales while it changed hands completely. The platform underneath it was slowing down, extended by junior developers on top of the founder's original build for years and degrading further as customers added content.
Complaints alone were never going to move that, so I built the case out of measurement. Then I supplied a major share of the requirements and led QA through the rebuild. The same years produced new hardware and the first piece of purchase automation.
QA on everything the company shipped
QualityDiagnostics
Within months of joining I was asked to take over support, and QA came with it: everything the company shipped, from device firmware to the web application, including version-level release validation.
Most of what reached development came out of the field. I read raw device logcat, ran controlled tests on my own devices, and wrote bug reports detailed enough for developers to reproduce a fault every time. The fixes that came out of that work cut ticket volume and held the system together as customers scaled it.
PotterSabers
Hobby businessHardware
Designed the chassis in Fusion 360, wired and assembled the electronics, and wrote per-build configuration in C++ against nine firmware versions across three open-source board ecosystems. Sold them through my own storefront and wrote the setup documentation that shipped with each one.
The chassis went through many designs and revisions, exported for both in-house 3D printing and industrial SLS.
Broadcast design and animation
Client workBroadcast & animation
Built the on-air package for a sports talk show carried on local FOX affiliates, across a decade of seasons: title sequence, transitions, lower thirds, and the static frames behind them. The open runs 24 seconds through a 3D set, an animated logo build, and stylised talent treatments. Every lower third and static frame in the package was built from scratch.
Around it, a decade of client work: interstitials for the broadcast Emmys, a looping animation played behind my school's 2014 commencement address, advertising animation, logo design, audio editing, and website builds. Also Layer 8, a proof-of-concept animated pilot about IT support I wrote, rigged, animated and composited solo, voicing several of the characters. A 2015 demo reel collects the rest. All of it solo, start to finish.