Let the User Say "Done": The Progress Bar That Was Quietly Lying
CareReady had a "23 / 28 items" progress bar. We deleted it — because 28 was a number the app made up, applying pressure toward a goal the user never set. Progress is not completion, and only the user can declare "done".
CareReady had a progress bar. “23 / 28 items.” Fill it up, confetti, you’re finished. Standard checklist UX. We deleted it.
Here’s the bug that isn’t a code bug: 28 was a number the app made up. The list is a generic superset — clothes, toiletries, documents, a spare pair of glasses. No real person needs all of it. So “23 / 28” doesn’t mean “82% ready.” It means “the app decided you’re missing five things you may not want.” The bar was applying pressure toward a goal the user never set, and the 100% celebration was congratulating people for obeying a list.
For a caregiver preparing a bag while a real person waits, that’s exactly the wrong feeling.
Progress ≠ completion
The fix started as a reframing, not a feature:
- Checking things off is progress — a memory aid, a running tally of what you’ve handled.
- Being done is a decision only the user can make. The app must never declare it.
Once you separate those, a lot of UI falls away:
- The denominator disappears. We show a count that only goes up — “23 packed” — never “23 / 28.” Nothing to complete, nothing to fail.
- The bar becomes decoration, not a mandate. (We kept a filling gauge because motion feels good; we removed the number that made it a target.)
- Completion becomes an explicit, human act: a “I’m ready!” button the user presses when they decide. That press — not the app hitting 100% — is what triggers the send-off.
// Before: the app decides you're done and celebrates
if (checked === total) { celebrate(); }
// After: the app never decides. The user declares it.
readyButton.addEventListener('click', () => {
celebrate(); // a warm send-off, on demand
});
Where it kept mattering
The same principle rippled outward.
The return trip. When you come home, an app-driven “0 / 12 returned” checklist implies you failed until you audit every item. But coming home isn’t a task to complete — the useful question is narrow: did I leave anything important at the facility? So the “on the way back” view drops the counting entirely, surfaces only the few things that genuinely hurt to lose (glasses, hearing aid, ID, medication), and tucks the rest behind an optional “show everything.” No score.
The rewards. With no forced 100%, celebration has to attach to real, user-owned moments: sealing a box you decided is full; pressing “I’m ready.” The dopamine is still there — it’s just honest about who’s in control.
The tell
The signal that a progress indicator is lying: can the user reasonably reach 100%, and does reaching it mean what you’re implying? If “done” depends on the user conforming to a list you generated, your bar is a compliance meter wearing a motivation costume.
Counting is a powerful default. It’s also a small act of authority. In a tool for people already carrying a lot of responsibility for someone else, we decided the app shouldn’t add one more thing telling them they’re not finished yet.
Takeaway: show what they’ve done, not what they’re “missing.” Let them be the one who says it’s done.
This is part of building CareReady, a released web app at VEAI LAB. The implementation is public in the CareReady repository; my broader technical-PM profile is at hire-veai.com.

Thanks for reading — built with care, for caregivers.