Case Study — Novatr

From spreadsheets to a single source of truth

Rebuilding OMS: a v3.0 retrospective

Novatr's entire sales org, from a BDR on their first call to the VP of Sales, ran on a tool engineering had built with no product or design input. I led the rebuild that gave every one of five roles the exact view of the funnel they actually needed, in one place, replacing what used to take hours or days to piece together by hand.

Role
Product Design Manager, project lead
Collaborators
Product, Sales, Engineering
Company
Novatr
Sample tertiary link

Context

Novatr's entire sales org ran on a tool engineering built with no product or design input — slow, broken, and dependent on engineering for everything outside a handful of scenarios.

Process

We validated the need through interviews at every level of the sales hierarchy and shadowed live sales calls, then moved OMS from an engineering-owned utility to a product-owned one.

Solution

One shared dashboard and deal-list structure serves all five roles, scoped by who's logged in, plus a three-click drill-down from an org-wide dip to the one underperforming person.

Impact

Drop/dispose rate down 18%, turnaround for forms and offers down from 1–2 days to under an hour, and new-BDR training time down from 4 days to 3.

Retrospective

The ATL permission tier was invisible in reporting, EMI plans couldn't be edited once approved, and a filtering bug let summary counts drift out of sync — real friction the rebuild still needs to fix.

Reflection

The real fix was organizational as much as visual — moving OMS from engineering-owned to product-owned changed what questions we were even allowed to ask about it.

Cover art pending
OMS v3.0 rebuild dashboard showing Booked Revenue, the Sales Funnel ribbon, Revenue Realised, Conversion by course, and Deal Stages

v3.0 · in progress

See the rebuild, live

The current rebuild, moved onto a proper design system. So far it's the Sales Head dashboard — deals list, deal detail, and the offer wizard are still being ported. Toggle light/dark from the sidebar; it's a placeholder control while the theme is still being designed.

app.novatr-oms.internal/dashboard · v3.0
Loading prototype…

Sample data throughout is synthetic. Scroll and click inside the frame — it's the full app, just boxed in.

Problem facing

Questions

What was the state of things when you arrived?

Was this a design problem or an org problem?

Whose problem was it, the user's or the business's?

01Context

The tool already existed. The problem was who owned it.

Novatr teaches AEC professionals through three flagship courses, and sells almost all of them through a floor of BDRs. Before OMS, nobody could get a straight answer about that floor. Asking how it was tracking against target meant somebody assembling the answer by hand. That took hours, and on bad days it took days.

Sending an application form or rolling out an offer touched the CRM and two other teams, so every one of those added delay. And there was no way to see where leads were actually getting stuck.

OMS v1 was meant to fix all of that. It was built by the engineering team on its own, with no product or design input. It handled the handful of scenarios it had been specified for and broke outside them, so every new scenario turned into an engineering ticket. New BDRs needed retraining whenever the floor changed shape, and getting one thing done meant bouncing between HubSpot, OMS and WhatsApp.

That isn't a usability problem. It's an ownership problem.

A tool built to spec never gets asked why it feels slow to somebody in their first week. A product does. The real deliverable of this rebuild was moving OMS from engineering ownership to product ownership, and every design decision below was only available to us because that shift happened first.

Diagram comparing HubSpot's four-step flow, which converges into one deal record, against OMS v1's four steps scattering across a spreadsheet, inbox, and WhatsApp with no single owner.

The gap, drawn once. Left of the line, four steps converge into one record. Right of it, four steps scatter across three tools and cross over each other, so no tool owns a step and no step owns a tool. That crossing is what a BDR actually did all day, and it is why nobody could answer a question about the floor without assembling it by hand.

Stakeholder management · Research design

Questions

How do you get budget to rebuild something that technically already works?

Who had to be convinced, and what convinced them?

How did you know the problem was real rather than requested?

What did you personally contribute to the research?

02The Mandate

I didn't sell a redesign. I sold the cost of not knowing.

Three arguments, running at the same time, and none of them was "the tool is bad."

I made the cost of slowness visible. Not a critique of the interface. How many hours it took to answer a question as basic as how the floor was tracking against target, and what that delay cost in planning that never happened. It was a number leadership already cared about, attached to a cause they hadn't connected it to.

