Overview

Teams lose hours to timesheets filled in from memory. Time Keeper makes tracking a one-click habit for the people doing the work, and gives the people managing it a clear view of the team — without it feeling like surveillance.

RoleProduct designer & researcher · Technical writer · QA
UsersJonathan, a creative director who manages the team · Ana, a designer who logs her own time
Time Keeper — Track your time, master your day

How the project came together

1

Research & design UX/UI

Research, competitive analysis, two personas, a user flow, and a clickable prototype tested one-on-one with 10 users.

2

Design review QA

Every screen reviewed for defects and accessibility before anything was built.

3

Documentation Technical Writing

Guides for both audiences — the admin who manages projects and the member who tracks time — plus reference topics and UX writing.

4

Build & test UX/UI QA

An interactive prototype that fixes what the review found, tested against 25 cases. Try it.

10
Users tested the early prototype
9
Defects found and fixed, 7 of them before build
11
Contrast failures fixed before build
25
Test cases run against the prototype

UX/UI

Research and design

Research & competitive analysis

Time tracking is an industry people are actively investing in — and one most teams still get wrong. Manual timesheets create real, well-documented pain points.

Pain points: extra work for staff, human error is likely, morale can be damaged
News article: Workers Are Bad at Filling Out Timesheets, and It Costs Billions a Day
News article: Time By Ping raises $36.5M to help companies automate timesheets
News article: Your Employees Hate Tracking Their Time

I compared four existing tools — monday.com, Smartsheet, Wrike and Hub Planner — to see where they held up and where they consistently frustrated users.

Competitive analysis of monday.com, Smartsheet, Wrike and Hub Planner — pros and cons

Personas

Two personas represented the two sides of the same tool: the person managing deadlines, and the person whose time is being tracked. They also became the two audiences of the documentation.

Persona: Jonathan, 37, Creative Director

Jonathan, 37, Creative Director — needs visibility across his whole team's workload without micromanaging anyone.

Persona: Ana, 26, Graphic Designer

Ana, 26, Graphic Designer — needs to log her time without it feeling like surveillance or eating into her actual work.

Design process

A user flow diagram mapped the primary interactions first — from login through starting a timer, managing projects, and getting notified.

User flow diagram: Login, Dashboard, Start Timer, Ongoing Projects, Create Task, Comment, Edit

Low-fidelity wireframes locked in the dashboard layout before any visual design — timesheet table, live timer, and activity chart.

Low-fidelity wireframe of the dashboard: timesheet, timer and chart

Then the high-fidelity design — a dashboard built around live time tracking and a timesheet the whole team shares, with the schedule and messages one glance away.

Admin view of the Time Keeper dashboard: a running timer, the team timesheet with status and priority labels, schedule, messages and an hours summary
Admin view — Jonathan sees the whole team and is the only one who can create projects.
Member view of the Time Keeper dashboard: Ana's two tasks and an idle timer asking her to choose a task
Member view — Ana sees only her tasks, and her timer is hers alone.
The Add project dialog with fields for project name, due date, priority and assignees
Add project — the one form in the product, with a hint and a validation rule for every field.

Design decisions

1

The timer lives on the dashboard

Starting to track takes one click from the screen people already open every morning. People guess their timesheets because logging is a chore — so the design removes the chore instead of adding reminders.

2

Status and priority side by side

Jonathan can spot what's at risk — stuck and high priority — without opening a single project.

3

Faces in every row

Team avatars make it obvious who is on what at a glance. That's the visibility Jonathan needs, without having to ask.

4

Work, not activity

No screenshots, no keystroke counts — the product only knows the time people choose to log. That's what keeps it on Ana's side.

5

The timer button says what it will do

Three explicit states — Start timer, Stop timer, Log — so the label never contradicts the clock.

6

Priority is written, not starred

High, Medium and Low pills carry their meaning in the word itself. Stars need a legend nobody reads.

7

Two personas, two roles

Admins see the team and create projects; members see their own work. Each person has their own timer.

8

Accessible by default

Every text and control meets WCAG AA contrast — measured, not assumed.

Key features

The design leaned on simplicity and transparency — features built to keep both managers and individual contributors on top of deadlines without adding friction to the workday.

