[ Case study ]
Sales reps visited garden centers with paper catalogs and hand-written orders keyed in back at the office; availability was wrong by the time orders arrived, substitutions were negotiated by phone, and peak season drowned the office in transcription.
CLIENT a wholesale plant nursery serving garden centers across three states — FOCUS Availability as a first-class citizen
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
Wholesale horticulture has a season that forgives nothing: from early spring to late spring this nursery ships bedding plants and perennials to garden centers across three states, and availability changes daily with weather and germination reality. Sales reps cover their territories with paper catalogs and hand-written order sheets, keyed in at the office by someone else days later. The order system is a legacy desktop package whose only integration point is a watched folder it monitors for import files.
Sales reps visited garden centers with paper catalogs and hand-written orders keyed in back at the office; availability was wrong by the time orders arrived, substitutions were negotiated by phone, and peak season drowned the office in transcription.
We proposed an offline-first Flutter app that makes availability a first-class citizen: reps order against today's numbers, see substitution suggestions the moment a lot runs short, and work in greenhouses where gloves, glare, and dirt are the operating conditions. Orders export in the legacy package's import format to its watched folder, so the desktop system stays the record without a migration. Handsets are deliberately cheap and replaceable, with cloud backup doing the durability work fragile hardware cannot.
Just as important is what we ruled out, and why:
The catalog is availability-aware: reps order against today's numbers with substitution suggestions when a lot runs short, so phone negotiations mostly disappear.
Glove-friendly inputs, sunlight-readable contrast, and a device policy of cheap replaceable handsets with cloud backup.
Orders export in the legacy package's import format to its watched folder, making the desktop system's constraint a small bridge instead of a migration.
Delivered by the systems pod — engineer + automation specialist over 7 weeks, with working increments reviewed with the client every week.
Obstacle
Reps' handsets mangled the special characters in plant names — apostrophes and accented cultivar codes corrupted between greenhouse capture and sync, and the watched-folder importer dropped those orders silently; the office found out from a garden center's missing shipment.
Handled: We added an encoding-normalization pass at capture, then routed anything that still failed into a quarantine queue a person reviews each morning instead of letting the import reject it silently; the confirmation report shows every order confirmed in, held for review, or flagged out by 8am.
Obstacle
The greenhouse environment won early: two pilot handsets quit in the first hot weeks — heat swelling and a moisture short — and the most senior rep, on a seniority-ordered rollout, hit the failures at peak season.
Handled: We moved hardware policy to cheap, swappable handsets with cloud backup and a car-cradle ordering flow for the hottest stops, and resequenced rollout by territory readiness rather than seniority.
The headline: all reps ordering in-app across the season, keyed into the legacy system via the automated bridge — Paper orders → in-field app orders, read from Order-entry timestamps. A second check: order-substitution phone calls during peak weeks at −70%.
The office's peak-season transcription bench disappeared; orders arrive keyed and coded before the rep leaves the parking lot, and the legacy package imports them without a human between. Availability conversations moved from post-hoc apology to in-app substitution — garden centers choose the alternative from the same screen, so the negotiation happens once, with data. The most senior rep, last to adopt and loudest about it, became the one who shows the app to visiting buyers. Nobody misses the paper catalog, including the person who maintained it.
The result was read from Order-entry timestamps against the pre-engagement baseline over the stated window, with a guardrail check on order-substitution phone calls during peak weeks. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would rollout region by region instead of by seniority — the most senior reps adopted last, and sequencing by seniority put the hardest skeptics in the same weeks as peak season.
[ Related service ]
[ Related builds ]
Plastic cards Wallet passesAll active memberships issued as Wallet passes over the first renewal season, with gate scan time logged by the ticketing system
62% 89%Share of digital tickets validated offline-capable at first launch of the trial season, read from the operator's validation logs
[ Next step ]
Next case study