← All articles
8 min readScheduling,Decision Fatigue,Flowo

Which Scheduling Decisions Flowo Makes and Which It Asks About

By Maksym Bardakh Ivko · Chief Executive Officer

In short

Flowo, the planning app from BBMM Technologies, asks for a task's estimate and deadline and then chooses the day, the hour and the session length itself. It hands a decision back only when a task cannot fit before its deadline, as a short list of options that the planner has already simulated. We have not measured what this does to decision fatigue.

What the person decides

A task in Flowo needs a title, an estimate of the work and, when one exists, a deadline. A priority, a category and a daily limit in minutes are optional. Sleep, meals, rest and productive hours are set once and reused by every plan.

The planner takes the remaining decisions for each task.

  • The day the work lands on.
  • The hour it starts.
  • Whether it runs as one session or several.
  • Its position relative to other tasks.
  • The gap left before the next block.

The engine that does this is deterministic. It plans on a copy of the schedule in memory, on a background isolate, and the stored schedule changes only when a complete plan is committed.

How tasks are ordered

Flowo ranks tasks by an urgency score before it places any of them. For a task with a deadline, the score is the priority multiplied by 10 and divided by the slack in hours plus 0.1. Slack is the time left until the deadline, minus the time other blocks already occupy, minus the work that remains on the task and on the steps that follow it.

A task with no slack left scores 100 plus the number of hours it is short. A task without a deadline scores its priority multiplied by 2, plus 0.5 for each day since it was created, so an old task rises slowly.

Ordered subtasks of one parent keep their written order whatever their scores. Equal scores go to the older task.

How a slot is scored

Each candidate start time in Flowo gets one number: a blend of learned history and declared preference, multiplied by a fit factor. The history part is the weight our matrix holds for that category at that hour. The preference part is the share of the slot that falls inside the person's productive hours.

The share given to history is the number of confirmed sessions in the category divided by 50, capped at 0.7. Tasks with no category always get a history share of 0. That bucket mixes unrelated work, and its learned curve is close to flat.

Fit is the task's length divided by the longer of the task and the free window. A 30 minute task in a 3 hour window keeps one sixth of the score it would have in a 30 minute window, so short tasks settle into short gaps.

Candidates are the start of each free window and every whole hour inside it, up to 49 per window. A candidate that overlaps at least half of the task's slot in the previous plan on the same day has its score multiplied by 1.12. Exact ties go to the earliest start.

A category can declare an energy profile. High focus work maps the productive hours share onto the range 0.25 to 1, light work inverts it, and physical work scores a flat 0.5.

Session length and breathing room

Flowo searches for a slot in three passes and stops at the first pass that finds one.

  1. 1.A slot that holds the whole need and stays 15 minutes clear of the neighbouring work blocks.
  2. 2.A slot that holds the whole need with no gap.
  3. 3.A partial slot of at least the minimum session length, 15 minutes by default, with the remainder placed elsewhere.

Work of up to two hours is kept as one session when a gap allows it and the daily limit permits. The plan with gaps is adopted only when it costs no deadline and moves the k-th block at most k times 15 minutes later than the plan without gaps. Above 250 schedulable tasks the engine skips the gap pass, because planning runs under a 10 second watchdog.

For ordered subtasks, a candidate slot is accepted only if the steps after it still fit before the deadline. A raw capacity check runs first. Only a candidate that survives it is tested by simulating the remaining steps on a cloned timeline.

When a task does not fit

Every Flowo plan gives each task one of three statuses: planned, planned at the cost of the day rhythm, or not on time. The second status means the task fits only if rest, meals or sleep are shortened.

The compression planner takes from rest first, meals second and sleep last. It never goes below the minimum stored for each. It shortens a block only when the freed hours fall before the task's deadline and inside the hours the task's category allows, so an evening is never cut for a task due at 15:00.

Shortening is never automatic. A task carries a permission flag that is off by default, and a change to the task's deadline or estimate switches it off again.

The decision that is handed back

When a task with a deadline is not on time, Flowo opens a sheet titled 'Resolve schedule' with up to six options, listed from the cheapest.

  1. 1.Protect the deadline: shorten rest, meals or sleep by the amounts shown.
  2. 2.Work outside category hours, for this task only.
  3. 3.Use hours reserved by another category, for this task only.
  4. 4.Move the deadline to the earliest time that works.
  5. 5.Balance both: use recovery time and move the deadline by less.
  6. 6.Release a slot the person pinned by hand.

Each option is a plan the engine has already simulated. The deadline search moves in 15 minute steps and looks at most 365 days ahead. An option is offered only when every other task that fitted before still fits.

A last row, 'Leave as is', closes the sheet with nothing changed, and any choice asks for one confirmation. If nothing in the day rhythm can be shortened, the sheet shows that row disabled with a pointer to the My Day settings.

Keeping settled decisions settled

A decision the person has already made or seen is protected from later replans in Flowo. A block placed by hand is never moved by the engine. Blocks that start within the next two hours stay where they are unless the person's own change releases them. Edits made in quick succession are merged by an 800 millisecond debounce into one planning run.

Each block also stores why it landed where it did. The explanation sheet on a block names the deciding factor and shows the next best time with the reason it lost: history, productive hours, fit or stability.

We have not measured decision fatigue or any other outcome for the people who use Flowo. This article describes which choices the software makes and which it asks for. Flowo is a planning tool.

Key takeaways

  • Flowo ranks a task with a deadline by priority times 10 divided by slack hours plus 0.1, and a task with no slack left scores 100 plus the hours it is short.
  • A slot's score blends learned history and productive hours, and the history share is confirmed sessions divided by 50 with a cap of 0.7.
  • The planner tries a slot with a 15 minute gap first, then an exact slot, then a partial slot of at least the minimum session length.
  • Rest is shortened before meals and meals before sleep, only with a per-task permission that resets when the deadline or estimate changes.
  • The 'Resolve schedule' sheet lists up to six simulated options and offers one only when every other task that fitted still fits.

Frequently asked questions

What do I have to enter for Flowo to schedule a task?
A title and an estimate of the work are enough. A deadline, a priority, a category and a daily limit are optional. The planner chooses the day, the start time and the number of sessions from those values and from the day rhythm stored in settings.
How does Flowo decide what time a task goes?
It scores every candidate start time. The score blends the hours where sessions in that category were confirmed before with the productive hours the person declared, then multiplies by a fit factor that favours windows close to the task's length. The highest score wins and exact ties go to the earliest start.
Does Flowo split long tasks automatically?
Yes. Work of up to two hours stays as one session when a free gap can hold it. Longer work, or work that no single gap can hold, is placed in parts of at least the minimum session length, which is 15 minutes by default.
What happens in Flowo when a task cannot be finished before its deadline?
The task is marked as not on time and a sheet offers up to six options, such as shortening rest, working outside category hours or moving the deadline. Every option was simulated by the planner before it is shown. The sheet also has a row that leaves the plan as it is.
Will Flowo move blocks I placed myself?
No. A block placed by hand is never replaced by the planner. Blocks starting within the next two hours are also held in place during automatic replans.

References

  • Flowo
  • BBMM Technologies
  • Flowo client source: NewPlannerEngine, SlotScorer, CompressionPlanner and ChainValidator
  • Flowo client source: ResolutionOptionsService and TaskUrgencyCalculator
  • Dart documentation: isolates

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.