Key benefits: clear and transparent, accurate billing and payroll data, improved estimation, transferable data, friendly with companies and employees

And the reason this matters — nobody actually likes filling out a timesheet honestly.

Dilbert comic strip poking fun at inaccurate, guessed timesheet entries

Validation

An early clickable prototype was tested one-on-one with 10 users to check that it stayed intuitive and useful for both personas.

Technical Writing

Documentation for two audiences

Time Keeper has two kinds of readers with opposite needs: an admin who sets up work for a team, and a member who wants to log time and get back to it. The documentation is written for both — often in the same topic.

The samples below are excerpts. Each one opens with a short note on who it's for and why it's written the way it is.

Documentation plan

Audiences

AudienceWhoWhat they need from the docs
AdminJonathan, creative directorSet up projects and assign people, read the team's timesheet, spot risk early.
MemberAna, graphic designerTrack time with as little friction as possible, understand what each status means, fix a timer mistake.

Topic map

Every topic has one job, and its type says which: concepts explain, tasks walk through an action, references are looked up, troubleshooting fixes a problem.

TypeTopicAudience
ConceptGet started with Time KeeperAdmin · Member
TaskTrack time on a taskMember
TaskCreate a projectAdmin
ReferenceStatuses, priorities and rolesAdmin · Member
TroubleshootingFix common timer problemsAdmin · Member

How the content was sourced

On a team, this is where I'd interview the product manager for intent, engineering for edge cases and QA for known issues. Here, every step was performed in the working prototype and every rule matches what the product actually enforces — the documentation and the test cases were written from the same source.

Sample 1 · One topic, two audiences

Audience
Admin and member
Type
Concept · onboarding
Why it's written this way
One source, two outputs. Admins and members need different things from the same first page, so the topic carries both and each reader sees only theirs. In MadCap Flare this is one topic with two condition tags; the switch below applies them live.

Time Keeper Help › Get started

Get started with Time Keeper

Time Keeper tracks the time your team spends on projects. You record time with a timer, and Time Keeper adds it to the project.

Your dashboard
  • Timesheet — projects with their assignees, status, progress, due date and priority.
  • Time tracking — your timer.
  • Schedule and Messages — today's meetings and the latest notes from your team.
  • Hours summary — total hours logged, split by area.
Admin
What you can do as an admin
  • Create projects and assign people to them.
  • See every project and every assignee in the Timesheet.
  • Track time on any active project, including ones you aren't assigned to.

Next step: Create a project.

Member
What you can do as a member
  • See the projects you're assigned to, under My tasks.
  • Track time on your own active tasks.
  • Ask an admin when you need a new project — members can't create them.

Next step: Track time on a task.

Sample 2 · A daily task, for members

Audience
Member
Type
Task
Why it's written this way
This is the action members repeat every day, so it has to be scannable in five seconds: one action per step, the result right after it, and a picture of every state the timer can be in.

Time Keeper Help › Tracking time

Track time on a task

Use the timer to record how long you work on a task. You can track time on any active task assigned to you.

  1. In the Time tracking card, open the Task list and choose a task.

    The Time tracking card in the Idle state, with Email Campaign Assets chosen in the Task list and a Start timer button
  2. Select Start timer. The status changes to Running and the clock starts.

    The Time tracking card in the Running state, showing 00:00:48 and a Stop timer button
  3. When you finish, select Stop timer. The clock stops and the status changes to Stopped.

    The Time tracking card in the Stopped state, showing 00:01:23 with Log 1m 23s and Discard buttons
  4. Select Log to add the time to the task. A confirmation appears in the lower-right corner, and the timer returns to Idle.

Note Your timer belongs to you. Nobody else can start or stop it, and it keeps running if you look at another part of Time Keeper.

Tip Forgot to stop the timer? See Fix common timer problems.

Sample 3 · A setup task, for admins

Audience
Admin
Type
Task · reference
Why it's written this way
This is the only form in the product. Every rule it enforces is documented before anyone hits it, and every error message in the table is the exact text the product shows — so people can search for the message they got.

Time Keeper Help › Managing projects

Create a project

Create a project to give your team something to track time against.