I let the pain come from the users. The Sales Head was the loudest voice on this and by far the most credible one. My job was getting that frustration into the room where budget gets decided, instead of letting it become a design team complaining about a design team problem.

I argued it into the roadmap. I sat in the product roadmap planning sessions, so the rebuild competed openly against other bets and won on merit. Internal tools usually get funded by being slipped through as maintenance, which is also why they usually stay half built.

Where the argument came from

None of that works without evidence, and the evidence is the part I'd defend as mine. Ved and Nikhil ran most of the sessions. What I did was design the enquiry: deciding which levels get asked what, and refusing to let the observation stop at the part of the funnel that's interesting to watch.

The Interview Ladder

Every level of the sales hierarchy, up to the Sales Head

The ladder was the point. Asking the same question at four altitudes shows you exactly where the answers stop agreeing, and that gap is where the real problem lives.

Live Call Shadowing

Sales calls observed, then followed past the interesting part

What happens after a lead is marked interested was the half nobody could describe secondhand. Insisting the team follow it there is what made the flows real instead of reported.

Roadmap Sessions

Repeated pressure testing in product planning

Not research, but it did the same job. The argument had to survive the people whose budget it was competing with.

Bar chart showing how much of the funnel each role could see: BDR 90%, Team Lead 55%, Team Manager 38%, Sales Head 8% — the blind spot grows toward the top of the hierarchy.

The same question, asked at four altitudes.

Everyone answered it, and no two people answered the same question. The bars are what mattered more: the further up the hierarchy, the less of your own remit you could actually see without somebody assembling it by hand. The Sales Head carried the widest responsibility and had the worst view of it. Percentages are illustrative, drawn from what each level described in interviews rather than from instrumentation.

Systems Thinking

Questions

Which decisions could only you have made?

What did you consider and reject?

You had a PM and a designer, so what was left for you?

03Decisions

Five decisions, made before anything was drawn.

Each one was cheap to make early and expensive to reverse late, which is my working definition of what a design manager should be spending attention on. The screens are Ved's. These are mine.

Design systems · Business literacy

Questions

Five permission tiers is a lot. Why not three?

Was this a systems decision, or a shortcut you're framing as one?

How did two designers ship a five-role product?

What did you have to learn about the business to design this?

04The System

Five roles, one component. Scope is a parameter, not a screen.

The floor had five tiers: BDR, Associate Team Lead, Team Lead, Team Manager, and the Sales Head who saw everything. The obvious brief was five dashboards, and that brief would have killed us.

What we built instead was one set of components, reused at every altitude, with only the data scope changing behind them. In v2.0 that meant one funnel-card component: four cards reading Applications Sent, Offers Shared, Converted, Payment Clearance. In the v3.0 rebuild that same principle produced a richer headline: a single flow diagram, one shape from Application through Offer, Payment and Completed, with the drop-off between every stage stamped directly on it. The four-card grid didn't disappear, it got demoted: it's now the scoped breakdown you see for one Team Manager's cohort or one BDR's own funnel, nested under the same headline shape everyone else sees.

The whole pipeline, as one shape. Applications, Offers, Payment and Completed, with the conversion between each stage read directly off the ribbon. Average Ticket Size sits in the corner of the same card. This is the answer to "how is the floor doing right now", and it doesn't need a second screen.

The brief from the Sales Head, restated in his own words months after launch, was that he wanted to look at this page once and know the health of the floor, where the pipeline actually was, where deals were stuck, and what payment was coming in.

Three more cards answer the parts the flow diagram can't.

Where deals are stuck, named per stage. Nine stages, each a bar sized by count. The two hatched bars are loss buckets, Payment Plan Pending and Rejected, so a stall reads differently from a stage that's simply early. This is the direct answer to "where are deals stuck", and it's a card, not a report someone has to run.

Payment incoming, and where it's leaking. Realised revenue splits into Previous Period and Total, so a Sales Head can see how much of today's cash is old commitments finally landing versus new ones. Beside it, conversion by course with a Lost Deals count folded into the same card, because "how is the floor doing" and "where are we losing people" are one question, not two.

