← Selected work

Redesigning GrowHR's payroll experience

Turning a legacy payroll interface into a clearer, action-oriented workspace.

Industry
HRMS
Client
GrowHR, Middle East
Role
Lead UX Designer
Team
1–4
Date
April 2023
Platform
Web App
Scope
UX Strategy · Information Architecture · Interaction Design · UI Design
The redesigned GrowHR payroll dashboard: a left navigation rail listing Home, Employees, Pay Run, Approvals, Taxes and Forms, Loans and Reports; a payroll summary card with four figures for last month released, current month payroll, employees processed and total monthly salary; and an employee payroll table below showing per-person gross pay, deductions, net pay and payroll status

The month everything has to be right

Payroll is one of the most critical modules in an HRMS. Every month, payroll teams bring employee and financial data together from several sources, validate it, resolve exceptions, calculate payroll, obtain approvals and release payments. Attendance, leave, salary revisions, deductions, benefits, claims and one-off payments all have to land before a single number can be trusted.

Understand
Select the payroll period · Read its current status · See the month’s summary
Verify
Compare against the previous payroll · Review variance · Reach activity logs and versions
Act
Run and calculate · Send for approval · Release payment

GrowHR supported all of it. Its experience, though, reflected patterns common in older enterprise applications: everything present, arranged by the shape of the system rather than the shape of the work. For a product competing in the GCC HRMS market, that was becoming the difference between capable and usable.

So the problem was not that the interface looked old. It was that the interface did not put enough structure around the payroll workflow.

How might we make a complex payroll workflow easier to understand and operate without removing the information enterprise users depend on?

The second half of that question did most of the work. Enterprise payroll users depend on detail, and any redesign that bought clarity by hiding information would have failed the people it was meant to help.

Learning payroll before redesigning it

We had worked on HRMS products before. Payroll was different. It carries its own rules, dependencies, terminology and failure points, and it was a domain we needed to understand before we could redesign it responsibly.

What we worked from

  • The product requirements document, which specified the payroll workflow in detail
  • The legacy GrowHR interface, read closely as an artefact in its own right
  • Competitor product demonstrations, primarily Keka and RazorpayX Payroll
  • Successive already ran its own payroll on Keka, so we had internal users to ask
  • Team workflow analysis, mapping the process end to end before touching a screen

That fourth source was the most useful of them. Watching a demonstration tells you what a product wants to show you. Having colleagues who used one of those products every month to run our own payroll let us ask the awkward questions instead: what goes wrong, what gets reworked, what people ignore.

Payroll is a chain, not a task

The Payroll Admin is responsible for preparing and completing payroll at the end of each cycle. They rarely work alone. Payroll is a chain of inputs, reviews, approvals and dependencies running across the organisation, and most of the links are not theirs to pull.

The GrowHR payroll workflow and role map: six process stages from inputs and updates through calculate, validate, approvals and release to payslips and reports, mapped against five roles (Payroll Admin, HR Admin, Department Manager, Finance Approver and Employee) with each cell coloured by whether that role owns, participates in, approves or receives the outcome of the stage, plus panels for key inputs, systems and integrations, key outputs, common exceptions and success metrics
01 · The payroll process mapped against the people it runs through.

Drawing it settled two things. The Payroll Admin owns an outcome that depends on people outside their control: managers approving attendance and leave, HR maintaining salary changes, Finance approving the amount, employees keeping their own bank details current.

And the further right you move along that process, the more expensive a missing input becomes. A bank detail missing at stage one is administration. The same detail missing at stage five is a payment that does not arrive. That is the argument for surfacing exceptions early, and for making approval status something a Payroll Admin can see rather than chase.

What the redesign was aiming at

Before auditing anything, we agreed what a better payroll experience would actually do. Naming the targets first is what kept the audit from becoming a list of things we happened to dislike.

Target

> 98%

payroll accuracy

Target

20%

reduction in payroll cycle time

Target

100%

on-time payroll release

These are the outcomes the redesigned workflow was meant to support, agreed as targets at the start of the work. They are not measured results. The redesign was not instrumented after launch, so nothing here should be read as a validated improvement.

