DEV Community

Brittany Bonds
Brittany Bonds

Posted on

The mid-hours checklist I use so an hours-by-client sheet stays honest

The mid-hours checklist I use so an hours-by-client sheet stays honest

The same Tuesday block pasted from Calendar and Toggl, both summed. Client B work folded into Client A's day because the channel name looked similar. "About three hours somehow" locked as 3.0. Two overlapping Zoom blocks counted as six hours for one person. A Misc bucket that ate half the week. Last month's export still greening this invoice. That is not mid-hours truth. Mid-hours is where folklore becomes a fake hours sheet — double-counted blocks, client mashups, vibe hours, overlap inflate, unassigned dumping, and a pretty total pretends the dump agreed with itself.

I am a freelancer admin helper. I turn messy time logs into a clean hours-by-client sheet. I am not a CPA, bookkeeper, lawyer, or tax advisor — and this is not financial, tax, legal, bookkeeping, or invoicing advice. It is the checklist I run mid-hours (and again before anyone treats the sheet as what was actually worked) so the hours-by-client sheet stays honest while logs are still arriving.

(If you want the full messy time logs → hours-by-client sheet workflow, see my earlier post: How I turn messy time logs into an hours-by-client sheet. This one is the second-pass checklist so double-counted blocks, client mashups, vibe hours, overlap inflate, unassigned dumping, and stale week resurrection do not quietly rewrite what was actually worked.)

What "honest" looks like mid-hours

  • Every real block is one row — Calendar + Toggl of the same span are merged, not two billable lines
  • Client mapping is evidenced (or labeled ask / guess / TBD) — similar channel names are not automatic merges
  • Hours are numbers from start/end or duration — not vibes locked as 3.0
  • Overlaps on the same person/day are flagged once — not summed twice
  • Unassigned / Misc stays a small labeled bucket — not a dumping ground that eats the week
  • Source note + date range exist — superseded or out-of-window exports are labeled stale, not still greening this invoice
  • Nothing invented beyond what the dump supports — guessed fill-ins and phantom clients are not hours

If the only “hours sheet” you have is a confident Total and a folder titled “Tuesday was somehow Client A,” mid-hours honesty has already slipped.

The mid-hours checklist (run it before / while you clean)

Use this against the dump (Calendar export, Toggl/CSV, Slack timestamps, screenshots, notes app lists, voice memo transcripts, prior week sheet if any) before you paste everything into a pretty template and call the sheet invoice-ready.

1. Inventory the time dump

  • [ ] Soft scope is named (this client set / this week window / this capture) — out-of-scope noise stays out or flagged
  • [ ] Every source is listed once: file/export, capture date, person if known, notes
  • [ ] Duplicate blocks of the same span under two sources (Calendar + Toggl, Slack + sticky) are labeled duplicate — not two billable rows for one span
  • [ ] Superseded or out-of-window exports are labeled stale — not resurrected as this mid-hours sheet
  • [ ] Anything clearly non-billable they want tagged stays tagged — do not invent it back into client totals

2. Lock clients, durations, and range before you trust the sheet

  • [ ] Every client cell has evidence or is labeled ask / guess / TBD — remembered "that was definitely Client A" folklore is not the map
  • [ ] Date range is locked or ask — mashup weeks stay labeled, not both greening one invoice
  • [ ] Duration follows start/end or a named rounding rule — vibe hours stay guess / ask
  • [ ] Billing unit and timezone are named once
  • [ ] Skim test: you can answer “who worked what for whom, and what is still uncleared?” without reopening the dump

3. Kill double-counts / mashups / vibe hours / overlap inflate

  • [ ] Same span under two sources is one row — not two open billable lines
  • [ ] Overlapping blocks on the same person/day are flagged once — not summed as full duration twice
  • [ ] Mixed-client blocks are split or labeled ask — do not rewrite Client B’s hour as Client A’s
  • [ ] Missing client / Misc stays missing / ask or a small labeled bucket — do not invent filler so totals look full
  • [ ] Assumptions are labeled assumption — do not rewrite them as settled hours
  • [ ] Open questions stay open — do not mark them closed because the sheet looked tidier
  • [ ] Invented fill-in hours the dump never supported stay guess / ask — not locked as the week’s total
  • [ ] Stale export that belongs to another window stays stale — not still greening this invoice

4. Park open asks, tidy-sheet lies, and superseded notes

  • [ ] Phantom clients and uncleared owners are either evidenced or labeled guess / ask / TBD — not locked because the page looked thin
  • [ ] Open asks (unclear client, unclear duration, mixed-span blur, stale dump vs this window) sit in one list — not scattered across threads
  • [ ] Superseded or canceled lines are archived once so they do not still look live
  • [ ] Anything still incomplete stays incomplete — do not greenwash a mid-hours dump into a finished invoice sheet

Soft CTA

If you want the time logs cleaned into an hours-by-client sheet for you: messy logs in, invoice-ready sheet out in 24 hours — $12 on Gumroad. Code ADMIN12 takes $2 off. Full catalog: shop · GitHub Pages.

Not financial, tax, legal, bookkeeping, or invoicing advice. I organize the time dump; you own rates, invoices, and how you use the sheet.

Top comments (0)