Case Study

Skan.ai - Participant Clickstream

Separating time from structure in an enterprise session replay tool

Company
Skan.ai (self-directed design assessment)
Role
Product Designer (sole designer on the project)
Scope
Domain research, competitive analysis, persona, information architecture, interaction design, UI, design system
Tools
Figma, FigJam, Figma Prototyping
Deliverables
6 screens, 3 edge cases, 3 flows, 15 component sets, 61 bound variables
Playback runs, an event gets clicked, and the two cursors separate. Everything on this page is built around keeping those two positions readable at the same time.

01  |  At a Glance

342
events in one session, and one of them explains the delay
6 → 2
hierarchy levels reduced to two questions the screen answers on its own
2
independent cursors, so playback and inspection never get confused
61
bound variables. Nothing on any screen is a hardcoded value
  • What was wrong. Raw clicks and business steps looked identical in one flat list, so on a long session an analyst lost track of both where they were and what they were looking at.
  • What I did. Split the interface into time and structure, gave each one an anchor that never moves, and kept the two in sync.
  • Where it ended up. Six screens, three edge cases and three flows, built so that reaching a timestamped piece of evidence takes two clicks rather than a scroll through 342 rows.

02  |  Project Overview

Skan.ai is a process intelligence platform. It sits on enterprise desktops and records how people actually work across SAP, Salesforce and ServiceNow, then turns that raw capture into a picture of how a business process really runs.

Participant Clickstream is the forensic end of that platform. An analyst opens one recorded session, replays it, and inspects the exact sequence of actions the person performed. It is the screen you go to when a process metric looks wrong and somebody has to explain why.

The feature had grown one release at a time. Raw system events and high-level business steps rendered as identical rows in one flat list. There was no way to see where an event sat in the six-level process hierarchy while also tracking where you were in the session timeline. On a long session, people lost their place, and then lost confidence in what they were looking at.

I had the feature specification, the platform's public product, and no access to real users. Defining the analyst was part of the work.

03  |  The Problem

The interface answers where you are in the session, but leaves the analyst to work out where they are in the process.

The core problem, as I framed it, was that an analyst reviewing a captured workflow has to answer three things at once. What happened, which is the event. Where it happened, which is the process hierarchy. And how that event contributes to a higher-level business step, which is the link between the two.

The existing interface answered the first question well and left the analyst to reconstruct the other two in their head, one row at a time. On a session of a few dozen events you can hold that in your memory. On a session of three hundred and forty two, you cannot.

So I reduced the whole thing to a rule I could design against. Every screen has to answer two questions without being asked.

  • Where am I in this session? That is time.
  • Where am I in the process? That is structure.

Those two answers need separate homes. Trying to serve both of them from one scrolling list is what broke the original.

What the shipping product already told me

Two problems were visible in the live product without needing a single user interview. Event labels truncate mid-sentence, so a row ends in an ellipsis and tells you almost nothing about what the person did. And the step detail panel surfaces raw system values, an IP address and a port string, in a place that is supposed to carry business meaning.

Poor information hierarchy and no clear mapping between a user action and the business step it belongs to. Both of them sitting in plain sight, in the interface itself.

Skan.ai's Case Clickstream view, in the same Clickstream feature area as Participant Clickstream, showing a timeline of event labels that truncate into an ellipsis and a step detail panel displaying a raw IP address and port instead of business context.
My audit of the shipping product, captured from the adjacent Case Clickstream view in the same Clickstream feature area. The pain points were already visible in the interface, which meant I could design against evidence rather than against a description.

04  |  The User

No persona was given to me. Defining one was part of the problem.

I had no users to talk to, so I built her out of the use cases in the specification plus what I could find about how analysts in finance operations spend their day. She is a working assumption, not a research finding. I am saying that up front because the rest of this page leans on her, and I would rather you know what she is built on than have you take her for something she isn't.

RM

Rhea Menon

