LinnoEdge

LinnoEdge
Back to Works
Works — BtoB SaaS Development

If you can't see it,
you can't move it.

KPI Monitoring Dashboard for Outbound Sales Teams (SDR)

Outbound Sales SaaS Next.js TypeScript PostgreSQL Scope Management
32 days
dev man-days for
KPI monitoring screens (after scope refinement)
4 axes
real-time visibility across
team, campaign, rep, and day
2.5 sec
SLA target set by design,
achieved through SQL optimization
Context

The numbers existed.
They just weren't visible.

Outbound sales teams — SDRs and appointment setters — generate hundreds of call records every day. Dials made, appointments booked, conversion rates by campaign: the data is there.

The problem is that none of it is actually visible.

Managers open Excel and manually aggregate today's figures. Reps head into the next call without knowing where they stand on their targets. "Who is at what percentage on which campaign right now?" — the need to answer that question instantly is universal across outbound sales organizations.

The numbers existed. They just weren't visible.

Challenge

A "simple request" that stalls
for a week — by design

The client's outbound sales operation was growing fast. More reps, more campaigns, more fragmented goal-tracking. The ask: one system that shows both the team-wide picture and the individual rep's live status on any given campaign.

The second challenge was structural. The supply chain ran client → prime contractor → two intermediary firms → Linnoedge. In that four-company chain, confirming a single requirement change means running it through multiple approval layers. A "simple addition" becomes a week-long stall. The project needed a communication design that kept development moving inside that structure — not despite it.

Craft

The engineering decisions
behind the dashboard

The design started from one constraint: it had to feel fast, wherever you opened it.

Outbound reps check the dashboard between calls. If it takes more than 2.5 seconds, it's effectively unusable — they'll stop checking. We set a 2.5-second SLA from day one and made SQL query optimization the top technical priority.

During development, response time climbed to 2.69 seconds. A 0.19-second gap that meant SLA failure. Index restructuring, query decomposition, cache strategy redesign — the last mile from "it works" to "it's usable" was a pure engineering grind.

Deciding what not to build

The hardest call on this project wasn't technical. It was deciding what to cut.

The original scope included cross-tabulation: a matrix view combining campaign axis and rep axis. Useful feature on paper. But the implementation cost was high, and the risk against a May end-of-month delivery was too great. The team deliberated and pulled cross-tabulation out of scope. "Deliver what's actually needed, reliably" — that decision kept the project moving. The feature can come back in a future phase.

Individual Rep

Where am I today —
answered in 10 seconds

The "Rep" and "Day" tabs give each appointment setter an instant read: how many calls today, how many appointments booked, and what percentage of their campaign target they've hit. The entire "where do I stand right now" check takes 10 seconds — enough time between calls to refocus and move forward.

Manager

The Excel aggregation
is gone

The "Team" tab shows the full team's daily progress at a glance. The "Campaign" tab reveals which campaigns are overloaded on hours and which are falling short of target rate. The time managers used to spend on weekly Excel aggregation simply disappears.

Leadership & Full Team

30 days of momentum,
one screen

The "Day" tab's monthly trend view shows daily appointment counts for the past 30 days alongside the team's month-to-date ranking — all on one screen. "How did the team move this month?" becomes a number, not a meeting. Monthly reports can be exported directly from the view.

Change

Before → After, in numbers

BeforeAfter
KPI trackingManual Excel updates and aggregationReal-time dashboard reference
Rep self-checkHad to ask a managerOpens own tab, instant answer
Campaign load imbalanceNot visible until the weekly meetingAnytime via "Campaign" tab
Response timeNo standard setSQL-optimized to SLA ≤2.5 sec

"Because the scope decisions were so clear, we always knew what to prioritize." When teams can see the numbers, the way they work starts to shift on its own.

Sales Operations Lead

B2B services company, Japan — outbound sales team, 20+ reps

Tech Stack

Technologies used

Next.js Next UI Pro TypeScript PostgreSQL Tailwind CSS

Built something similar to what you need?

Let's talk about your version of this.

30 minutes. No cost. Comes with a written next-step summary.