Control Tower 2.0 / Internal operations platform / Retool → React migration / Case study
Product design · IA & interactionControl Tower is the internal platform every Ritchie Bros. support team uses to move a transaction from auction to payment to released asset. I audited 51 real support actions, consolidated six fragmented tools into one Unified Customer Record, and led product definition and design through to moderated user testing and engineering handoff — including the strategy shift from a big-bang launch to a blended, replace-as-you-go rollout.
Ritchie Bros. runs one of the world's largest marketplaces for heavy industrial equipment. Behind every sale is a chain of people making sure it completes: Customer Care Agents answering buyer and seller questions, CSMs managing relationships, Fin Ops reconciling money, Lien Specialists clearing titles.
Each of them lives in Control Tower — the internal tool that lets them see and act on what's happening across an account. The name is the right metaphor: like air-traffic control, the job is keeping many moving things coordinated and intervening at exactly the right moment.
This project was the 2.0: a migration off a low-code Retool build onto a purpose-built React application — and the chance to fix the structure, not just the surface, before the Retool contract ran out.
The Retool version had been built feature-by-feature, in response to whatever request came in next. It worked — but the structure underneath had never been designed, and the customer had been split across six separate tools. The cost showed up in the day-to-day:
One customer, six tools. Resolving a single issue meant hopping between disconnected tools, each holding one piece of the picture and none holding the whole.
The same data, re-entered and re-found. Contact details, registrations, and notes lived in multiple tools at once — with no guarantee they agreed.
Built for no one in particular. A Fin Ops reconciliation and a Care Agent's quick lookup were served by the same flat, undifferentiated interface.
No shared patterns. Similar actions behaved differently depending on where you found them, so the tool had to be re-learned screen by screen.
The product question needed an owner. Through discovery and definition, I took on the PM function alongside design — setting requirements and deciding "what should this even be" so the work had a home from day one.
As the designer who was also setting the requirements, I could have started sketching layouts. Instead I started with an audit. I went through the support teams' standard operating procedures and eLearning courses and pulled out every discrete thing a user actually does in the platform — 51 distinct actions in all.
Each action was mapped to the roles that perform it, the data it touches, and the legacy tool it currently lived in. That library became the source of truth for everything that followed: the platform's structure fell out of the work instead of being imposed on it — and it exposed just how much of the "six tools" was really one job, scattered.
Catalogued every discrete action available in Control Tower today, straight from the SOPs and eLearning material the teams actually train on.
Clustered related actions into capability areas — account management, financial transactions, asset & pickup — to find the natural seams.
Matched every action to the user types that actually perform it, from search-first Care Agents to queue-only Approvers.
The audit's clearest finding: most of those tools were views of the same customer. So the centerpiece of the new architecture is the Unified Customer Record — search once, and get the whole account in a single, navigable place. Every legacy capability was mapped to its new home at the action level, so nothing is lost in the move and nothing has to be built twice.
One search, the full account. A three-layer page — sticky identity header, section navigation, scrolling content — so the user never loses whose account they're in, no matter how deep they go.
Role-specific landing. What a Care Agent needs first is not what Fin Ops needs.
The work queue — where a support user's day begins, and incoming items get triaged.
The flagship surface. Six tools' worth of customer context, one searchable record.
Shared by Fin Ops and support, organized into task-scoped subsections.
Everything tied to the equipment itself, from the support side of the lifecycle.
Corrections and exceptions, with approval as an access level, not a separate role.
The original mandate was a big-bang launch: rebuild everything, then cut over in one move. As the architecture took shape, I pushed a different conversation — about risk, about the Retool contract clock, and about what support teams could actually absorb.
The outcome was a blended experience: CT 2.0 replaces the highest-traffic legacy tools first, inside the platform users already work in, while the rest follows on the same architecture. Because every capability had already been mapped in the audit, re-sequencing the rollout cost nothing — the structure was built to be released in slices.
Full parity across every legacy tool before anyone touches the new platform. Maximum build time before any user feedback, maximum cutover risk, and every month on Retool still on the bill.
The first release replaces three legacy tools outright — the surfaces support touches most, rebuilt with full capability parity plus the redesigned search:
Why this mattered beyond the schedule: shipping a real slice early means the design system, search model, and record structure get validated by daily use before the remaining tools migrate onto them — so the foundation is proven, not projected.
Search and the Account tab are the front door of the UCR — the surfaces every role touches on nearly every task. They're where the six-to-one consolidation stops being an architecture diagram and becomes something a Care Agent feels on the next call.
Every state designed — from first keystroke to "no customers found."
One field, scoped by chips — email, name + company, sale #, buyer #, owner code. The scope makes the query unambiguous before it's run, instead of guessing at intent afterward.
Numeric identifiers are the ambiguity hot spot: a sale number can mean the sale, its buyers, or its sellers. Search resolves this inline — surfacing "buyers in this sale" and "sellers in this sale" as distinct, labeled result groups instead of a flat mixed list.
Names and companies match forgivingly; identifiers match exactly. The user gets speed on the human fields and certainty on the system ones — which is what pulling up the right customer under time pressure requires.
"No customers found" is a designed moment with a clear next step, not a dead end — and success, error, empty, and business-rule states are specified for every flow so engineering never has to invent one.
Everything Account Support and Event Registration Support did — reorganized around the customer instead of the tool.
One person can act for several organizations. The record models that directly — organizations, contacts, and cautions per org — with a persistent scope chip that filters the whole record to one org without losing the person.
Event registrations live on the account with bidding details, deposits, limits, and cautions inline — grouped by organization, so "why is this bidder blocked" is answered on the same screen that can fix it.
Edit contact, register to sale, add to account — every action opens in a consistent drawer or focused dialog, with modals reserved for high-consequence confirmations. One pattern to learn, everywhere.
Terms & Conditions history, edit provenance, and activity share one shared audit pattern — so trust in the record is built into the structure, not bolted on per feature.
The surfaces handed to the development team, refined through prototype testing and design reviews.
The account surface resolved into dedicated tabs — Organizations, Registration, Lots, Invoices, Payments, Notes & Activity, T&C — each carrying its legacy capability set forward under the same persistent identity header.
Grouped column headers, configurable table settings, bulk selection, and running totals — the richer search, sort, and filtering the Retool build could never support becomes standard across every tab.
Better for the people in the tool. Cheaper for the business running it.
The designs were pressure-tested continuously on the way here — director-level architecture reviews, working sessions with engineering, and interactive HTML prototypes with real data in front of support team members. Then came the formal round: seven moderated, task-based sessions with a mix of Customer Care and CSM team members, run against the interactive prototype.
Observed, not told. Rather than pitching the benefits of the new tool, participants worked through real tasks — finding customers across identifier types, registration and caution scenarios, org-scoped workflows — while we watched what worked, what confused, and what they'd change. The synthesis traveled with the designs into the engineering handoff, so the build scope reflects what real users did, not what we hoped they'd do.
With testing complete, I brought the results and the refined Unified Customer Record to the development team — a working session to align scope, surface open questions, and set build sequencing ahead of the formal handoff at the end of August.
Phase 1 ships to the support org first: Search, the Account surfaces, Event Registration, and Notes replace their legacy tools outright, while Finance and Operations continue on today's tools until their sections migrate onto the same architecture — the blended rollout, exactly as designed.
Control Tower 2.0 is the first initiative of a larger ambition: a unified back office — one coherent experience across the internal tools that run the business. And it establishes the operating model for getting there: design sets the experience, and the design foundation, before the tools are built.
The audit method, the record structure, the search model, and the pattern language weren't made for one platform. They're the foundation every internal tool that follows will inherit — which is exactly why getting this first one structurally right mattered more than shipping it fast.
One way to find a customer, one record to act on — a mental model that holds across tools, so moving between them stops costing context.
Patterns, semantics & states as shared infrastructure — drawers, audit trails, the five-color semantic system, and specified states, reusable by every team that builds next.
Audit the work, then architect — a repeatable, evidence-first way to consolidate any cluster of internal tools without losing a single capability.
The thing I'm proudest of isn't a screen — it's that the structure holds up under change. When the mandate flipped from "ship it all at once" to a blended rollout, nothing had to be redesigned; the audit-driven architecture was already built to release in slices. That's the payoff of starting with the work instead of the screens.
Taking on the PM function through discovery and definition meant owning the product question as well as the design one — what this should be, when it should ship, and what it sets up next, with product management picking up the delivery-to-production handoff. Steering the rollout strategy, not just the interface, is the part of this work I most want to keep doing.