← All articles
8 min readGamification,Behavioral Design,Habits,Product

How Flowo Counts Habit Streaks and Handles a Missed Day

By Maksym Bardakh Ivko · Chief Executive Officer

In short

Flowo does show a streak count on habits. BBMM Technologies wrote the rules so that the count is recomputed from history every time, a period that is still open is pending, and history that is missing is never read as a miss. A weekly or monthly quota counts from a minimum the person sets, and an unmet quota is never carried into the next period. Flowo has no leaderboard and sends no notification about a streak.

What Flowo shows

Flowo displays a streak in two places for a habit: the habit's row in a list and the habit's detail screen. The row adds a flame and the number only when the count is above zero. At zero the row shows nothing about it.

The detail screen shows the count next to a completion rate, above a bar that splits past sessions into four groups: completed, partial, skipped and unanswered. Before the first scheduled day has passed, that block is replaced with the line "Stats appear after the first scheduled day". A streak of 0 and a rate of 0 percent would be true on day one and would read as a failure.

The focus timer has its own statistics screen with a current and a best streak, counted in calendar days.

How the count is computed

The habit streak in Flowo is a pure recompute. The service that produces it stores nothing. It receives the habit, the habit's scheduled blocks and a clock, and the same inputs always give the same result. It runs each time the status of a block changes.

Flowo has two kinds of habit, and each has its own unit.

  • A fixed series owes occurrences. They are generated from the recurrence rule, and an occurrence that has ended with a done block counts for its day.
  • A flexible habit owes an amount of time per period, where the period is a day, an ISO week or a calendar month. A period counts when the confirmed work inside it reaches the habit's minimum.

Period boundaries come from one ledger class that the planner also uses. It builds them from calendar dates, so a 23 or 25 hour day at a clock change is still one day.

What is treated as a miss

A miss in Flowo is a closed occurrence or a closed period that fell short. Several other cases look similar and are handled differently.

  • An occurrence that has not ended yet is pending. If it is already done it counts early.
  • An open period below its minimum is pending. It adds nothing and removes nothing.
  • An occurrence that was edited on its own, for example moved as a one-off, is stored as an exception date on the rule. The series never generates it, so it cannot be a miss.
  • A session answered as skipped records zero work. Once its occurrence has closed with no done block, it is a miss.
  • For a habit set to every second week or month, the periods in between owe nothing.
  • History that is missing before the last recorded completion is never a miss. The backward walk stops at that boundary and continues the stored count. It is capped at 600 periods.
  • The best streak is the larger of the stored and the recomputed value, so it never goes down.

A closed period under the minimum does end the current run. We kept that rule on purpose. A count that could never end would tell the person nothing about the weeks behind them.

This article describes how the software counts and why we chose these rules. We have not measured the effect of streaks on anyone, and Flowo is a planning tool that makes no claim about behaviour change.

Minimum and ideal

A flexible habit in Flowo carries two durations, an ideal and a minimum, and the streak counts from the minimum. The progress ring on the habit row fills against the ideal. The habit screen states the threshold in words: "Streak counts from" followed by the duration.

Confirmed work means a block with reported time above zero and a status of completed or partial. A partial session therefore counts toward the period. The minimum is clamped so that it can never exceed the ideal.

The period in which a habit is created asks for a share of the quota. A habit created on a Saturday owes the part of its weekly plan that matches the days left, rounded to whole sessions. If too few days remain for one session, the habit owes nothing until the next period.

What the planner does after a missed session

A missed session in Flowo changes the current period and nothing after it. Each period gets a fresh ledger, and an unmet remainder is not carried forward. A week that ended short adds no extra hours to the following week.

Inside a period the planner spaces sessions by a gap of the period's length divided by the maximum number of sessions, with a floor of one day. When the days left can no longer fit the remaining sessions at that gap, the gap rule gives way and the session is placed anyway.

A block that has passed with no answer is shown as neither done nor remaining. For ordinary tasks the engine holds such a block as awaiting an answer for two days and does not plan that hour a second time. It waits only while the time to the deadline is at least twice the remaining work. A task with no deadline waits for the full two days.

A future block that the person marks as skipped gets no reminder.

Steady Weeks, built and switched off

Steady Weeks is a second counter in the Flowo code that counts weeks and has no chain to break. A week is steady when the app was used on 4 of its 7 days. Only steady weeks inside the last 4 ISO weeks count, and they do not have to be consecutive.

The data is a list of day numbers kept on the device and pruned to that window on every write. Both numbers can be changed remotely.

The feature is off unless a remote flag turns it on, so the released build ships it inert. We built it this way because a window gives credit for showing up on most days and has no single day that carries the whole record.

Where the rules are still uneven

Flowo still contains two older streak rules next to the one described above. Completing a habit as a whole task runs an earlier rule that allows one late day and then resets the count to one. The focus timer's streak is defined as consecutive calendar days with a completed session and applies none of the pending or exception rules.

We describe them here because they are in the code today.

Key takeaways

  • Flowo shows a habit streak, and the list row displays it only when the count is above zero.
  • The streak service keeps no state and recomputes the count from the habit's scheduled blocks and a clock each time a block's status changes.
  • An open period and an occurrence that has not ended are pending, and an occurrence stored as an exception date is never counted as a miss.
  • A flexible habit's streak counts from a minimum duration that is clamped to stay at or below the ideal.
  • An unmet weekly or monthly quota is not carried into the next period.
  • Steady Weeks counts weeks with 4 active days inside a 4 week window and is switched off by default.

Frequently asked questions

Does Flowo have streaks?
Yes. Flowo shows a streak count on a habit's row and on its detail screen, and the focus timer statistics show a current and best streak in days. The row shows the count only when it is above zero. Flowo has no leaderboard and sends no notification about a streak.
Does skipping a habit day break the streak in Flowo?
Yes, once the day has closed. A scheduled occurrence of a fixed habit that ends with no done block is a miss and ends the current run, and answering skipped records zero work. An occurrence that was edited or moved on its own is stored as an exception date and is never counted as a miss. The best streak is kept and never decreases.
What happens in Flowo if I miss my weekly habit goal?
The week closes below its minimum and the current streak ends. The shortfall is not added to the next week, because each period starts with a fresh ledger. While the week is still open it is treated as pending and nothing is lost.
Does a partial session count toward a habit in Flowo?
Yes for flexible habits. Any block with reported time above zero and a status of completed or partial adds its minutes to the period. The period counts for the streak once those minutes reach the habit's minimum.
Will Flowo reschedule a session I did not answer?
For ordinary tasks, a passed block with no answer is held as awaiting an answer for two days, and during that time the planner does not schedule the same hour again. The wait ends earlier if the time to the deadline drops below twice the remaining work. After that the work returns to the plan.

References

About the author

Maksym Bardakh Ivko

Chief Executive Officer

Maksym leads product at BBMM Technologies. He designs Flowo’s scheduler and writes most of what ships in it.