I started tracking my habits three years ago. Streaks, badges, check marks, the whole deal. And I noticed something: every time I broke a streak, I quit the app entirely.
Not just the habit. The whole tracker. Gone.
That bothered me. Because the behavior I was trying to build — running, reading, shipping code — wasn't gone. I'd skipped two days, not failed forever. But the app made it feel like failure was the only interpretation.
So I started thinking about it differently. What if habits were more like stocks?
The Penny Stock Parallel
A penny stock has three defining characteristics:
- High volatility — it swings wildly day to day
- Low floor — it can drop a lot without going to zero
- Recovery potential — it can bounce back hard when the fundamentals are good
That's basically a habit. My running habit isn't gone because I didn't run Tuesday. It's just... dipped. The fundamentals are still there. The muscle memory, the intention, the identity I've built around it.
When I miss a day, the "price" drops. But it doesn't go to zero. There's a floor. And when I come back, it starts recovering.
What I Actually Built
I built HabitStock to test this theory on myself.
Each habit you track gets a price. You start at 100. Every day you complete it, the price goes up. Every day you miss, it drops — but with a 1.8x asymmetry built in (because psychologically, losses hurt more than gains feel good).
The key feature: there's a price floor. Your habit never goes to zero. It can't. You can always recover.
After 30 days of tracking, here's what I learned:
Lesson 1: Dips feel different than failures
When I saw a chart that looked like a stock going through a rough patch, I didn't feel like giving up. I felt like buying. The mental model of "this is a dip, not a death" changed my behavior more than any streak counter ever did.
Lesson 2: Momentum is visible
A chart going up looks like momentum. You can see it. When your running habit has been trending up for 12 days, you feel that. You don't want to be the person who sells at the top.
Lesson 3: The 1.8x penalty is clarifying
Behavioral economists (Kahneman, Thaler) put the loss aversion ratio around 1.5-2.5x. I picked 1.8x. Seeing the math made explicit — "this miss will cost you more than the gain from yesterday" — made me take skips more seriously. Not in a guilt way. In a "this actually matters" way.
Lesson 4: The floor is the most important feature
This is the one I didn't expect. The price floor — the fact that your habit can drop to maybe 30% of its value but never to zero — made me less afraid to start. You can't lose the habit entirely. You can only defer it.
Penny stocks work the same way. They're not worthless until they're delisted. And your habits aren't dead until you stop believing they're possible.
The Code Side
If you're into the technical bits: HabitStock is built with Nuxt 3. The charting is done with Chart.js. The loss aversion math is pretty simple:
const priceChange = (completed) => {
if (completed) return baseGain; // e.g. +8
return -(baseGain * 1.8); // e.g. -14.4
};
const newPrice = Math.max(priceFloor, currentPrice + priceChange(completed));
Simple. But the psychology behind it is what makes it feel different.
Try It
If you've ever quit a tracker after breaking a streak, give HabitStock a try. It's free. No account required. Your habits are stored locally.
I'd love to know: what's your mental model for habit consistency? Do you think about momentum? Or is streaks-and-streaks still working for you?
Drop a comment — I'm genuinely curious how other devs and builders think about this.
Top comments (0)