James PotterBilling and Business Systems · Operations Automation

I build billing and fulfillment systems: invoicing, subscriptions, prorate math, collections, order to cash. Billing became mine in 2024 and I started building the software behind it in 2026. The work usually starts when something takes too long, or when the numbers stop lining up. I check what the systems are actually doing before building on them, and document the back end and the interface so whoever uses it can run it without me.

Before that I ran support teams and owned QA on everything we shipped, from device firmware through the web application, including version-level release validation. In 2021 I moved into a VP role covering every function except sales.

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.

Software Apps ScriptDelugeZoho BooksMCP
Competencies Subscription billingInventory managementCRM integrationREST / OAuth integrationOrder to cashProrate logicSerial audit trailOperator-facing design

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.

Software PythonopenpyxlHTML dashboards
Competencies Subscription MRRCohort analysisForecastingMetric provenanceData validationExecutive reporting

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.

Software KotlinJetpack ComposeMedia3 / ExoPlayerOkHttpGradle
Competencies Native AndroidOffline-first cachingProtocol reverse engineeringMedia playbackUnit testing

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.

Software Zoho Billing APIJavaScriptHTML/CSS
Competencies API reverse-engineeringSpec-vs-reality documentationIntegration designSelf-service flows

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.

Software Zoho BooksMCP
Competencies Scheduled automationOrder to cashLate-fee calculationCost-per-recovery trackingThird-party requirements

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.

Tools Zoho BooksZoho BillingGoogle Sheets
Competencies Order-to-cashAR & agingDispute resolutionAccount auditProcess design
AR tracking maintained by hand AccountBalanceDaysNext step Northwind Hospitality$x,xxx.xx96refer to agency Contoso Retail$xxx.xx74suspend 4/1? Fabrikam Foods$x,xxx.xx61left vm, call back Adventure Works$xxx.xx38disputed, checking Tailspin Signage$xx.xx31 This sheet was the system. Every column that mattered later started as something typed here.

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.

Tools Zoho DelugeZoho InventoryAndroid
Competencies RequirementsQA leadershipBeta programHardware sourcingProcess 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.

Tools Android logcatDevice firmwareRelease validation
Competencies QA ownershipRoot-cause analysisDefect reportingRequirementsAccount retention

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.

Software Arduino IDEFusion 360Adobe Creative Suite
Competencies Embedded C++CAD / mechanical designElectronics & assemblyFirmware configurationStorefront & fulfillment

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.

Software After EffectsCinema 4DMayaIllustratorPhotoshopPremiere
Competencies Motion design3D animationTitle designBroadcast deliveryCharacter rigging