Before you start Only admins can create projects. If you don't see Add project on the top bar, you're viewing Time Keeper as a member.

  1. On the top bar, select Add project.

  2. Enter a Project name, choose a Due date and a Priority, and select at least one person under Assignees.

    The Add project dialog filled in: Help Center Launch, due March 25, 2022, High priority, assigned to Ana Reyes and Priya Shah
  3. Select Create project.

Result: The project appears at the top of the Timesheet with the status Not started. Everyone you assigned sees it under My tasks.

Field rules
FieldRequiredRuleMessage if it isn't met
Project nameYes3–60 characters. Must be different from every existing project name — capitalization and extra spaces don't make a name different.Enter a project name.
Use at least 3 characters.
Use 60 characters or fewer.
A project with this name already exists.
Due dateYesToday or later.Choose a due date.
The due date can’t be in the past.
PriorityNoHigh, Medium or Low. New projects start at Medium.—
AssigneesYesAt least one person.Assign at least one person.

Sample 4 · Reference

Audience
Admin and member
Type
Reference
Why it's written this way
Definitions are looked up, not read. So they're tables with one definition per row, and permissions are written as words, not check marks, so they read the same to a screen reader.

Time Keeper Help › Reference

Statuses, priorities and roles

Project statuses
StatusWhat it means
Not startedThe project exists, but work hasn't begun. New projects start here.
In progressWork is underway.
StuckWork is blocked. Its progress bar turns red so it stands out in the timesheet.
DoneThe project is finished. Done projects no longer appear in the timer's Task list.
Priorities
PriorityWhen to use it
HighDo it first. Missing the due date affects a client or another project.
MediumNormal work. The default for new projects.
LowDo it when higher priorities allow.
What each role can do
ActionAdminMember
See projects in the timesheetAll projectsOnly projects they're assigned to
Create projectsYesNo
Track timeOn any active projectOn their own active tasks
Have their own timerYesYes

Sample 5 · Troubleshooting

Audience
Admin and member
Type
Troubleshooting
Why it's written this way
It starts from a real message in the product — “Timer's been running since morning, is that right?” Each problem is written the way a person would describe it, so it matches what they search for. It also documents a limit honestly: logged time can't be edited.

Time Keeper Help › Troubleshooting

Fix common timer problems

The timer has been running for hours

Why it happens: The timer keeps running until you stop it, even after you move on to other work.

What to do:

  1. Select Stop timer.
  2. If the time is wrong, select Discard, and then Confirm discard. If it's right, select Log.
  3. To record the real time, track it again.

Important You can't edit time after you log it, so check the clock before you select Log.

“Choose a task first.” appears when I select Start timer

Why it happens: No task is chosen in the Task list.

What to do: Choose a task, and then select Start timer again.

My task isn't in the Task list

Why it happens: The task is Done, or — if you're a member — you aren't assigned to it.

What to do: Ask an admin to assign you to the project. Done projects can't be timed.

I can't find Add project

Why it happens: Only admins can create projects.

What to do: Ask an admin to create it and assign you.

UX writing: before and after

Documentation starts in the interface. These labels changed between an early draft and the final design — each change is one less thing the help center has to explain.

WhereEarly draftFinalWhy
Timer, while runningStart timeStop timerA button should say what it will do. “Start” on a running clock said the opposite.
Timer, idleStart timeStart timerTime is what you track; the timer is what you operate.
Timesheet columnsTimeline · TimelineProgress · Due dateTwo columns with one name made people guess. Each name now says what the column holds.
StatusWorking on itIn progressA status, not a sentence — and short enough to scan down a column.
Priority★★★☆☆High · Medium · LowStars had no defined scale. A word carries its own meaning.
Timesheet subtitle6 active tasks4 active tasksThe count included finished work. A number in the interface has to be true.

How the error messages are written

  • Say what to do, not what went wrong — “Choose a due date.”, not “Invalid date.”
  • One sentence, no blame — never “You entered…”.
  • Use the field's own words, so the message and the label point at the same thing.
  • Show the message next to its field, and move focus to the first one that needs attention.

Style conventions

