The settings are the product

The difference between two shops is data

A plumbing shop in Lancaster and a commercial electrical contractor working thirty states need different zones, different job codes, different statuses, different fields on a site and a different idea of what “done” means.

In most software that difference is a support ticket, a custom build or a column somebody was told to use for something else. Here it is configuration — and the rule that keeps it honest is that no platform behavior is allowed to depend on what you called anything.

Code branches on a flag, never on a name. So you can rename “Parts Ordered” to “Waiting on Supply” on a Tuesday afternoon and every report still works.

This is not a module you buy. It is the configuration underneath whichever ones you do take — and it is why two shops running the same modules do not run the same product.

A zone is a profit center

Not a map color. A zone owns a team — a dispatcher, a billing clerk, a fleet of techs — and a timezone, and it is the unit the business measures profit in.

Departments cut across zones. Everybody has plumbing; not everybody is in Austin. Neither dimension nests inside the other, and software that makes one a child of the other cannot describe a real company for long.

Geography in, correct queue out

A job arriving over the API from a national broker — a site in South Carolina, nobody on the phone — lands in the right team’s unassigned column on its own, resolved from postal geography. No human triage, no morning pile.

The zone is stamped, not joined

On the site and on the job, as a value. A territory realignment next year must not rewrite which team did last year’s work.

And the timezone travels with it

Every instant is stored UTC, and anything promised also keeps its local wall clock — because “Tuesday 8 AM” has to survive a daylight-saving rule change.

The zones setup screen: each zone with its own code, team, timezone and the postal geography that resolves to it.

Zones, each with its own team and its own clock.

A queue is a person

The dispatch board has two kinds of column — technicians, and buckets like Unassigned, Parts Ordered, Estimating, Subcontractor, Long Lead Time.

They are the same kind of row. A bucket is an employee record carrying a flag. One table, one assignment, one foreign key, one history — and an admin can create a new queue without anybody shipping a release.

The people list showing technicians and board queues together, with the flag that distinguishes a queue from a person.

Technicians and queues in one list, because to the board they are one kind of thing.

That is not a modelling curiosity. It is why a job sitting in Parts Ordered can run the parts counter’s checklist — the board is not a status display, it is a queue per assignee, and every queue can carry its own procedure.

Boards themselves are saved filter sets, and there are as many as you want: North West Team, Service and Install, Inspections. Same data, different lenses, each with its own columns in its own order.

Every list the rest of the product chooses from

One screen, and it is longer than most products’ entire settings area.

The definitions index: zones, departments, work codes, crews, visit statuses, commitment plans, numbering, tax codes, pricing, note templates, boards and custom fields.

The vocabularies this company runs on.

🔄

Visit statuses — and you can add your own

Pending, Traveling, Arrived, Working, Complete ship in the box. Add Waiting on Access if that is a real state in your business. Each one declares what it stamps, so adding one is a row, not a rewrite.

🏷

Work codes, and duration in minutes

Always minutes, never a number that might be hours. That ambiguity is a real defect in real systems and it quietly wrecks every capacity estimate built on top of it.

🔢

Numbering you control

Prefix, width and reset period are columns, not the length of a string somebody typed. Import your existing numbers verbatim — staff say them aloud daily and you can never renumber.

🧾

Tax, split the way it actually works

Jurisdiction and rate belong to the place. Exemption, certificate and expiry belong to who pays. Most systems put both on the site and then cannot explain the exemption.

📝

Note templates, in sections

Parts, billing, dispatchers, CSRs — role-scoped sections instead of one memo field everybody fights over and smashes structure into.

💰

Rate cards and price books

Per customer relationship, not per site — because a credit hold and a negotiated rate belong to the account, and 142 shared addresses in one real dataset had a restricted customer next to a good one.

Custom fields on anything

A plumber needs Backflow Device Serial on a site. An HVAC shop has never heard of it and needs refrigerant charge on a rooftop unit. A courier needs neither.

That is the difference between a plumber, an HVAC shop and a courier — and it is a field you add on a Tuesday, not a release we ship in March.

Declared on the thing, not floating

A field is declared against a real record — a site, a unit, a customer, a job. It can extend the product; it can never replace it. That boundary is the whole reason this does not turn into a spreadsheet with a login.

For equipment, it hangs off the TYPE

Every rooftop unit shares one set of attributes; a backflow device shares another. Declare it per unit and the four-hundredth one at a site quietly disagrees with the first 399, and no report ever recovers.

Real columns, so you can actually use them

A number is stored as a number. So you can sort it, filter a range, trend it across four years of visits and pull it into your own reporting. A field you cannot reach is a field we are hiding from you.

And a checklist writes into them

A step asks for the refrigerant charge and the answer lands on the unit — so next year’s technician opens it already knowing what normal looked like.

The custom fields screen: fields declared against records like site, equipment type and customer, each with a data type and a group.

Custom fields, grouped, declared against a real record.

Who may actually do what

Roles are bits, not a job title, so one person can be a dispatcher and a buyer without anybody inventing a hybrid role. And the check happens in the one place every door passes through — a rule enforced only in a screen is bypassed by one curl.

The roles screen showing each role and the capabilities it grants across the platform.

Every role, and exactly what it opens.

And an irreversible act asks for authority rather than courage. Hold the role and it just happens. Do not, and somebody who does can approve that single act with a code — one code, one delete. So you can stop handing out permanent destructive access to five people and hope.

The prompt names the thing and its blast radius, because an approval code proves somebody was present, not that they understood. “Delete CBRE Facilities Management. 14 sites and 212 jobs reference it.”