← All work  ·  Case 08 of 09 · Personal build

Personal buildInternal Productivity ToolSolo · Product + Eng2026 · In daily use

The to-do tool I built because ADO isn't for one person's Tuesday.

A single-file, offline-first workspace that unifies tasks, follow-ups, and links across a multi-product portfolio, built because no enterprise tool treats "who am I waiting on" as a first-class thing.

<5 sec
To capture a task
was ~20 sec (est.)
0
Approvals or infra needed
zero backend, browser-only
~10 min
Daily overhead recovered
self-reported estimate
0
Dependencies
vanilla JS, no build step
01The problem

Four products, four boards, no single place to think.

Running a multi-product portfolio means a different work-item board, doc space, and stakeholder cast for every product. None of it aggregates at the personal level. Capturing a quick "follow up with someone about this Thursday" meant either a heavyweight work-item ticket or a sticky note that would be gone by Friday.

02Discovery

"Waiting on someone" is a different job than "I owe this."

Two weeks of structured self-observation (logging every time I reached for a tool and what I actually wanted from it) surfaced the clearest finding: follow-up work has a distinct mental model from task work. It needs an owner and a source, and it needs its own review cadence. No tool at the personal level modeled that; it was always an afterthought bolted onto a generic to-do.

"Capture friction is the whole ballgame. If the tool of record demands too many fields, the thought just doesn't get captured."
03Approach

The boring, approval-free path was the one that would ship.

I made follow-ups a first-class type, with an owner, a source, and its own board, rather than a tag bolted onto a task. And I built the whole thing as a single-file, offline, browser-storage app with zero backend, specifically so it needed no security review, no hosting, and no approval to start using immediately on a locked-down work laptop.

The trade-off, stated honestly: no cross-device sync, a hard storage ceiling, and no framework, in exchange for a tool that got used starting day one instead of never shipping at all.
04Outcome

Replaced the bookmark bar and the sticky notes outright.

~20 sec to capture a taskbefore (est.)
+<5 sec, natural-language quick-addafter (est.)
5 tools to check "my status"before
+1 dashboardafter
05My role

What I owned, solo.

Discovery
Two weeks of structured self-observation; catalogued every friction point as a backlog item.
Product design
Modeled follow-ups as a first-class type with owner and source; kept a simple four-status task model over a granular one.
Full build
100% of the vanilla JS/HTML/CSS build: the task engine, follow-up board, notes, link hub, and a hand-rolled charting dashboard.
06Lessons

Constraints are a design input, not an obstacle.

The cheapest tool that ships beats the ideal tool that doesn't. Choosing zero-approval, zero-infra architecture was the actual reason this exists in daily use instead of as an unbuilt "someday" idea.

Model the user's mental model, not the domain's vocabulary. "Blocker" and "dependency" felt like statuses but were really reasons, a small reframe that removed constant classification hesitation.

Let's build what actually ships.