The samples follow the Microsoft Writing Style Guide:

  • Second person, present tense, active voice.
  • Select instead of “click”, so the steps work for mouse, touch and keyboard.
  • Interface labels in bold, spelled exactly as they appear on screen.
  • One action per step, with the result right after it.
  • Sentence-case headings, and no “please”.
QA

Review and testing

Time Keeper was reviewed three times: the design before anything was built, the accessibility of every screen, and the working prototype against 25 test cases.

Testing your own design is the hardest kind of testing to do honestly. Almost every defect below is in the project's own work — the early design, the mock and the prototype's code — and each one is fixed and retested.

Test plan

Objective

Make sure both roles can track time and manage projects correctly, and that every screen works with a keyboard and meets WCAG AA — before and after the build.

Scope

In scope

  • The timer, in every state
  • Admin and Member roles and their permissions
  • Project search
  • The Add project form and its validation
  • Accessibility of every screen

Out of scope

  • Filter, Export, messages and calendar — not built in the prototype
  • Browsers other than Chrome
  • Phone layouts — the product targets desktop
  • Performance and load — the prototype has no backend

Approach

PassWhat was reviewedHow
1 · Design reviewThe early-iteration screens and the design mockHeuristic review against each persona's tasks; consistency and content checks
2 · Accessibility auditThe mock and the prototypeContrast measured with the WCAG 2.1 formula, an axe-core scan of four states, keyboard and focus checks
3 · Functional testingThe interactive prototype25 test cases: equivalence partitioning, boundary values, state transitions, negative and role-based tests

Environment: Chrome (latest), Windows 11, 1440 × 900 viewport · axe-core 4.10.

Risks, in priority order

RiskWhy it mattersCovered by
High
The timer records the wrong time or the wrong task
Time data feeds billing and payroll — it's the product's core promiseTC01–TC08, TC12
High
A member sees or does what only admins should
A permission leak is a trust problemTC09–TC11, TC22
Medium
The form accepts bad data
Duplicates and past dates pollute the timesheetTC15–TC20, TC23
Medium
A screen can't be used with a keyboard or low vision
Accessibility is a requirement, not a featureContrast audit, axe-core, TC15, TC21, TC25
Low
Search gives no feedback when nothing matches
Minor frictionTC13

Exit criteria

Every High-risk case passes, no High-severity defect stays open, and axe-core reports zero violations. All three were met.

Defects found — 9, all fixed

Each report says where it was found, what was expected, what actually happened, and how it was fixed and verified.

D-01 · [Timer] The button reads "Start time" while the timer is running

Found in: design review · early iteration

Severity: HighPriority: HighFixed
  1. Open the dashboard while a timer is running.
  2. Read the button in the Time Tracking card.
ExpectedThe button offers the next action: stop the timer.
ActualThe clock shows 00:07:45 and the button says "Start time".
Early iterationEarly Time Tracking card: the clock shows 00:07:45 and the button says Start time
FixedFixed Time Tracking card: Running status and a Stop timer button

Fix: Three explicit states — Idle, Running, Stopped — and a button that always names the next action. Verified by TC01–TC03 and TC06.

D-02 · [Timesheet] Two columns are both called "Timeline"

Found in: design review · early iteration

Severity: MediumPriority: MediumFixed
ExpectedEvery column has a unique name that says what it holds.
ActualThe progress bar and the date columns are both labeled "Timeline".
Early iterationEarly timesheet header: Project, Team, Status, Timeline, Timeline, Priority
FixedFixed timesheet header: Project, Assignees, Status, Progress, Due date, Priority

Fix: The columns are now "Progress" and "Due date".

D-03 · [Dashboard] The header date and the schedule disagree

Found in: design review · early iteration

Severity: MediumPriority: LowFixed
ExpectedThe dashboard shows one "today", and today's meetings match it.
ActualThe header says Monday, March 14, 2021; every meeting in Schedule is dated 12.12.2022.
Early iterationEarly dashboard: header dated March 14 2021 next to a schedule of meetings dated 12.12.2022

Fix: Every date on the dashboard comes from the same "today"; the header and the schedule now agree.

D-04 · [Timesheet] The same five rows repeat three times

Found in: design review · early iteration