Senior Process Analyst · Global Business Services, Finance Operations

Purchase-to-Pay · Intelligent Automation CoE · uses this feature regularly, not occasionally

How I imagined she'd describe the job

"I don't need to watch the whole session. I need to find the ninety seconds that explain why this invoice took three days."

What I assumed about her, and what each assumption changed

What I assumedWhat it changed
She already knows the six-level hierarchy by heartA persistent breadcrumb rather than an explanatory tree
She usually arrives with a hypothesis rather than browsing to see what turns upJump, filter and search lead. Linear browsing is the fallback
She works long sessions on two screens and reaches for the keyboard firstThe layout earns its density. Full screen adds information rather than scale
She has to defend a finding in somebody else's deckEvery event is addressable, timestamped and bookmarkable
She can never ask the participant a single questionDuration against expected and anomaly signals sit up front
She loses her place in the current toolPlayback position and selection stay two separate visual states

Every row in that table turns up later as something you can point at on a screen. If an assumption didn't change anything, I took it out.

Persona board for Rhea Menon covering her goals, needs, motivations, influences and pain points as a senior process analyst.
The persona board from the research file. Everything on it had to earn a place by changing a decision.

05  |  Information Architecture

Six hierarchy levels, distributed across the layout by how often each one changes.

I started out treating the six levels as a display problem, which is where I think the original went wrong too. The thing that actually mattered was how often each level changes.

Business Process changes once per session. Event changes hundreds of times. Giving them the same visual weight in the same list is what made the original hard to read. So I sorted the six levels by how often each one moves, and gave each group a different home in the layout.

BandLevelsWhere they live
SlowBusiness Process, Sub-processPersistent breadcrumb and the session map band colour. Never scrolls
MidTask, Activity, StepCollapsible group headers inside the stream. The main unit of navigation
FastEventLeaf rows. Virtualised, collapsed by default, expanded on request

Only two or three levels compete for attention at any moment, even though all six are always present and always correct.

Mapping diagram showing each of the six process hierarchy levels sorted into slow, mid and fast changing bands, with the layout zone each band occupies.
The mapping I worked out before opening a design frame. Most of the layout decisions came out of this one exercise.

Five zones, each with one job

ZoneNamePositionJob
AContext BarFull width, fixed topBreadcrumb, participant identity, session metadata. Answers where am I in the process
BSession MapFull width, never hidesWhole session on one time axis, eight task bands, anomaly marker. Answers where am I in this session
CThe StreamLeft column, the only scrolling zoneNested outline of Task, Activity, Step and Event with sticky group headers
DInspectorDocked right panelScreen capture, business context, duration against expected, event signals
ETransport BarFull width, fixed bottomPlay, step, skip, speed, Follow Playback, Return to Playhead

Zone B is the one I would defend hardest. It never hides, on any screen or in any state, including full screen and every edge case. That was a deliberate constraint I set early and then held to, because the moment the session map disappears the analyst is back to reconstructing where they are, which is the thing I was trying to fix.

06  |  The Interaction Model

Playback position and selection are two separate cursors, rendered so they can never be mistaken for each other.

The hardest interaction question in this feature is what the relationship is between where playback has reached and what the analyst is currently reading. Get it wrong and someone pauses to inspect an event, then cannot find their way back to where the session was running.

Playback moves on its own. Selection only moves when you click. I made them two visually independent objects with two different rendering languages, so they can sit next to each other on the same screen and still be told apart at a glance. In practice, that means the marker showing where the recording currently is looks nothing like the marker showing what you clicked on, so the two are never confused even when they land close together.

Playhead

Where playback currently is

On the session mapSolid vertical line with a solid cap on top
On the stream rowLeft edge bar, pale tinted row background, no border
MovesOn its own, during playback

Selection

What the analyst is inspecting

On the session mapHollow outlined diamond marker
On the stream rowFilled background with a full border on all four sides
MovesOnly when clicked

