Home
Our Process
Portfolio
FAQ
Where can I see your previous work?
Check out our portfolio at AppMakersLA.com/portfolio
What services do you offer?
We are a Los Angeles app and web development company. As such, we offer: 1) Design for Apps, Webapps and Websites 2) Mobile App Development for iPhone Apps, Android Apps and iPad Apps & Web Development for Webapps. Each project includes full QA Services as well as a product manager.
Where are your app developers located?

Our app developers are mainly located at 1250 S Los Angeles St, Los Angeles, CA 90015, though we have other offices around the world, and we hire the best developers wherever and whenever we find them. If having engineers & designers in Los Angeles is critical to the project, we have the resources to make that happen.

How much do you charge for your services?
Our cost varies depending on the project. Please contact us for a mobile app development consulting session and we will get you an estimate + analysis pronto.
Can you build software for startups?
Yes, we consider ourselves a startup app development company, as well as an agency that builds software for already established firms.

Discover 30+ more FAQs
View all FAQs
Blog
About
Contact ussms IconCall Icon
We answer our phones!
Chen Plumbing logo Family-run plumbing business

A field app simple enough to run from a truck, and exact enough to run payroll

Chen Plumbing runs on technicians in the field, not a back office. AppMakers USA built the internal app they use to cost jobs, log materials, and restock, plus the engine underneath it that turns all of that work into payroll the business can trust.

ClientChen Plumbing
EngagementBuild + ongoing
Two sidesField app + office console
Chen Plumbing job-costing screen on iPad, built by AppMakers USA
The Context

A traditional plumbing business, run the way trades actually run, out in the field.

Chen Plumbing is a family-run operation. Its plumbers spend the day on jobs, not at a desk, and for years the work that holds a trade business together (what parts went on which job, what they cost, what each plumber is owed) lived in manual lookups and memory.

AppMakers USA built the internal system that replaced all of that. It has two faces: a stripped-down field app a technician uses on the job, and an office console where the business sees everything roll up. The two had to be true at once, and they pull in opposite directions.

Act 01 · On the glass

The people using it aren't engineers. If a screen isn't obvious, it doesn't get used.

The hardest design constraint wasn't a feature. It was translating a traditional, hands-on plumbing workflow into something a field technician (not necessarily a tech-savvy one) would actually reach for on a job, instead of falling back to paper.

So the surface had to disappear. A plumber pulls up a job, taps in the parts and pricing, marks a restock, and moves on. The surprise, building it, was how much the small calls decided everything: a field crew adopts a clean tool and quietly abandons an awkward one.

From the build log

"The app gets slower the longer you use it on a big job."

The symptom

Costing a job means adding materials, and a real job uses ten to thirty of them. Each one runs an autocomplete over a list of 781 parts. On long jobs the screen started dropping frames and creeping slower the more a plumber typed. A perfect field-adoption killer: the tool got worse exactly when the work got bigger.

The cause & the fix

The materials list was re-rendering every visible row on every keystroke, and the multi-select path rebuilt its arrays inside the render path: small leaks that compounded across a long session.

Two passes fixed it: move the selection into a ref so picking a part doesn't re-render the input, then stabilize every callback and memoize the row. Typing on a thirty-line job stayed flat and fast.

Got a team in the field that won't touch clunky software?

Get a Free Project Estimate
Act 02 · Under the glass

Under that plain surface, every number is someone's pay. It has to be exactly right.

The same taps a plumber makes to cost a job (materials checked off, a commission rate, an emergency restock logged) are the raw inputs to payroll. The naive way to build that is to store each plumber's weekly total and nudge it as things change. It works until the day a corrected invoice doesn't match the commission already shown, an archived part still counts, and nobody can say which number is true.

So we didn't store payroll at all. We treat it as a calculation, not a saved value.

Jobs & edits
Materials checked off
Emergency restocks
Commission rates
Recalculation engine
🔒 completed invoices locked
This week's payroll
Per-plumber commission
An auditable trail
Anything that affects pay changes → the whole week re-derives from its source rows. Nothing downstream is ever edited by hand.

Whenever something that affects a plumber's pay changes, that week's payroll is re-derived from scratch from the jobs, materials, and restocks underneath it. The safeguard that makes this trustworthy is simple: once a job's invoice is marked completed, it's locked and can't be edited. A finished week's source data is frozen, so its derived total can never silently move. Any week can be regenerated from its rows on demand (an audit trail by construction) and an admin's manual adjustments sit cleanly on top of the computed numbers instead of fighting them.

Chen Plumbing · Office console · Payroll, current weekIllustrative · NDA
Chen Plumbing office console: the current-week payroll table with per-plumber jobs, commission and reimbursements, illustrative anonymized data

The week, derived. Jobs, commission and reimbursements per plumber: none of it stored, all of it rebuilt from the source rows. Completed weeks lock; the current one stays live. (Illustrative data, anonymized under NDA.)

Watch a week re-derive

Illustrative · not real data
Completed jobs · base pay$1,800
Materials checked off$0
Emergency restock$0
Commission (8%)$144
This week's payroll$1,944
Trigger a change
Every toggle re-derives the total from the lines above, the same way the real engine rebuilds a week from its source rows. Figures are illustrative placeholders.

If payroll were a stored total

  • A corrected invoice and the commission already shown drift apart
  • An archived or edited material keeps counting toward old pay
  • No way to prove which weekly number is the true one
  • Every fix risks nudging a finished week by hand

Payroll as a recalculation

  • Completed invoices are locked, so finished weeks can't move
  • Any week regenerates from its source rows on demand
  • A built-in audit trail: the math is always reproducible
  • Admin overrides sit cleanly on top of the computed numbers
From the build log

Half the trucks were still on the old version, and you can't make a plumber update.

The reality

The real world doesn't fit "one supplier visit per job," so jobs were refactored to carry multiple POs and reimbursements. But a field app can't assume anyone updates it: plenty of plumbers only open the app to log materials, and half the fleet was still running the previous build.

The fix

An API shim flattens the new many-to-many shape back into the old single-PO, single-reimbursement shape based on each client's version header. The new app gets the rich data; the old app keeps working untouched. Every API change since carries the same question by default: what does the old client see?

My guys actually use it. And at the end of the week, payroll just adds up.
Chen Plumbing logo OwnerChen Plumbing
Outcomes

One system the field actually uses, and numbers the office can stand behind.

A tool that gets picked up

A field-first app built plain enough that technicians reach for it on the job, replacing the manual lookups and paper a trade business usually runs on.

Payroll that reconciles

Every week is re-derived from its own jobs, materials, and restocks, with completed invoices locked, so a finished week is reproducible and can't quietly drift.

Built for the field's reality

Old and new app versions run side by side through a version-aware API, so no plumber is ever blocked by an update they didn't install.

Built by AppMakers USA for Chen Plumbing logo

Is your back office holding the business together by hand?

If the numbers that run your company live in spreadsheets and memory, you need software the field will actually use and an engine you can trust underneath it. We build that, and stay on to run it with you.

Get a Free Project Estimate

Copyright © 2026 AppMakers. All Rights Reserved
Follow us on socials: