← All scenarios

Worked example — Field service and inspections

Every new inspection template is an engineering ticket

Inspectors work from templates with conditional sections and photo evidence, the templates change constantly, and today each one is a release plus a set of screens.

The situation

An operations team owns a library of inspection templates — sections, sub-sections, repeating checks, photos against a failed item. Templates change with the standard being inspected, and each change currently means hand-rolled template JSON, brittle validation and a front end that breaks whenever a template moves. The inspections themselves need dispatching on a schedule, and somebody has to notice when one does not happen.

These are illustrative scenarios showing how the products are used, not customer case studies.

Build-versus-buy lens

What this helps you decide

Use the example to find where product configuration ends and custom code begins — and whether the boundary leaves your team with less infrastructure to own.

Model fit
Can the record shape evolve without coordinating a migration, API and UI release?
Workflow fit
Can approvals, exceptions and deadlines move out of application code without losing control?
Integration fit
Can your existing APIs become reusable steps with retries, throttling and visible run history?
Control fit
Can your team reconstruct model changes, workflow runs and human decisions later?

What gets modeled

The structure as it would actually be defined — sections that repeat are marked.

  • Inspectionrecord type
    • Sitechoice

      Options read live from Sites

    • Inspectorchoice

      Options read from your directory

    • Checksrepeating section
      • Itemtext
      • Resultchoice

        Pass, fail, not applicable

      • Photosimage upload

        Multi-file, size capped

      • Notelong text
  • Sitesrecord type
  • Templatesrecord type

    Saved as reusable structures

How it gets built

In the order somebody would actually do it. Each step names the capability it rests on, so it can be checked against the product pages.

  1. Build the first template by dragging

    Assemble the structure on a canvas from a palette of sections and fields, with a properties panel and validation as you build rather than after you save. When it is right, save it as a reusable template for the organization so the next one starts from it.

    What it uses: Drag-and-drop schema builder, with saved reusable structures

  2. Let the field decide how it renders

    Each field carries how it should be presented, so the inspector gets the right control without anyone writing form code — a photo uploader with permitted types and a size cap, a segmented choice for pass and fail, a long-text note.

    What it uses: Presentation type per field, including file and image upload widgets

  3. Give operations the screens, not a ticket

    Publishing produces the form and a table with server-side paging, typed filters and column selection, and each person keeps their own saved layout. The team that owns inspections maintains the site list and the template library themselves, within permissions, and every change is attributable.

    What it uses: Generated forms and tables, saved per-person layouts

  4. Put the schedule where it can be seen

    Dispatching runs as a scheduled trigger on a workflow: a cron expression, a fixed interval, or once at a set time. The schedule stops being a crontab on a host that somebody set up and left, and its runs show up where every other run does.

    What it uses: Schedule triggers, listed alongside every other run

  5. Route the failures, do not queue them

    A failed check starts a remediation run. The step re-reads the inspection first, so the routing is decided on the current state and not on the snapshot that triggered it. Conditions on the outgoing links then choose the path, and rework loops back to an earlier step. The loop carries a re-entry cap, so an inspection that keeps failing stops and says so instead of spinning.

    What it uses: Reading the record mid-run, conditional links, capped rework loops

  6. Ask the supervisor inside your own app

    Sign-off is a human decision step, and the inbox, decision panel and run timeline are ready-made components dropped into the operations interface. Supervisors approve where they already work rather than logging into a second product. Claims on a task are leased, so one opened and abandoned returns to the queue on its own.

    What it uses: Embeddable task inbox, decision panel and timeline

  7. Be told when it does not happen

    Notification on failure, timeout, a stalled run or a failure rate crossing a threshold is configured at the action, the step, the workflow or the connected system, with the most specific one winning. Failed steps retry on a widening backoff, and sweepers time out a run that overran.

    What it uses: Configured alerting, retry with backoff, and background sweepers

Numbers used above, and where they come from

Every figure on this site is counted from the product itself. Nothing here is a performance or customer claim, because there is no measurement to cite for one.

ways a field can be presented
43ways a field can be presentedCounted from egav/backend/app/api/v1/egav/schemas/ui_configuration.py — WidgetType
field types
9field typesCounted from egav/backend/app/api/v1/egav/schemas/entity_type_attribute.py — DataType

What changes

A new template ships without a migration or a release, the people who own inspections change them without an engineering ticket, and a scheduled job that stops running raises a notification instead of waiting to be noticed.

Written for Operations teams that own a process.

Evaluate it with your real model

Bring the awkward record, the exception-heavy workflow and the integration you do not want to own. We will make the configuration-versus-code boundary explicit.