Growing Planets vs Blooming Gardens — Designing Two Progression Systems
I build two apps. BrainFit is a brain training RPG set in outer space. BloomCard is a flashcard app wrapped in a garden metaphor. Both apps need to answer the same fundamental question: how do you make invisible progress feel real? Brain training improves cognition, but you cannot see synapses strengthening. Spaced repetition builds long-term memory, but memory is intangible. In both cases, the core activity is genuinely valuable — and genuinely invisible. That is the problem progression systems exist to solve.
Over the past year I have designed and implemented two completely different progression systems for these two apps, and the process taught me more about gamification design than any book or GDC talk ever did. This post is a side-by-side comparison of those two systems: what they share, where they diverge, and — most importantly — why the metaphor you choose shapes every design decision that follows.
Why Progression Metaphors Matter
Before diving into specifics, I want to make a claim that might sound strong: the metaphor you choose for your progression system is more important than its mechanics. Mechanics can be tuned. Thresholds can be adjusted. But the metaphor determines what feels natural to the player, what kinds of setbacks are acceptable, and what the emotional arc of the experience looks like.
Consider two hypothetical apps that both track user streaks. One uses a "building a tower" metaphor — each day adds a brick. The other uses a "tending a fire" metaphor — each day adds fuel. Mechanically identical. But the tower metaphor implies permanence: if you miss a day, does a brick disappear? That feels wrong. The fire metaphor implies decay: if you miss a day, the fire dims. That feels natural. The metaphor makes one kind of setback feel unfair and another feel expected.
This is exactly the dynamic that played out between BrainFit and BloomCard. BrainFit uses a cosmic evolution metaphor. BloomCard uses a garden growth metaphor. Both are progression systems tied to core app activity. But the metaphor led me to completely different design decisions about reversibility, pacing, and failure states.
BrainFit: Evolving Through the Cosmos
BrainFit's progression system is called planet evolution. Your personal planet starts as a cloud of stardust and evolves through five stages as your Brain Quotient (BQ) score improves:
| Stage | Name | BQ Threshold | Visual Description | |-------|------|-------------|-------------------| | 1 | Stardust | 0 | Swirling particles, no solid form | | 2 | Asteroid | ~20 | Rocky, irregular shape with craters | | 3 | Planet | ~40 | Spherical body with atmosphere and surface patterns | | 4 | Star System | ~65 | Central body with orbiting satellites | | 5 | Galaxy | ~85 | Spiral arms, stellar clusters, cosmic glow |
Each stage is rendered using 7+ CustomPainter classes that handle satellites, atmospheric layers, surface patterns, glow effects, and more. The visual difference between stages is dramatic — a stardust cloud looks nothing like a galaxy. This was intentional. I wanted each evolution to feel like a genuine transformation, not just a palette swap.
What Drives Evolution: BQ
The key design decision was tying evolution to BQ (Brain Quotient) rather than to raw play time or game scores. BQ is a composite score from 0 to 100 that aggregates your performance across six cognitive areas: memory (WIS), focus (AGI), logic (INT), language (CHA), processing speed (SPD), and spatial cognition (SPA). The overall BQ is the average of all active areas.
BQ itself is calculated using exponential moving average (EMA) smoothing with asymmetric alpha values:
alpha = 0.4 (when BQ is rising)
alpha = 0.15 (when BQ is falling)
This asymmetry is deliberate. BQ rises relatively quickly when you are improving — you want players to feel the reward of genuine progress. But it falls slowly when you have a bad session — you don't want a single off day to undo weeks of training. I wrote about the Elo system that feeds into BQ in a previous post, but the short version is: each cognitive area has its own Elo rating (600-1800), and BQ is derived from these ratings on a 0-100 scale.
Irreversibility: The Core Design Choice
Here is the most important design decision in BrainFit's progression system: evolution is irreversible. Once your planet reaches a new stage, it stays there forever. Even if your BQ drops later, your planet does not devolve.
This is tracked in the database through PlanetConfigs, which stores the maximum evolution stage ever achieved. The current BQ might fluctuate, but the visual representation only moves forward.
Why irreversible? Because of the cosmic metaphor. In the real universe, stars do not un-form into dust clouds. Galaxies do not collapse back into asteroids. Evolution in nature is a one-way process. Making planet evolution reversible would have violated the metaphor and, more importantly, would have created a punishing experience for brain training — an activity where daily performance variance is high and completely normal.
Brain training is inherently noisy. Your cognitive performance fluctuates based on sleep, stress, time of day, and dozens of other factors. If a bad night's sleep could devolve your galaxy back into a planet, the progression system would be measuring life circumstances rather than cognitive growth. Irreversibility lets the planet represent your peak capability, not your current state.
Decorations: Expression Without Regression
To give players ongoing engagement with their planet beyond evolution stages, I added a decoration system with 8 customization slots:
- Nebula — background cosmic environment
- Effect — particle effects around the planet
- Companion — small orbiting objects
- Orbit — orbital ring styles
- Ring — planetary ring variations
- Surface — surface texture patterns
- Aura — glow and energy effects
- Crown — top decoration element
Decorations are acquired through a gacha shop system using in-game currency (stardust and meteor fragments). They provide cosmetic variety without affecting the progression system itself. A stardust-stage planet with cool decorations looks different from a bare stardust-stage planet, but it is still stardust. The decorations layer expressiveness on top of the progression, without muddying the signal of what the stages mean.
BloomCard: Growing a Garden of Knowledge
BloomCard's progression system works at the individual card level rather than the account level. Every flashcard in your collection is a plant in your garden, and each card independently grows through four stages:
| Stage | Name | FSRS Stability | Visual | |-------|------|---------------|--------| | 1 | Seed | < 5 days | Small seed icon | | 2 | Sprout | < 20 days | Green shoot | | 3 | Bud | < 60 days | Stem with closed bud | | 4 | Bloom | >= 60 days | Full flower |
The implementation is minimal and elegant. From garden_utils.dart:
static GrowthStage getGrowthStage(double stability) {
if (stability < 5) return GrowthStage.seed;
if (stability < 20) return GrowthStage.sprout;
if (stability < 60) return GrowthStage.bud;
return GrowthStage.bloom;
}
Four lines of code. No complex state machines. No EMA smoothing. The growth stage is a pure function of one number: FSRS stability.
What Drives Growth: FSRS Stability
FSRS stability represents how many days a memory will persist at a 90% recall probability. I covered the full FSRS implementation in a previous post, but the relevant point here is that stability is a direct measurement of how well you know something. A card with stability of 5 means you will probably remember it for 5 days. A card with stability of 60 means you will remember it for two months.
This makes the growth stages semantically meaningful:
- Seed (stability < 5): You just learned this card. It is fragile. You might forget it by next week.
- Sprout (stability < 20): You have reviewed it a few times. It is taking root. You will probably remember it for a couple of weeks.
- Bud (stability < 60): This is becoming solid knowledge. You can go a month or more without reviewing it.
- Bloom (stability >= 60): You know this well. It is firmly planted in long-term memory.
The beauty of tying growth to stability rather than to review count or XP is that it honestly represents learning quality. You cannot spam reviews to force a card to bloom. The FSRS algorithm specifically prevents this — reviewing a card before its optimal interval does not increase stability much. Growth happens when you successfully recall a card after a meaningful gap, which is exactly when real learning happens.
Reversibility: The Garden Metaphor's Killer Feature
Here is where BloomCard's system fundamentally diverges from BrainFit: growth is reversible. Cards can wilt. A bloom can drop back to a bud. A sprout can shrivel back to a seed.
This happens naturally through the FSRS forgetting curve. If you stop reviewing a card, its retrievability decays over time. When you finally review it again and fail (rating it "Again"), the algorithm reduces its stability. If stability drops below a stage threshold, the card regresses.
And here is the thing: this feels completely natural. Because gardens wilt. If you stop watering your plants, they do not maintain their full bloom forever. The garden metaphor makes regression feel like an expected, understandable consequence rather than a punishment.
This creates a fundamentally different emotional dynamic from BrainFit. In BrainFit, your planet is a trophy — it represents what you have achieved. In BloomCard, your garden is a living ecosystem — it represents what you are currently maintaining. Both are valid framings, but they create very different relationships between the user and the app.
A garden with 200 cards in bloom is not just an achievement — it is an active commitment. It says "I know all of this right now." When a few cards wilt back to buds, it is a gentle signal: "These need attention." Not a punishment. Not a failure. Just a nudge.
The Garden as a Dashboard
BloomCard's garden screen functions as an at-a-glance health dashboard for your entire collection. The grid view shows every card as its growth-stage icon, sorted by creation date. You can filter by deck and immediately see the distribution of seeds, sprouts, buds, and blooms.
On top of the card growth, the garden itself has rich customization:
- 6 garden scenes — window sill, bookshelf, balcony, greenhouse, rooftop, enchanted forest, moonlit pond
- 11 weather effects — rain, snow, rainbow, fireflies, cherry blossoms, aurora, meteor shower, and more, including real weather integration
- 15 decorations across 6 zones — candles, cats, herb pots, frames, watering cans, music boxes, and seasonal items
All rendered with CustomPainter — no emoji anywhere. Every icon is hand-painted in code with 90+ painter classes across the app. I wrote about this rendering approach in the custom painters post.
The Key Design Difference: Irreversible vs Reversible
Let me distill the fundamental difference between these two systems, because I think it reveals something important about progression design in general.
BrainFit's planet evolution is a high-water mark. It tells you the best you have ever been. It is a trophy case. It rewards sustained effort and protects against bad days.
BloomCard's garden growth is a current-state indicator. It tells you what you know right now. It is a dashboard. It rewards ongoing maintenance and honestly reflects neglect.
Neither is objectively better. The right choice depends entirely on the nature of the core activity:
-
Brain training performance varies day-to-day. Your cognitive abilities are relatively stable over time, but your measured performance on any given day is noisy. A progression system that tracks moment-to-moment state would be chaotic and frustrating. The high-water mark approach smooths out the noise.
-
Memory retention decays without maintenance. If you learned 500 French words and stopped reviewing them, you genuinely do not know 500 French words anymore. A progression system that pretended you did would be lying to you. The current-state approach is honest.
The metaphor makes each approach feel right. Planets do not un-evolve, so irreversible progression feels cosmic and grand. Gardens wilt without care, so reversible progression feels natural and motivating.
Risk: Grinding Easy Games
Any progression system tied to player performance faces a fundamental risk: players will optimize for the metric rather than the underlying goal. In BrainFit, this would mean playing only easy games in your strongest cognitive area to farm BQ points.
BrainFit solves this at the Elo level. Because BQ is derived from Elo ratings, and Elo uses expected-score calculations, grinding easy problems yields diminishing returns. If your Elo is 1400 and you keep solving problems rated at 800, your expected score is 0.91 — so each correct answer barely moves your rating. The system naturally pushes you toward appropriately challenging content. I covered this mechanism in detail in the Elo difficulty post.
Additionally, BQ uses asymmetric EMA smoothing. The slow-fall alpha of 0.15 means your BQ does not crash after a tough session, but the fast-rise alpha of 0.4 means genuine improvement is rewarded promptly. Combined with protection mechanisms (3-loss-streak cap, daily floor of starting BQ minus 5, lifetime floor of 80% of personal best), the system makes grinding unattractive while keeping genuine progress visible.
Risk: Over-Reviewing
BloomCard faces the opposite risk. If growth is tied to stability, and stability increases with successful reviews, players might be tempted to review cards obsessively — far more than needed — to force their garden into full bloom.
FSRS solves this elegantly. The algorithm calculates optimal review intervals based on the forgetting curve. Reviewing a card before its scheduled date provides very little stability increase because the retrievability is still high — you are "reviewing" something you already remember well. The algorithm essentially tells you: "You don't need to review this yet. Come back in 12 days."
BloomCard reinforces this through its scheduling UI. The study session presents only cards that are due or overdue. You can access "Extra Study" mode to review cards that are not due, but the FSRS engine will not give much stability credit for these reviews. The garden growth naturally paces itself to real learning timelines.
This is important because over-reviewing is genuinely harmful to learning efficiency. The entire point of spaced repetition is to review at the moment of optimal difficulty — right when you are about to forget. Reviewing too early wastes time and provides weaker memory consolidation than waiting for the right moment.
Risk: Cosmetic-Only Engagement
There is a subtler risk that both apps face: players engaging with the cosmetic layer (decorations, garden scenes, weather effects) without engaging with the core activity. If someone opens BrainFit just to rearrange their planet's decorations, or opens BloomCard just to change the garden scene to cherry blossoms, the app has failed at its purpose.
Both apps address this by tying the cosmetic layer to earned currency that comes from core activity. In BrainFit, stardust and meteor fragments are earned by playing games and completing missions. In BloomCard, water drops are earned by studying cards and maintaining streaks. You cannot customize without playing, but customization never replaces playing.
The decorations are the reward, not the goal. The distinction matters.
The Principle: Gamification Serves the Core
After building both systems, I have arrived at a design principle that I think applies broadly:
The best progression systems are ones where optimizing for progression is identical to optimizing for the core activity.
In BrainFit, the fastest way to evolve your planet is to play challenging games across all six cognitive areas and perform well — which is exactly what a brain training app should encourage. Gaming the system (playing easy games, focusing on one area) is actively discouraged by the Elo-BQ pipeline.
In BloomCard, the fastest way to grow your garden is to review cards on schedule and recall them successfully — which is exactly what a spaced repetition app should encourage. Gaming the system (over-reviewing, cherry-picking easy cards) is actively discouraged by the FSRS algorithm.
When the progression incentive is perfectly aligned with the core activity, gamification is not a manipulative layer pasted on top. It is a visualization of genuine progress. The planet really does represent your cognitive growth. The garden really does represent your knowledge state. The numbers are real. The pictures are honest.
That is the standard I hold both systems to. If I ever find that a player could advance their progression without actually improving at the core skill, the system has a design flaw that needs fixing.
What I Would Do Differently
Building two progression systems in parallel gave me a rare opportunity to compare decisions in real time. A few things I would change:
BrainFit should have had more intermediate feedback. The jump from one evolution stage to the next can take weeks of consistent play. During that time, the planet looks the same. I partially addressed this with decorations and daily missions, but I think adding visual micro-changes within stages — slightly brighter atmosphere, more active particle effects as BQ approaches the next threshold — would make the between-stages experience feel more alive.
BloomCard's wilting could be gentler. In the current system, a card that drops from bloom (stability 60) to bud (stability 59.9) immediately loses its bloom visual. There is no grace period, no "wilting" animation that warns you before regression. A future version might add a "wilting" sub-state that signals "this card needs review soon" before it actually drops a stage.
Both apps could do more cross-pollination. BrainFit's irreversible high-water mark idea could work for BloomCard's collection feature — once you have bloomed a particular flower variety, it stays in your collection permanently even if the card wilts later. And BloomCard's current-state honesty could inform a "recent performance" indicator on BrainFit's planet — showing current BQ alongside the evolution stage so players can see both their peak and their present.
Closing Thoughts
Progression systems are not decoration. They are communication. They tell the player what the app values, what progress looks like, and what the consequences of inaction are. The metaphor you choose — cosmic evolution or garden growth — is not just an aesthetic decision. It is a promise about the emotional contract between the app and the user.
BrainFit promises: "Your growth is permanent. Bad days cannot take away what you have built." BloomCard promises: "Your garden is alive. It reflects what you truly know, right now."
Both promises are honest. Both create healthy relationships between the user and the core activity. And both are made possible not by the progression mechanics themselves, but by the underlying scoring systems — Elo and FSRS — that ensure the numbers behind the visuals are meaningful.
The lesson I keep coming back to: gamification done right is not about making things fun. It is about making invisible progress visible — and making sure the picture it paints is true.