Two more sat alongside them and resist a single number: fewer exceptions in each payroll run, and roughly a third less rework once a payroll has been calculated. Both matter for the same reason. They are the difference between a cycle that closes on time and one that has to be run again.

Where the existing experience broke down

Before changing the interface, we needed to understand where the existing experience was creating friction, and to separate what we could observe from what we would go on to recommend.

What the audit covered

  • Payroll workflow
  • Information hierarchy
  • Navigation
  • Terminology
  • Exceptions
  • Actions
  • Accessibility
  • Competitive patterns
The legacy payroll dashboard: a header with language and company switchers above six administrative menus, twelve month tiles labelled Not-Exists, Released, Current and Future, a dashed panel holding Start, Calculate and Release with timestamps beneath them, and stacked panels headed November Payroll, Current Payroll and Previous Payroll
02 · The legacy payroll dashboard.

The screen consolidated most of the payroll process into one place. That kept everything together, which is genuinely useful, and it is why the screen had survived as long as it had. It also left three questions hard to answer: what stage is this payroll in, what needs attention, and what should happen next.

The problem was not a lack of information. It was a lack of structure.

Where payroll gets blocked

Payroll rarely fails because a calculation is wrong. It fails because something upstream never arrived.

What blocks a payroll run

  • Missing employee information
  • Pending approvals
  • Attendance or leave issues
  • Salary changes not yet effective
  • Policy changes
  • System configuration
  • Missing or invalid banking information

A payroll system therefore needs to make failure actionable. Knowing that something is wrong is only useful if the Payroll Admin can also see what went wrong, how many people it affects, who has to resolve it, and what it is holding up. The legacy screen surfaced none of that as part of the workflow, which is why exception handling became one of the largest pieces of the redesign.

Five findings that mattered

Rather than reproduce a heuristic checklist, these are the findings that actually changed the design. The middle column is what we observed. The right-hand column is what we proposed, which is a different kind of claim.

FindingWhat we observedWhat we recommended
Payroll state was unclearStart, Calculate and Release were exposed as controls, but the state of the run itself was never statedIntroduce explicit workflow states
System vocabulary on the surfaceMonths with no payroll configured were labelled “Not-Exists”, a database state promoted to a labelName states for what they mean to the reader
Navigation gave no contextSix administrative categories sat side by side, so where the payroll dashboard belonged was unclearGroup payroll tasks into an area of their own
Employee detail was out of reachThe screen showed employee counts but offered no way to inspect an individual payroll recordAdd employee-level drill-down and a dedicated Employees section
Exceptions were invisibleIssues were not presented as part of the payroll workflow at allIntroduce Outstanding Items ahead of each stage

The first recommendation is the one everything else hangs from. A payroll run has a state, and the interface simply never said what it was.

  1. Not started
  2. In progress
  3. Review
  4. Approved
  5. Released
The legacy month tile strip, twelve tiles from May 2020 to April 2021, with statuses reading Not-Exists, Released, Current and Future in small grey type beneath each month and year
03 · Four states, two greys and a system label. Nothing here says which dates a tile covers.

Accessibility

We ran the legacy screen against WCAG 2.1 AA. Eleven findings, and most of them traced back to two systemic causes rather than eleven separate mistakes.

Critical

4

findings

Major

5

findings

Minor

2

findings

Contrast ratios were estimated from the exported screen rather than measured against a running build, so they indicate where to look rather than certify a value.

  1. 01

    Under-contrasted secondary text

    Grey was carrying a lot of the interface: the timestamps under Start and Calculate, the year on every month tile, the Not-Exists labels, the second line in each payroll panel. Much of it fell below the 4.5:1 requirement.

  2. 02

    Status communicated through colour alone

    Current and Released were separated largely by fill colour, which makes them hard to tell apart with a colour vision deficiency. The same pattern appeared in the employee deltas.

