Dallas Crilley

I fix the part of a business where the CRM, the billing system, and a few vendor APIs don't agree.

Ten years doing it inside my family's PR firm in Dallas, where I was the only engineer. I sit with the person who runs the process, find where it breaks, and build something they can run without me. Python and TypeScript. These days there is a fair amount of AI in the pipeline, with a human holding the release button.

Three things I fixed

Monthly billing that took a person and produced disputes

An MSP was re-keying Intermedia phone usage into ConnectWise invoices every cycle, account by account. Charges landed on the wrong agreement. A retry after a timeout could bill someone twice. I built Meter to do the transfer. It pulls the usage, maps it to the right agreement, shows the operator a preview of what will change, and only then writes. Per-account locks stop two syncs from colliding. When ConnectWise answers a write with an ambiguous error, Meter queries back and matches a content hash before deciding whether to retry.

It runs in production today. One reconciliation audit in December 2025 covered 202 accounts and 931 work items and turned up a tax-row identity bug before the next invoice went out. That number is from my own incident notes, so take it as a description of one audit, not a monthly volume.

Six vendor systems and no single view of a client

The firm ran on QuickBooks, Copper, Basecamp, PandaDoc, Acuity, and Airtable. Finance and ops answered "what do we have with this client" by opening all six. I built Throughline. Every vendor sits behind the same four-method connector, and one engine owns incremental sync, retries, health checks, and the write into Postgres. A new connector gets all of that for free. Each run fetches only what changed since its last checkpoint, which the architecture notes put at roughly a third of the API calls a full refresh would make.

The result is one customer record with the invoices, deals, projects, contracts, appointments, and notes attached. Staff read it from a dashboard instead of reconciling six tabs. The connector contract is public as throughline-connector-kit.

A media pipeline that could publish garbage

The podcast side of the business needed transcripts, edit points, and social copy for every episode, and the first version was a script that called a model and hoped. CoHost AI Studio replaced it with a pipeline where every stage writes out what it produced, so you can open the transcript and see exactly where the edit detector decided to cut. Before anything publishes, a quality gate scores the output with a mix of programmatic checks and a second model, and a person decides whether it goes.

I don't have a clean before-and-after number for this one and won't invent one. What I can say is that the gate has blocked releases, which is the point of having it.

How I work

I learned this inside my father's company. There was no one else to hand a ticket to, so I owned the requirements conversation, the build, the deploy, the 2am page, and the explanation afterward. The title on my résumé, Technology & Business Systems Lead, is a description I wrote; the company never assigned one. Judge the systems.

I start by watching someone do the job. Most of what I build is a straight transcription of what they were already doing by hand, with the failure modes turned into code. I'd rather ship a preview step than a confidence score. When a model is in the loop, I want its work inspectable and a human able to stop it.

I'm looking for business systems, integration, or technical implementation work, full-time or contract, at a company that runs on a CRM, a billing system, and a handful of vendor APIs and needs them to agree. Dallas-Fort Worth, remote, or a few days a week on site.

More

Writing

Public code

Get in touch

Email is best: [email protected]. Tell me what's broken and I'll tell you whether it's the kind of thing I fix. I reply within a day.