Booked and Realised, drawn as a gap. Booked and Realised plotted as two lines across the month, rather than a single number — the space between them is the thing a Sales Head is actually watching. There's also a payment-mode breakdown by gateway, built as its own component, that isn't wired into any page yet. No screen has been designed for it. It exists ahead of its own UI slot, which is a more honest state for unfinished work to be in than pretending it isn't there.

Team performance, named per manager

Below the floor-wide numbers, every Team Manager gets a card that answers the same questions about their own team: a heatmap of every deal's health, colour by colour, gray when the card is collapsed and lit up the moment you expand it; a pending-actions count split by Applications, Offers and Payment; a unit sales attainment figure against target; and Booked, Realised and Average Ticket Size for that manager alone, each with its own change badge.

One manager, one card, four questions answered. The heatmap alone is one deal per square, colour-coded by the same status model as the drill-down below, so a Team Manager sees the shape of their book before reading a single number.

The Applications and Payments lists work the same way: same columns, same filters, different scope. Every altitude also carries the same Overview and Performance toggle. Overview shows the funnel breakdown, Performance swaps in four KPI tiles including Average Ticket Size. One toggle, learned once, meaning the same thing everywhere.

The drill-down is the piece I'd demo live. Clicking a Team Manager filters the Team Leads column to their reports. Clicking a Team Lead filters the BDRs column. Selecting a BDR populates a detail panel with that person's own funnel view, which is the same component again. A Sales Head goes from an org-wide revenue dip to the one person responsible in three clicks, without leaving the page or exporting anything.

Live, not a screenshot — click a Team Manager to see the Team Leads column filter, the way it would for a real Sales Head. The empty states carry the instruction, so the interaction teaches itself rather than needing a tooltip.

Open full prototype ↗

What I got wrong

The Associate Team Lead is a genuine, distinct permission tier, and it has no home in the reporting model. The admin drill-down runs Team Manager, Team Lead, BDR, straight past it.

So we shipped a role that could hold a deal but couldn't be reported on. That's an information architecture inconsistency, the IA was mine, and I missed it. The fix I'd take today is the smaller one: stop treating ATL as a tier and make it a flag on a BDR. One fewer level is worth more than fidelity to the org chart.

Information Design

Questions

Why this status model, and why do the tabs overlap?

What's the weakest part of this design?

05Status

Colour answers "whose move is it?", not "what stage is this?"

A deal has a stage and a sub-status. What it needed was a third thing the list could be read by at nine in the morning: am I the blocker? So colour got assigned to agency rather than to progress.

Blue · Waiting on the learner

Amber · Timed Out

Green · Moving

Red · Waiting On You

Grey · Global Status

Amber · timed out. Green · moving. Red badge · waiting on you. Grey · global status.

Deals list with color-coded status badges per row: green for Application New and Plan Created, blue for Application, Plan and Offer Pending stages, red for Action, and amber for Awaiting approval.

One glance tells a BDR what needs them. Application Pending is blue because the learner is holding the form. Offer Expired is amber because the deal is decaying quietly. Global Not Interested and Global Saved are grey because a deal can die at any stage. The globe icon flags an international lead, which changes both the currency and the gateway.

Deals list header and filter tab bar: breadcrumb Home / Deals, '157 Deals across the floor', and tabs reading Action Required 37, New 21, Application 37, Plan 11, Offer 21, Payment 43, Cancelled 1, Not interested 17, Rejected 6, Saved 5.

The tabs deliberately overlap. Action Required isn't a bucket, it's a filter across every red-badged status in the funnel, which is why the counts don't add up to 157. A BDR opening OMS isn't asking what's in stage three. They're asking what their Team Lead will bring up at standup. I'd defend the overlap. What I wouldn't defend is that we never made it legible, so a new BDR has to be told.

Open The Deals List ↗

The bug that shipped

Filtering the list didn't recompute the tab counts above it. Filters ran over the list, and the counts were computed against the unfiltered query. So the page could show you nine deals under a tab reading forty-one.

We knew about it. It never beat anything else on the list. It's small, and it quietly erodes trust in every other number on a page whose entire job is telling you the truth about your pipeline. That's the argument I should have made at the time and didn't. It's the first thing the v3.0 prototype fixes.

