Skip to content
5 min read

Let users keep their own score

A personal record doesn't always need proof behind it. Before making an entry harder to create or correct, ask who the restriction actually helps.

A full GitHub contribution graph looks like evidence of a productive year. But you can generate that year in an afternoon.

Git lets you supply dates for your commits, and GitHub uses the author date to place them on your profile. Tools like gitfiti use backdated commits to draw pictures in the graph. You can fill gaps, create a convincing run of daily activity, or turn the whole thing into pixel art.

The commits exist. The work those green squares seem to imply might not. This doesn't give anyone permission to rewrite an arbitrary repository, but it does mean your own contribution graph is something you can arrange.

I find that useful to remember when thinking about product design. We can spend a surprising amount of effort making sure people can't manufacture a personal record, even when that record has very little consequence. Meanwhile, adding an entry or fixing a mistake becomes harder for everyone.

A result doesn't prove how you got there#

Wordle has the same limitation. The original browser game shipped its answer list in the JavaScript downloaded by the player; people extracted and shared it. Someone willing to inspect the game could find information they weren't supposed to use while solving it.

You don't need to inspect anything, though. Look up today's answer before playing and you can get it on the first guess. Checking every guess on a server wouldn't solve that problem. The server could confirm that you entered the right word, but it couldn't know whether you worked it out yourself.

That doesn't make the puzzle pointless. People enjoy solving it, comparing results, and sending the little grid to friends. Looking up the answer removes the part they came for. There's already a reason to play honestly.

Neither a green contribution square nor a winning Wordle grid establishes everything we might infer from it. Both can still be useful and enjoyable without carrying that burden.

The restriction reaches ordinary users first#

I ran into this while traveling. I'd kept a 400-day streak in a language learning app, but with my routine disrupted, I forgot that day's lesson until 11:56 p.m. I started then and finished about ten seconds after midnight. The app counted it as a missed day, and there was no way to correct the streak.

That streak only affected me. I'd remembered and completed the lesson, just a few seconds outside the cutoff. Being able to adjust my own record would have made it more useful to me.

The same problem appears when a timer is the only way to record time spent, or a reading log won't let you correct a completion date. Someone did the work away from the app, forgot to stop the clock, or imported a record with the wrong date. They know what happened. The software won't let them say so.

We tend to describe these restrictions in terms of the dishonest entry they prevent. We should also describe the ordinary entry they prevent. Both users encounter the same disabled button.

Making the record harder to correct can also make it less accurate. If a habit tracker locks yesterday, someone may put yesterday's walk under today. If a timer was left running, they may leave the inflated duration because editing is impossible. The database has followed every rule while becoming less useful to the person reading it.

I'd rather let someone record what they remember, correct it later, and get on with their day. A personal log can be useful without being independently verified.

Who relies on the number?#

The question I'd ask before adding a restriction is what happens if someone makes the number up.

If it changes only their own chart, there may be very little to protect. A fabricated reading history won't help them remember books they never read. An invented workout won't improve their fitness. They can make the display say what they like, but the product's underlying benefit still depends on what they actually do.

The answer changes when someone else relies on the record. Hours submitted for payment, a score that wins a prize, or activity used to rank other people all create consequences beyond the person entering the data. Verification has a job there. Even a casual shared challenge can need rules if cheating spoils it for the group.

Those consequences should determine the checks. A private practice log and a competition result can look similar on screen while needing very different treatment. Carrying the competition's restrictions into the private log makes a simple tool harder to use without giving its owner much in return.

Put the effort into a better record#

There's plenty worth validating in a personal tool. Dates need to be readable. Durations need to be values the application can handle. People should only be able to change records they have permission to change. Those checks help the software work reliably.

Proving that someone really spent forty minutes reading is a different undertaking. Before taking it on, I'd spend time making an entry quick to add, easy to find, and easy to correct. Let people backfill yesterday, import an old history, undo a mistake, and remove something they no longer want.

If the origin of an entry matters, show it. A manually entered duration can be labelled as manual. An imported record can retain its source. That gives someone useful context without blocking them from maintaining their own history.

I want personal software to be something people can return to after a busy week. They should be able to fill in what they remember and keep going. If someone uses that freedom to give themselves a perfect month, I can live with that. I'd rather spend the time making the tool easier for the person who just forgot to log Tuesday.