Design system fixes

  • Darken the muted grey token to around #616161 or darker on white
  • Give every status a redundant cue: an icon, a label, a border or a pattern
  • Verify minimum touch targets of 44 by 44px
  • Give every interactive element a visible keyboard focus state
  • Give payroll period tiles accessible names carrying month, year and status

How other products handle it

We looked at how other payroll products structure the same workflow. The aim was to understand patterns, not to borrow visual designs. Products reviewed were Zoho Payroll, Keka, RazorpayX Payroll, BambooHR and Workday.

CapabilityGrowHRKekaRazorpayXOther benchmarks
Payroll statusBasicStrongStrongVaries
Processing workflowBasicStrongStrongStrong
Exception handlingLimitedStrongStrongVaries
Approval visibilityLimitedStrongStrongStrong
Employee-level detailLimitedStrongVariesVaries
Payroll analyticsLimitedStrongStrongStrong

Where a competitor’s payroll workflow was not publicly documented, the rating reflects what their demonstrations and published material showed us, not a full account of the product. Several of these ratings would move with better access.

The conclusion held regardless. GrowHR’s dashboard was largely status oriented: it showed where payroll had got to, but gave the Payroll Admin little visibility into exceptions, employee-level detail or approval dependencies. Keka was the clearest reference for guided processing and exception handling, and RazorpayX for approval visibility.

Walking the tasks ourselves

With no access to Payroll Admins, we did the next most useful thing: assigned the core payroll tasks to members of the team, had each of them attempt the task in the legacy product, and recorded where they stalled.

This is worth naming honestly. It surfaces interface problems reliably and domain problems poorly, because none of us carried a real Payroll Admin’s expectations into the task. It tells you where a screen is confusing. It does not tell you whether the workflow behind it is right.

TaskWhere it happens todayWhat breaks down
Select payroll periodTimeline of month tilesStatus is difficult to interpret
Start payrollStart actionPrerequisites are never stated
Calculate payrollCalculate actionIts relationship to Start is unclear
Check employeesEmployee countNo way to drill into a record
Identify exceptionsNowhere in particularNo exception management exists
Release payrollRelease actionConsequences are not spelled out
Check previous payrollPrevious Payroll panelRequires scrolling, weak hierarchy

Choosing what to fix

We could not solve every problem at once. Payroll was one part of a much larger HRMS with its own roadmap and its own delivery pressure, so the effort had to go where it most affected whether a payroll run actually completed.

AreaFindingEvidenceSeverityRecommendation
Payroll statusCurrent state unclearState must be inferred from controlsHighIntroduce explicit workflow states
Payroll periodsStatus hierarchy is weakCurrent, pending and future look alikeHighRedesign period navigation
ExceptionsNo exception managementIssues are never surfacedHighIntroduce Outstanding Items
NavigationToo many admin categoriesHigh cognitive load to locate payrollHighGroup payroll tasks together
ActionsStart, Calculate and Release lack contextDependencies between them are unclearHighMake workflow state explicit
Terminology“Not-Exists” is unclearSystem vocabulary on the surfaceMediumUse language that describes meaning
Visual hierarchyKey metrics lack emphasisEverything shares a visual weightMediumEstablish a stronger hierarchy
TypographySecondary text is small and lightReduced readabilityMediumImprove type scale and contrast

The five High rows became the redesign. Everything below them was real, but it was work for the design system rather than a reason to rethink a screen.

From system structure to task structure

The existing navigation described how the product had been built. Six administrative categories sat across the top, and the payroll dashboard lived somewhere inside one of them.

Legacy structure

  • Self Service
  • System Admin
  • Company Setups
  • HR Admin
  • Payroll Admin
  • Talent

That structure left a Payroll Admin holding several questions at once. Where am I? Which role am I currently acting as? Is the payroll dashboard a module or a report? What is the relationship between the Payroll Admin category and the payroll dashboard sitting inside it?

None of those questions are about payroll. They are overhead the interface charges before the work begins.

The proposed structure gives payroll its own area, with one task per entry. The product labels the first of them Home, and it is the dashboard the case study opens with.