Focus is a third state. It renders as an offset ring, so keyboard position can never be mistaken for either cursor.

What happens when the two separate

With Follow Playback on there is one cursor rendered two ways. Click any event and three things happen at once. Playback pauses. Follow switches off. A Return to Playhead button appears in the transport bar carrying the exact timestamp you left.

You can always get back. That button is the reason the analyst is willing to click away in the first place.

Participant Clickstream with playback paused at 09:35:18 and a separate event selected at 09:33:58, showing the playback row and the selected row rendered differently in the stream and both positions marked on the session map.
Two adjacent rows, two different treatments. Left bar and tint for playback, full border and fill for selection. Both positions are also marked on the session map above.

07  |  The Session

I designed against a single realistic session and used the same data on every screen, so the whole set reads as one investigation rather than six unrelated mockups.

Priya Raghavan, Accounts Payable Specialist · Session SES-2026-04817 · 12 March 2026, 09:14 to 10:01 · 47m 12s · 342 events · Purchase-to-Pay › Invoice Processing

Eight tasks, in process order, drawn on the session map in proportion to how long each one actually took.

TaskDurationEvents
Invoice Receipt and Capture4m 20s38
Invoice Validation6m 05s51
Three-Way Match 1 anomaly11m 48s87
Exception Handling8m 32s64
Approval Routing5m 10s41
Vendor Query6m 55s33
Payment Scheduling2m 48s19
Posting and Close1m 34s9
The finding. Inside Three-Way Match, in the activity Resolve Quantity Variance, the participant spent 4m 12s against an expected 45s. They switched between SAP and Excel six times doing it. That is the ninety seconds Rhea is hunting for, and it carries a marker above that task band on the session map on every single screen.

I reserved red entirely for anomalies. It appears nowhere else in the interface, on any screen, for any other purpose, which is what lets the marker read quickly without needing a legend.

08  |  The Screens

Each one exists to prove a specific thing holds up, not to show a different colour of the same layout.

01 · Default loaded state

Session open, nothing selected. Task 1 is expanded so the four-level nesting is visible straight away, and the inspector opens with a session summary and jump links to every signal in the session.

Participant Clickstream in its default state, showing the breadcrumb, the session map with eight task bands, the first task expanded in the event stream, and a session summary in the inspector panel.
8 tasks, 342 events, 1 anomaly. The inspector opens as a summary rather than as an empty panel waiting for a click.

02 · Playback active

Playback running at 09:33:58, inside the anomaly. Follow Playback is on, so selection tracks the playhead and the inspector carries a LIVE badge. The stream has auto-scrolled and expanded to the playing event.

Participant Clickstream during playback, with the playhead inside the Three-Way Match task, the stream auto-scrolled to the currently playing event, and a LIVE badge in the inspector panel.
One cursor, two renderings. The LIVE badge tells you the inspector is following playback rather than something you picked by hand.

03 · Event selected

The state that matters most. Playback is paused at 09:35:18, the selection sits at 09:33:58, and the two are rendered differently enough that nobody has to squint at them.

Participant Clickstream with the playhead and the selection at two different timestamps, each marked separately on the session map and in the event stream, and a Return to Playhead control in the transport bar.
Return to Playhead sits in the transport bar carrying the exact timestamp you left, so clicking away never costs you your position.

04 · Hierarchy level focused

Drilled into Three-Way Match. The other seven task bands drop to 30% opacity but stay on screen, the breadcrumb extends, and the inspector switches to a task-level summary. The playhead does not move.

Participant Clickstream focused on a single task, with the seven other session map segments dimmed but still visible and the breadcrumb extended to the task level.
Zoom, not jump. Dimming keeps the rest of the session in peripheral vision instead of throwing it away.

05 · Full screen expanded

At 1920 pixels the platform navigation goes away and the space gets spent on information rather than on scaling everything up. The session map gains an application focus lane. The stream gains App, Action Type, Time and Versus Expected columns. A third column appears for the activity summary.