Severity: LowPriority: MediumFixed
ExpectedEach row is a different project.
Actual"Finalize Material UI" to "Landing Page" repeat down the table, which makes the data look fake.
Early iterationEarly full timesheet where the same five projects repeat
FixedFixed timesheet with six distinct projects and priority labels

Fix: Six distinct tasks, each with its own assignees, status and dates.

D-05 · [Timesheet] Priority stars have no defined scale

Found in: design review · early iteration

Severity: MediumPriority: MediumFixed
ExpectedAnyone can tell which projects are most urgent without a legend.
ActualTwo to five stars, with nothing saying whether five stars means most urgent or least. Visible in the early screens above.

Fix: Labeled pills — High, Medium, Low — shown in the fixed timesheet above and defined in the reference topic.

D-06 · [Accessibility] 11 text and control colors fail WCAG AA in the design mock

Found in: accessibility audit · design mock

Severity: HighPriority: HighFixed
ExpectedText and controls reach at least 4.5:1 contrast. The design brief required it in writing.
ActualSecondary text, table headers, the main button and avatar initials measure between 2.15:1 and 3.74:1.

Fix: Darker color tokens; every pair now measures 4.8:1 or more. Full numbers in the contrast audit. Requiring something isn't the same as verifying it.

D-07 · [Timesheet] The subtitle counts finished work as active

Found in: design review · design mock

Severity: LowPriority: MediumFixed
Expected"4 active tasks" — two of the six are Done.
Actual"6 active tasks across your team."

Fix: The count is computed from each task's status, so it stays true when projects are added. Verified by TC10 and TC20.

D-08 · [Add project] Focus doesn't return to "Add project" after the dialog closes

Found in: functional testing · prototype · TC21 failed on its first run

Severity: MediumPriority: HighFixed
  1. Start a timer, then select Add project.
  2. Create a project, or select Cancel.
  3. Check which element has keyboard focus.
ExpectedFocus returns to "Add project", the button that opened the dialog.
ActualFocus lands on the timer's "Stop timer" button. A keyboard user loses their place.

Cause and fix: The code restored focus in the dialog's close event, which fires after the browser has already moved focus elsewhere — and Safari doesn't focus a button on click at all. Focus is now restored immediately on close, and on Esc. Verified by TC21 and TC25.

D-09 · [Accessibility] axe-core reports 3 violations in the prototype

Found in: accessibility audit · prototype

Severity: MediumPriority: MediumFixed
ExpectedZero violations in every state.
ActualThe "Running" label fails contrast on its translucent background, the demo bar sits outside any landmark, and the scrollable messages list can't be reached with a keyboard.

Fix: A solid label background, the demo bar marked up as navigation, and a keyboard-focusable messages list. A re-scan reports zero violations.

Accessibility audit

Contrast, measured

Every ratio is calculated with the WCAG 2.1 formula from the actual color values — not eyeballed. AA requires 4.5:1 for normal text.

ElementMockPrototype
Date under the greeting, card subtitles3.07:14.97:1
Progress percentages3.07:14.97:1
Table headers2.48:14.80:1
"Help & support"2.48:14.80:1
Message times2.58:14.97:1
"Add project" button3.74:15.47:1
Avatar initials (4 colors)2.15–3.53:15.02–6.29:1

Automated scan (axe-core)

StateBefore fixesAfter fixes
Dashboard — Admin view2 violations0
Dashboard — Member view3 violations0
Add project dialog00
Add project dialog, with errors00
This case study page—0

Keyboard and focus

  • Every action is a native button, input or list — nothing is a clickable div.
  • Every control shows a visible focus ring.
  • The dialog moves focus to its first field (TC15), closes with Esc (TC25) and returns focus to the button that opened it (TC21).
  • Form errors move focus to the first field that needs attention (TC16).
  • When the timer changes state, focus moves to the next action, so the keyboard never ends up on a hidden button (TC02).

Test cases — 25 run, 25 passed

