
Designing an algorithmic routing engine for scale for Up Support
My role
Product design lead
The working team
Product manager who was also a support team SME, team of 3-4 engineers
Project duration
About 6 months
The Up digital banking platform manages customer support via a proprietary, in-house chat system. As the operations team scaled five-fold, the original First-In, First-Out (FIFO) queue primitive began to crack. To cope, the team introduces manual triage “buckets,” which quickly created scheduling bottlenecks, high resource volatility, and SLA vulnerabilities.
Instead of treating this as a typical UX/UI problem, I approached it as a resource allocation and multi-variable logic challenge. I redesigned the routing mechanics from the data tier outward, mapping conversation properties against agent capabilities to automate optimal chat assignment.
Discovery: The breakdown of flat queues
The temporary patch of using manual “buckets” to sort incoming chats was operationally unsustainable. My discovery phase focused on analysing why these buckets existed by sorting and categorising the underlying operational triggers.
I identified the core system failures:
Resource imbalance: high fluctuations in specific bucket volumes made manual staff rostering unmanageably complex.
SLA bottlenecks: high-priority or urgent chats triaged into dedicated buckets often experienced disproportionate backlogs, defeating the purpose of the priority status.
I realised that if we extracted conversation attributes as structured data properties, we could factor them directly into an automated prioritisation and assignment matrix. We could completely bypass manual triage.

Data design
To replace manual sorting, I audited internal operational guidelines, SLAs, training documentation, and onboarding schedules to extract the necessary structural variables. I translated these qualitative constraints into system data representations:
SLA time-to-Expiry (time-series metric): calculating the minutes remaining before an operational or legal SLA threshold would be breached.
Customer tier flags (account metadata): high-priority indicators attached to the user profile.
Core domain categories (topic schema): defining the specific technical or financial domain of the inquiry.
Agent capability matrices (permission primitives): mapping an agent’s specific onboarding stage, training level, and sub-team specialisation.

At this point I defined the design problem more specifically:
How can we combine this information so that we make sure chats are answered in priority order as much as possible, but only assigning chats to agents who can answer them?
Logic design: The three-stage routing architecture
The core unit of design for this project was an invisible, automated state machine. I remodelled the operational pipeline into three distinct logical stages:
Categorisation (data ingestion): The incoming chat payload is categorised—initially via structured manual triage parameters, with an architectural foundation designed to cleanly transition to machine learning-driven auto-classification.
Prioritisation (the sorting state machine): Chats are dynamically sorted in real time using a multi-layered logic stack:
SLA urgency: sorted by the lowest number of minutes remaining until an SLA breach.
Account status: secondary sort by account priority flags.
Chronology: tertiary sort by oldest absolute wait time.
Assignment (matrix matching): When an operational agent requests a task by clicking “Give me a chat,” the system executes a real-time matrix match. It parses the prioritised list and automatically assigns the highest-priority chat whose domain category matches that specific agent’s capability matrix.

UX/UI design: Economical expressions of logic
Because the core value of this release lived entirely within the backend prioritisation engine, the customer-facing interface required zero changes.
Instead of redesigning the conversation screens, I focused layout cycles entirely on the internal administrative interfaces. I designed clean, low-fidelity configuration screens that allowed operations managers to seamlessly adjust category properties, map system variables, and manage agent capability profiles. The UI was treated strictly as a functional dashboard to monitor and calibrate the underlying data models.

Delivery & outcomes
Operating as the product design lead alongside a lean team of 3–4 engineers, I delivered comprehensive system logic specifications and annotated logic state trees to guide the build.
The architecture went live in April 2025 and completely eliminated manual triage overhead. By shifting the design focus from the screen to the routing primitive, the platform achieved automated, deterministic resource allocation capable of scaling seamlessly with the bank’s operational growth.