Participant Clickstream in full screen mode with a dark header, an application focus lane added to the session map, extra columns in the event stream, and a three-column layout.
Full screen adds columns and a lane. This is the screen that shows density was a decision rather than an accident.

06 · Long session, filtered

Three filters active: anomalies only, application SAP, duration over expected. The result count reads 87 of 342 events, 5 of 8 tasks match. The inspector adds a Fastest route to the finding block pointing straight at Resolve Quantity Variance.

Participant Clickstream with three active filter chips above the event stream, a plain-language filtered result count, and a fastest route to the finding panel in the inspector.
Two clicks from the top of a 342-event session to the evidence. The route panel was not in the specification. I added it because finding the ninety seconds is the whole reason the analyst opened the session.

09  |  Edge Cases

Dense interfaces fall apart at the edges. These three were the ones most likely to break the two-question promise.

An event with no business metadata

The inspector never renders empty rows and never falls back to a shrugging illustration. It labels inherited values as inherited, names each field that was not captured for this event type, and points forward to the next event that does carry them. Rhea has to explain gaps in a director's deck, so the interface has to tell her exactly what the gap is.

First and last event

Back controls sit visibly disabled at event 1 of 342 rather than disappearing. At event 342 the forward controls disable and a Playback complete label appears with a Return to start action. Controls that vanish make people think something is broken.

A session spanning multiple sub-processes

The session map grows a thin upper band for sub-process grouping. The breadcrumb resolves to whichever sub-process the cursor currently sits inside, and updates as you drag it. One map, two levels of grouping, no extra chrome.

Planning board covering edge case decisions for long sessions, events with missing metadata, sessions spanning multiple sub-processes, and playback boundary states.
The edge case board. I worked these out before designing the happy path, which is why none of them needed a bolt-on later.

10  |  Trade-offs

Four things I gave up on purpose, and what each one cost.

Every one of these cost something real. Writing down the cost is the only way to know whether the call was right.

I removed the left sidebar

Cost

Five navigation items had to move into a slim top bar, and platform navigation lost its usual home.

Why I took it

Celonis does it, UiPath does it, and Skan's own product does it. It was costing 300px of horizontal space on a screen whose entire problem is horizontal space. That 300px went to the stream and the inspector, which is where the analyst actually works.

I moved the screen recording out of the centre

Cost

The recording stops being the first thing you see.

Why I took it

Putting the recording in the middle is what squeezes the event stream into a narrow rail, and the narrow rail is what truncates the labels. So the recording became a thumbnail on the selected event inside the inspector, and a full pane in full screen mode. The capability is all still there. Only the priority flipped.

I docked the inspector instead of making it a modal

Cost

Roughly a quarter of the stream width, permanently.

Why I took it

A modal takes you out of the session. A docked panel keeps you in it. I wanted the stream and the session map to stay visible while the analyst reads the detail, so that inspecting something never costs them their position, and I was willing to pay stream width for that.

I collapsed activity and event groups by default on long sessions

Cost

One extra click on every drill-down.

Why I took it

On a 400-event session the alternative is a wall of leaf rows with no shape to it. Collapsed by default means the task layer reads first, which matches how Rhea works. She filters, then browses. She does not scroll from the top.

One more worth stating plainly. Full screen kept the inspector at the same width as the standard layout. In production I would widen it. I held width parity here so the prototype transition reads cleanly, and I would rather say that than have someone find it.

Planning board recording each design trade-off alongside what it cost and the reason it was accepted.
The trade-off log, kept as I went rather than written up afterwards.

11  |  Design System

Nothing on any screen is a hardcoded value. Colour, type, spacing, radius and size all resolve to a bound variable, which is why six screens stay consistent down to the pixel.

61
bound variables
16
text styles
15
component sets, 68 variants
27
single components

Colour

