← All notes

My clock stressed out a friend. It was gone in under a day

Sławek Łukjanow · · Not by Prompt Alone · episode 8 · Czytaj po polsku

Evening, Marta's phone buzzes. A WhatsApp from a friend: "Hey. My husband says the time counting in the app stresses him out 😂". And a moment later, just so there's no doubt: "In Zakupomat".

First reaction? Laughter. Marta replied "Hehe, timing the husband's shopping ;)". The second thought came a bit later, and it wasn't quite as funny...

A clock that was meant to be fun

A few days earlier, late in the evening, I had dropped one line onto Zakupomat's idea list: "A clock counting shopping time???". Three question marks, because I wasn't sure myself whether it made sense. The next day the clock was there. It starts once the first product on the list is ticked off, ticks next to "Bought", and after "Finish shopping" the congratulations tell you how long it took. Just a fun little extra.

A day later it went to the stores in version 1.9.0. Together with the "Catch the groceries!" game, 26 languages, a focus view, family statistics and settings. In "What's new" the clock got one line, the last one.

And here's the best part. Marta also asked: "And the game? Did he play?". The answer: "No. I don't think he noticed."

The game - a whole weekend of work, several rounds of balancing, an episode of this series of its own - unnoticed. One line about the clock - noticed. Just not the way I'd hoped 😂

Why is this even a problem

Because family shopping is not a race. Someone stands in front of the yogurt shelf wondering which one to take, a kid pulls towards the sweets, and on the phone next to the list the time is ticking. 12:34... 12:35... 12:36... For me it was a statistic. For someone else - a whip cracking over their head.

I could have treated it as a joke. But one person's joke is often what a few others think and never write. Nobody emails an app's maker to say "the clock stresses me out". They just open the app a little less willingly.

So Marta replied: "In the next version he'll add a way to turn off the counting". "He", meaning me. A commitment made on my behalf 😉

I broke my own rule

In the morning I opened an issue and wrote to Claude: let's make it possible to turn it off, maybe even hide it by default.

And here Claude did something I like it for. Before writing a single line of code, it stopped and asked. Because a few days earlier we had written a rule into the project's brain (D-043): every setting by default does what the app did before it existed. If you never open Settings, you see no difference. A clock hidden by default breaks that rule - directly.

I considered three paths:

  • A switch, with the clock on by default - in line with the rule. Except that the person stressed by the clock will never go looking for a way to turn it off. Our friend would still be stressed, just with a switch somewhere in Settings.
  • Drop the clock altogether - but there are people (me, for one!) who like it.
  • Ask on the first shopping trip - meaning yet another pop-up exactly when your hands are full with the basket. No.

I chose: the clock hidden by default, you turn it on in Settings. Also for those who already had it in 1.9.0. If you like it, you'll turn it on. If it stressed you out - you won't see it again.

Claude also suggested hiding the time on the congratulations screen while we were at it. Here I said no. The summary after shopping is something different from counting during it - it's all over by then, nobody is chasing you. It stayed.

What matters to me is that the exception didn't slip in "quietly". It's recorded as a separate decision (D-052), with the reason and with what could reverse it. We write rules so that we break them consciously, not so we can pretend they don't exist.

The first hotfix ever

"In the next version" sounded good on WhatsApp. Except the next version means weeks of collecting features. And the clock was ticking on phones right now.

Since July, the repo has had a documented hotfix procedure: a release/1.9.x branch cut from the version that's in the store, with just the one fix, its own version number, a release, and the changes merged back to the main branch. Documented... and never used once 😮

Honestly? This time it wasn't even needed. Since 1.9.0 there had been nothing in the app on the main branch except this fix, so a regular release would have produced exactly the same thing. But that's exactly why it was the perfect moment to practise it. Calmly, before a real fire comes along and there's no time to check whether the procedure works at all.

So off we went: a branch from the 1.9.0 tag, the fix carried over, version 1.9.1, "What's new" in 26 languages (one sentence, marked as "from your reports"), the iOS build sent to Apple, and an Android tag that builds by itself and uploads a draft to Google Play.

Along the way, a few things that were worth seeing now rather than in a fire:

  • The safety catch worked. Claude wanted to publish the draft on Google Play, and its own safety mode said stop. Same with merging without review. The last click to the store stays with a human - only my "Publish on Android" let the version through. And rightly so.
  • The website knows too much. I changed the clock's description on zakupomat.app together with the code. Had I deployed it right away, the site would have described a setting that wasn't in the store yet. Claude caught that, and the website change went separately, after the release.
  • "Closed" doesn't mean "in people's hands". The issue closed itself the moment it was merged - before anyone got the fix.
  • A forgotten step. It turned out iOS version 1.9.0 never made it onto the list of released versions, which is how the app knows it's behind and suggests an update. A small thing, but it only surfaced because someone walked the whole path from start to finish.

The result

The WhatsApp message - in the evening. Version 1.9.1 in the App Store and on Google Play - the next evening. Less than a day.

The clock lived in the stores for 4 days. Now it sits in Settings, waiting for those who like a bit of pressure 😉

What stays

  • Decision D-052 in the project's brain - an exception to the rule, with the reasoning.
  • A hotfix path that stopped being theory. The release/1.9.x branch stays for next time.
  • A lesson I'll remember: the smallest change in a release can be the one people feel the most. Nobody noticed the game; the clock - yes.

A feature doesn't have to be a bug to be rolled back. It's enough that it gets in someone's way in everyday life. And then what counts isn't how good the idea was, but how fast you can take it back.


What this means for your team: practise your emergency procedure when nothing is on fire - with a small, safe change. And break your own rules openly: with a recorded decision and a reason, not quietly. At ANSLAN we work the same way - decisions and exceptions to rules are recorded together with the reason.

Zakupomat is a shared family shopping app - free and without ads: zakupomat.app. You'll find the shopping clock in Settings 🙂