Time Attribution System
Activity auto-capture → gantt diagrams, per-client subtotals, multi-tasking detection, and interactive reattribution, in five minutes a day.
Context
Time tracking in consulting has a cruel economic shape. The work is time, and the signal is the time entry. But the signal is produced by the same person who just did six hours of context-switched work, and who can't remember when they stopped thinking about Client A and started thinking about Client B.
Industry data says this: time tracked daily is about 66% accurate. Time tracked weekly is about 47%. For a firm where time is literally the unit of production, that gap is 5–10% of revenue, invisibly leaking out the bottom of the bucket.
I wanted the daily entry to take less than five minutes and to be based on something more truthful than memory.
Problem
A normal consulting day at my previous firm looked like this: forty activity windows, three to five clients, half the blocks under fifteen minutes, two to three hours of multi-tasking where the real attribution is "both at once." Logging that in a standard time-entry UI is a guessing game. So people guess. So the firm's understanding of its own utilization is wrong. So pricing, staffing, and margin decisions are wrong.
I had watched this pattern destroy margin at the firm I worked for. Identified 372 billable hours (~565K NOK) at one client alone that were leaking from poor time logging. The fix at the firm level was "log more honestly." That fix doesn't work. Humans can't be honest about memory they don't have.
Shape of the solution
A desktop activity tracker captures every window title and app transition at minute granularity. A Claude Code skill consumes the day's raw stream and produces a structured time-entry note in the vault. The note has:
- A Mermaid gantt showing every block by client
- Per-client subtotals
- A multi-tasking overlap table (blocks active on multiple clients simultaneously)
- A focus score (how fragmented was the day)
- An interactive review section where I correct auto-attribution before it goes into the official time system
The daily cadence is: wake up, run the skill, scan the gantt, correct anything the auto-classifier got wrong, push the revised subtotals into Tripletex. Five minutes.
Key design decisions
1. Raw capture stays raw. Attribution is a separate layer.
The tracker produces a timestamped stream of (start, end, app, window_title) tuples. That file never gets edited. Attribution is a deterministic function over the stream plus a client-signal dictionary. If I change a classification rule, I can re-run the attribution against yesterday's stream and get a new result.
2. Classification is explainable, not black-box.
Every time block in the output note has a Notes column citing which window title and which rule produced the attribution. When I disagree, I can see exactly what the classifier saw and update the rule, not just this one row.
3. Multi-tasking is first-class, not an error. A block active on two clients isn't classified as "either/or." It's tagged as overlap and reported separately so I can see the real cost of context-switching. One day's note had 6 hours of double-booked time out of 18 total.
4. The output is a vault note, not a database row. The daily time entry is a markdown file with a canonical schema. It lives next to my project notes. I can search it, link to it, reference it from retros. The database the firm needs is downstream.
Proof
A real day's output (anonymized). Eighteen hours of activity, four clients, six hours double-booked:
The gantt renders inline in the note so I can see the shape of the day without clicking anywhere.
gantt
title Representative day
dateFormat HH:mm
axisFormat %H:%M
section Client A
Email reply :a1, 17:49, 18:15
Documentation :a2, 20:33, 22:24
section Client B
Sync call :b1, 10:24, 13:44
VS Code review :b2, 14:35, 16:42
section Internal
Research :s1, 08:07, 09:52
Planning :s2, 14:32, 16:10What I'd do with a team
Every professional-services firm I've worked with has this problem. They manage it with nagging, rule changes, quarterly clean-ups, or outsourced timesheet wardens. None of those work. People don't under-log from laziness; they under-log from not being able to reconstruct the day.
The team version of this is the same architecture (raw capture, attribution layer, per-person daily note) plus a team-level view that rolls up to project profitability. The daily review stays a per-person exercise, because that's where the truthful signal is. The aggregation is just a read over the reviewed notes.
Nothing about it is hospitality-specific. Any business whose output is structured human time has the same shape of problem and the same shape of solution.