Craft · Error prevention

Questions

Show me one screen you're proud of, and why.

How did you handle errors and irreversible actions?

Who did your business rules protect, and who did they annoy?

06The Offer Flow

Don't make anyone do the math by hand.

Building an offer is the one moment in this product where a mistake is expensive, customer facing and effectively irreversible. Almost every decision in the two-step wizard is a refusal to let an error escape.

Step one is the payment plan. The BDR picks a payment type, upfront, part payment, or EMI through a third party, then picks discounts from a fixed menu: Early Bird, Merit, Super Merit (locked behind Sales Ops approval), or a custom amount capped to that deal's fee. Nothing is typed free-hand. Course Fee minus Total Discount resolves to one number, Net Payable Fee, and the system builds the instalments itself: a fixed downpayment, then the remainder split evenly across the tenure the BDR picked, with the last instalment quietly absorbing whatever rupee the division left over. There is nothing for the BDR to total, because there is no longer a manual total to get wrong.

An earlier version of this screen worked the other way around: the BDR typed each instalment by hand against a live Amount Left counter and couldn't proceed until it hit zero. It shipped, and it worked, but it was still asking a person to check arithmetic a computer should own. Once the discount tiers existed as rules rather than free text, generating the instalments automatically was the smaller change, and the counter came out.

Discount selection list: Early Bird Offer (unavailable), Merit Scholarship (available, checked), Super Merit Scholarship (approval required), and a Custom BDR Discount field with an Apply Discount button.Fee breakdown showing Course Fees, Total Discount and Net Payable Fee, above four instalment cards (Downpayment, 1st, 2nd and 3rd Instalment) each stamped with a Razorpay logo and due dates.

Net Payable splits evenly across the tenure, and the last instalment takes whatever the division didn't divide cleanly. Nobody has to notice that, let alone fix it.

Step two is the letter. Three named templates, an acceptance deadline, and a live preview of the actual email with the scholarship amount rendering through its merge tag as the BDR types. The failure it prevents is an offer reaching a paying customer with the wrong discount in it.

Milestones rail: Application (completed, all three substages checked), Offer (in progress, Payment Plan Created ongoing), and Payment & Enrolment (pending).Activity log: a reverse-chronological list of timestamped entries including Application filled, Deal Assigned to Angad Saini, Deal Reopened, Deal Marked Not Interested, with a free-text reason on the most recent reassignment.Candidate application form: Basic Information (name Dhruv Bhatt, phone, email, city, state, country) and Professional Details (current role, experience, English proficiency, income band, tools: AutoCAD, Revit, Rhinoceros 3D).Deal detail panel: View On HubSpot and Chat On WhatsApp buttons, a Global Status row (Not Interested, Mark Reject, Save for Later), and an Assignment list naming the LC, TL and TM.

Two histories, on purpose. Milestones answer "where is this deal". The activity log answers "who did what, and why". Read the log entries below: the free-text reasons are what a BDR actually typed. Nobody asked for that field. It became the most-read thing on the page.

Enrolment, the fourth and final milestone, is a real screen, not just a label at the end of the flow diagram. It stays locked until the first payment clears, then opens to the specifics that actually matter at handover: the applicant's name, who their admission counsellor is, their application and LMS IDs, and their first session date. Small screen, but it's the one that answers "is this actually a student yet", and it didn't exist as its own thing before this rebuild.

People leadership

Questions

How did you divide the work, and what did you delegate?

How did you develop the designer on this project?

What did that way of working cost?

07Leading It

I did both jobs. That was the strength and the bottleneck.

On this project the line between product management and design leadership was blurry, and I made most of the product calls myself: sequencing, scope, and the definitions in section 03. That's the honest version of my role, and it's why those decisions are mine to defend rather than ours to share.

The cost was that I became the bottleneck. Decisions queued behind me, because I was the only person holding the whole picture at once: the floor's workflow, the reporting model, and the roadmap argument.

On a team of three that was survivable, and probably faster than splitting the roles would have been. At ten people it's the failure mode. Knowing which of those two situations I'm in is most of what I'd do differently at the next scale.