The redesigned left navigation rail, headed GrowHR Payroll, listing Home, Employees, Pay Run, Approvals, Taxes and Forms, Loans and Reports, with a payroll cycle countdown reading three days at the foot
04 · Seven payroll areas, one task each.

We deliberately kept the change focused. The objective was to give payroll a clear task model, not to reorganise an HRMS that existing customers had already built processes around. A wider information architecture change would have been easy to draw and expensive to migrate, and migration cost falls on the customer rather than on the designer.

Four principles

  1. 01

    Make the current state obvious

    Someone arriving mid-cycle should see where the payroll has got to without opening anything.

  2. 02

    Surface exceptions before they block

    Problems should be visible and actionable while there is still time, not discovered at approval or release.

  3. 03

    Separate monitoring from execution

    The Dashboard helps a Payroll Admin understand payroll. Pay Run helps them process it. One screen doing both is what made the legacy experience hard to read.

  4. 04

    Structure complexity rather than remove it

    Enterprise payroll is genuinely complicated. The job is to make that complexity navigable, not to hide parts of it.

Monitoring, and execution

The audit pointed at one structural decision. Instead of consolidating the whole payroll workflow into a single screen, we split the experience by what the Payroll Admin needs at each point: a place to understand payroll, a place to work on the people in it, and a place to run it.

An earlier pass

An earlier redesign of the payroll dashboard, still on the original navigation: a payroll calendar of month tiles marked Released, Pending, Current and Future, a payroll summary with four figures beside a payroll summary logs panel, a Run Payroll strip of processing stages, and three actions fixed to the foot of the page
05 · The first redesign. Better, and still one screen doing everything.

Before the architecture work, we had already redesigned the dashboard once, and it was a real improvement. The payroll calendar carried a status per period. The processing operations became visible stages rather than scattered destinations. The three payroll actions were ranked and moved below the evidence for using them.

It also kept the original premise. Everything still lived on one screen, the surrounding navigation was untouched, and exceptions still had nowhere to live. Reading this pass back against the audit is what produced the third design principle, and it is the reason the final design has a Pay Run at all.

Dashboard

The redesigned payroll summary card: a header reading Payroll summary for Jul 2026 with a Processing v3.0 badge, and four figures showing last month released at AED 719,929 up 4.8%, current month payroll at AED 742,350 in processing, employees processed at 1,243 of 1,250 with seven outstanding, and total monthly salary at AED 1.24M up 3.2%
06 · Each figure carries its own movement, so variance is read where the number is.

The dashboard became the monitoring layer. It answers how the current payroll is doing and whether anything needs attention, then hands off to the screen where the work happens.

Two details do most of the lifting. Employees processed reads as a count against a total, 1,243 of 1,250, with the seven outstanding stated underneath, so an incomplete run is visible without opening anything. And each figure carries its movement against the previous period in the same place, which means comparing this month to last is part of reading the number rather than a separate panel further down.

Below the summary sits an employee table, which is the drill-down the legacy screen never offered.

Employees

The redesigned Active Employees screen: a searchable, filterable table of employee payroll records showing name, role, employee ID, department, gross pay, deductions, net pay, payroll status and pay date, with statuses reading In Review, Processed, Pending, On Hold and Error
07 · Employee payroll as its own workspace rather than a count on a dashboard.

Employee information earned a workspace of its own rather than being buried inside the payroll dashboard. Search, department filters, an add employee action, and one row per person carrying gross pay, deductions, net pay, payroll status and pay date.

The status column is the point. In Review, Processed, Pending, On Hold and Error all appear in the same list, so working out who needs attention during a run becomes a scan rather than an investigation.

Pay Run

The redesigned Pay Run screen: payroll period navigation across seven months, a July 2026 summary showing employees, payroll amount, tax and deductions and processing status, a six-step payroll process strip with step four blocked, and an Outstanding items table listing three issues
08 · Pay Run: period, progress and everything still outstanding, in one view.

Pay Run is where payroll execution happens, so the screen had to communicate two things the legacy product never did: progress, and responsibility.