The palette is derived from Skan's existing product interface so the redesign reads as the same product rather than a different one. The primary blue appears once per screen as the interactive focal point. Red is reserved entirely for anomalies and is used nowhere else. Duration carries three states: within expected, over expected, and well over expected. The eight task band colours are muted categoricals, picked so that none of them can be mistaken for the anomaly red.

Type and spacing

Inter for the interface, IBM Plex Mono for timestamps, IDs and raw values so that numbers align in a dense table. Hierarchy comes from weight, size and colour working together, never from size alone. Spacing runs on a 4px base scale. Row heights step down by hierarchy level, from a task row at the top to an event row at the bottom, and that compression is what lets twenty or more rows sit on screen at once.

Components

Every repeated row is an instance. Task Group Header, Activity Group Header, Step Group Header and Event Leaf Row each carry explicit variants for default, hover, selected, playback active and anomaly. The variant set is the reason the two-cursor model holds together across six screens without drifting.

Component library sheet for Participant Clickstream showing task, activity, step and event row variants in default, hover, selected, playback active and anomaly states, alongside transport controls, session map markers and inspector modules.
15 component sets, 68 variants. Every state that appears on a screen exists as a named variant rather than as a one-off.
Foundations page showing 61 bound variables covering colour, typography, spacing, radius and size tokens.
The foundations page. Every value on every screen resolves back to one of these.

Accessibility

I checked contrast against WCAG 2.2 AA across the task band palette and for text sitting on tinted rows, and adjusted a few of the band colours where they came up short. Colour is never the only carrier of meaning, so an anomaly row also gets an icon and a label. The three row states differ by position, fill and border, which is three separate mechanisms rather than three shades of the same one. Focus is a distinct third state, so keyboard position cannot be mistaken for playback or selection.

I have not put any of this in front of a screen reader user or run a keyboard-only session with a real analyst. Those are checks, not validation.

12  |  Prototype & Source Files

The prototype below is live. Click through it, or open any of the source files directly.

Interactive prototype

Start at the default state, press play, then click any event and watch the two cursors separate.

Source files

13  |  Research Artifacts

These are the actual boards, not tidied-up versions made for this page.

Wide view of the research board covering problem framing, persona definition, information architecture and the interaction model
Full research and IA board
Traceability map linking each pain point in the specification to the specific design decision that addresses it
Pain point traceability

14  |  Reflections

This was two days against a specification, with no users to talk to and nothing tested. Four things I would want before calling any of it settled.

Check the persona. Rhea carried a lot of weight here and she is built on inference. Half a dozen conversations with real process analysts would either confirm the assumptions or send me back to the IA, and I would want that before building anything.

Test the two-cursor model. I am confident the two states are visually distinct, because that is a craft problem and I can see the result. I am much less confident that the idea of playback continuing while you read something is intuitive on first contact rather than something you pick up on the third session. That one needs people, not judgement.

Check the density at real desk sizes. I designed at 1440 and 1920. I assumed two screens, but plenty of analysts work on a single 13-inch laptop, and a 28px event row is a different proposition there.

Widen the inspector in full screen. Holding width parity was the right call for a submission and the wrong one for production.

If you want to see how I handle a similar density problem in a regulated environment, the Compliance Manager case study covers it.

The one thing I would keep regardless is the rule I set at the start. Separate time from structure, then keep the two in sync. It held up through every screen and every edge case I threw at it, which is the most I can honestly claim for it at this stage.

Explore More Projects

Check out some of my other recent design work on Behance

Compliance Manager

End-to-end redesign of a healthcare compliance SaaS platform.

View case study

PhonePe: Making Spending Smarter

Designed an Expense Manager feature for PhonePe's UPI platform, helping users track spending and make smarter financial decisions.

View on Behance

FinIQ Personal Finance App

End-to-end UX/UI design for a personal finance management mobile app.

View on Behance
← Back to all work
Get in Touch →