On delegation. I was hands-on early, doing the information architecture, the structure and the first wireframes, and then handed the execution surface to Ved entirely. He built out states for every frame and component and led the handover to engineering. After that point my review was deliberately narrow. I reviewed against the flows and the IA, not against my own taste.

Measurement

Questions

What was the impact, and how do you know?

“100% adoption” of a mandatory tool isn't a metric.

What's the honest attribution here?

08Impact

Four numbers I'll stand behind, and three I won't.

< 1 hour

was 1–2 days

Turnaround on sending an application form or rolling out an offer

18%

lead drop / dispose rate

Leads dropped or disposed after the rebuild

4 → 3 days

new BDR training

Onboarding time for a new BDR, with fewer follow-up questions after

4.2/5

+25% on previous tooling

Internal NPS across the sales floor

The team also recorded 100% adoption, and cited roughly 30% more revenue in a quarter as indirect impact. I don't put those on a page as results. Adoption of a tool the job requires you to use measures the mandate. Daily actives on a tool people live in tracks headcount and rollout. And I'm not going to claim a design tripled revenue, because the courses, the pricing and the market did that. What this work plausibly did was take friction and leakage out of a funnel that was already converting, which is a smaller claim and a defensible one.

The more useful answer is what I'd instrument if I ran it again, because that's the part I got wrong. We built a measurement product for a sales floor and shipped no measurement of ourselves. Every row below names the decision it tests. If no decision moves a number, the number is decoration.

What I'd MeasureWhat It provesBefore*After*
Median time, pitch to offer sentThe last mile got shorter, which is the core promise1d4h52m
Deals waiting on a BDR over 48hLeak rate. The red-badge logic either works or it doesn't31%12%
Offers revised within 24h of sendingError rate, and the direct test of Amount Left and the live preview16%5%
Time to build a part-payment planWhether the wizard beat the spreadsheet it replaced10m2m
Realised-to-booked ratio at day 30Collection health, which is what the Booked and Realised split exists to expose34%52%
Manager hours per week assembling reportsThe original ask, answered honestly~5h~25m
Share of deal actions taken inside OMSThe honest replacement for "100% adoption"n/a88%

*Placeholder/Illustrative Numbers

Every figure in that table is illustrative. It's there to show which measures would make this work defensible, not to imply they were captured. I'd rather show you the measurement I should have designed than quote a real-sounding number I can't source.

Prioritisation · Self-awareness

Questions

What would you do differently?

What did you cut, and what did that cost?

What's still broken?

How would you build this today?

09Reflection

I sequenced for the people funding it, not the people using it.

Sequencing ran on two axes, and I'd keep one of them.

The one I'd keep. Anything that took days by hand got built first. Sending an application form and rolling out an offer were one-to-two-day waits touching three teams. Ordering by turnaround-time pain is clean, it's defensible, and it produced the sub-hour result above.

The one I'd argue with myself about. Dashboards shipped ahead of workflow depth, because leadership's pain was the loudest. The Content module and the secondary nav areas were cut outright to make that possible.

It was right for keeping the project alive. Visibility is what got it funded, and a rebuild that dies in month two helps nobody. But it means the people inside this product eight hours a day got served second.

The BDRs watched the tool get better at measuring them before it got better at helping them, and I don't think that's a neutral thing to do to a sales floor you're simultaneously asking to trust the numbers.

If I ran it again I'd interleave instead of stacking. One workflow improvement shipped alongside every dashboard milestone. Same total scope, same funding argument, but the daily users are never more than one release away from something built for them.

And if I built it in 2026

The nine-field filter modal becomes a sentence. The deals list is a query and we built a form for it, then shipped a bug where the counts didn't follow. Today I'd put natural language over the same query, something like "every deal where the offer expired and nobody has called since", and let the filter chips be the result of the sentence rather than the way you compose it.

The drill-down gets prototyped in code on day one. A cascading interaction is genuinely hard to judge as static frames, and we judged it as static frames. A working prototype in a day would have surfaced the ATL gap immediately, because you can't click a tier that isn't there. Building this prototype years later is the same instinct. I wanted to click through the direction before writing about it, and where it didn't hold up I'd rather find that out here than after an engineering team had built it.