The redesigned payroll period navigation: seven month tiles from March to September 2026, each carrying its pay period date range, its status as Released, Pending, Current or Upcoming, and its payroll amount, with July marked as the current period
09 · Every period states its dates, its status and its amount.

Each period carries its date range, its status and its amount. Released, pending, current and upcoming are distinguishable by label as well as by colour, which closes one of the accessibility findings. Comparing this month against the last three became a glance across a row rather than a scroll to a panel.

The redesigned payroll process strip: six numbered steps reading Attendance and Leave, Salary Adjustments, Payroll Calculation, Review and Validate, Approvals and Release Payment, with the first three marked completed and dated, step four highlighted as blocked with seven items to review, and the last two pending
10 · Three of six complete, step four blocked, seven items to review.

The six steps are stated as a sequence, with the current one marked and each of the others carrying its own state.

  1. Attendance & Leave
  2. Salary Adjustments
  3. Payroll Calculation
  4. Review & Validate
  5. Approvals
  6. Release Payment

This is the single change that answers what should I do next without the Payroll Admin having to work it out. A completed step carries its date. A blocked step carries its count. A pending step says what it is waiting on.

The redesigned Outstanding items table with tabs for outstanding items, employees, activity log and payroll notes; three rows listing missing bank details marked as blocking payroll and affecting three employees, unapproved leave marked as needing attention and affecting two, and a pending salary adjustment marked informational and affecting two, each with a Review action
11 · Every issue names what went wrong, who it affects and what it blocks.

Each issue states what went wrong, how many employees it affects, its category, and the action available. Missing bank details is marked as blocking payroll. Unapproved leave needs attention. A pending salary adjustment is informational. Severity reads through an icon and a label rather than colour alone, which was the other systemic accessibility finding.

The Pay Run header actions: Preview payroll and Recalculate as outlined buttons, and Review and Validate as a filled button carrying a count of seven
12 · The primary action carries what is left to do.

The count in that last button is small and does a surprising amount of work. The action now tells the Payroll Admin not only what they can do, but what remains before they can proceed.

Structure, not subtraction

Before

The legacy payroll dashboard, with six administrative menus across the top, a strip of month tiles, a dashed panel holding Start, Calculate and Release, and three stacked payroll panels
13 · The legacy payroll dashboard

After

The redesigned payroll dashboard, with a payroll navigation rail, a summary of four figures each carrying its movement, and an employee payroll table below
14 · The redesigned payroll dashboard
Navigation
LegacySix administrative categories with payroll somewhere inside.
RedesignSeven payroll areas, one task each.
Payroll state
LegacyInferred from controls and timestamps.
RedesignAn explicit step in a six-step process.
Exceptions
LegacyNot present on the screen at all.
RedesignOutstanding Items, with owner, count and action.
Employee detail
LegacyA count.
RedesignA searchable list with per-person payroll status.
Comparison
LegacyA Previous Payroll panel further down the page.
RedesignMovement attached to each figure, periods side by side.
Primary actions
LegacyAbove the evidence, unranked.
RedesignAfter the evidence, ranked, carrying what is outstanding.
Terminology
LegacySystem states such as Not-Exists.
RedesignLabels that describe what the state means.

Redesigning an enterprise product is not always about removing complexity. Sometimes the opportunity is to give that complexity a structure people can understand.

Almost nothing was taken away. The legacy screen’s information survives, and most of it now appears in more places than before, not fewer. What changed is that it sits in an order that matches the work: understand the payroll, process it, verify it, get it approved, release it.

The shift was from a screen arranged around the system to an experience arranged around the task.

What I would do differently

I worked from the requirements document, the existing interface, competitor exploration and internal workflow analysis. What I would do differently is spend a month end sitting with a Payroll Admin.

A live cycle exposes what a documented process hides: reruns, corrections, late joiners, changes made after calculation, information that arrives at the wrong moment, approvals that stall for reasons nobody wrote down. Those are the cases a happy-path workflow absorbs badly, and they are exactly the cases payroll produces every single month.

It would have told us whether this design holds up under real operational pressure rather than against the specification. That is the difference between a workflow that is defensible and one that has been tested, and I would rather ship the second.