25
Test cases executed
25
Passed
1
Defect found during execution — fixed and retested
0
axe-core violations after fixes
Timer 8 cases
IDTestTechniqueExpected resultResult
TC01Admin's timer on loadState transitionShows Running, 00:07:45 and a "Stop timer" buttonPass
TC02Stop the timerState transitionThe clock freezes; "Log 7m 45s" appears and receives focusPass
TC03Log the timeState transitionConfirmation "Logged … to Design System Update."; clock resets to 00:00:00Pass
TC04Start with no task chosenNegative"Choose a task first." appears; the timer stays IdlePass
TC05Choose a task after the errorNegativeThe error disappears as soon as a task is chosenPass
TC06Start on a chosen taskState transitionThe task name shows and the clock counts upPass
TC07Discard the timeNegativeThe first select asks "Confirm discard"; the second discards and resetsPass
TC08Which tasks can be timedEquivalence partitioningThe 4 active tasks are listed; Done tasks are notPass
Roles and permissions 5 cases
IDTestTechniqueExpected resultResult
TC09Switch to the Member viewRole-basedThe greeting says Ana; "Add project" is hiddenPass
TC10Member's timesheetRole-basedOnly her 2 tasks; "2 active tasks assigned to you"Pass
TC11Member's timerRole-basedAna's timer is Idle and lists only her 2 tasksPass
TC12Switch back to AdminState transitionJonathan's timer is still runningPass
TC22New project assigned to AnaRole-basedIt appears in her view and in her timer's task listPass
Add project form 7 cases
IDTestTechniqueExpected resultResult
TC15Open the dialogAccessibilityThe dialog is modal and focus is in Project namePass
TC16Submit an empty formNegativeThree errors; focus moves to Project namePass
TC17Project name lengthBoundary values2 characters ✗, 61 ✗, 60 ✓Pass
TC18Duplicate nameEquivalence partitioning"  BRAND   style guide " is rejected as a duplicatePass
TC19Due dateBoundary valuesYesterday ✗, today ✓Pass
TC20Create a valid projectPositiveIt appears at the top as Not started, High; the count becomes 5 activePass
TC23CancelNegativeThe dialog closes and nothing is createdPass
Focus, search and display 5 cases
IDTestTechniqueExpected resultResult
TC21Focus after the dialog closesAccessibilityFocus returns to "Add project"Pass
Failed first run → D-08
TC25Close the dialog with EscAccessibilityThe dialog closes and focus returns to "Add project"Pass
TC13Search projectsEquivalence partitioning"brand" → 1 row; "zzz" → "No projects match"; only spaces → all rowsPass
TC14Due dates and time zonesBoundary valuesShows "Mar 18, 2022" — not shifted to Mar 17 in the AmericasPass
TC24Controls outside the demoUsabilityThey say "That control isn't part of this demo" instead of doing nothingPass

Traceability

Every requirement maps to the tests that check it and the defects that broke it. This is where the design, the documentation and the testing meet.

RequirementTestsDefectsStatus
The timer button always names the next actionTC01–TC03, TC06D-01Fixed
Only active tasks can be timed; members only their ownTC08, TC11, TC22—Met
Members can't create projects or see other people's tasksTC09, TC10—Met
Each person has their own timerTC11, TC12—Met
Project names are unique and 3–60 charactersTC16–TC18—Met
Due dates can't be in the pastTC19—Met
Column names are unique and descriptiveDesign reviewD-02Fixed
Priority is readable without a legendDesign reviewD-05Fixed
Every number, date and row shown is trueTC10, TC14, TC20D-03, D-04, D-07Fixed
Every screen meets WCAG AA and never loses keyboard focusContrast audit, axe-core, TC15, TC21, TC25D-06, D-08, D-09Fixed

Decision log

1

Review the design before building it

A defect found in a mock costs a text edit; the same defect found in production costs a release. Seven of the nine defects were caught before a single line of code.

2

Pick the technique that matches the shape of the feature

The form has hard limits, so boundary values. The timer is a state machine, so state transitions. Roles are classes of users, so equivalence partitioning by role.

3

Spend the most time on the two High risks

Wrong time data and leaked permissions would break trust in the product, so they got 13 of the 25 cases.

4

What wasn't tested — and what's next

A full screen-reader pass with NVDA and VoiceOver: accessible names and roles are covered by axe-core, but a manual pass is next. Firefox and Safari: D-08 is a reminder that browsers differ, so a cross-browser run comes next. After that, automate the 25 cases so they run on every change.

← Back to case studies