SproutOS
← Blog
For peopleWorked example

The question three health apps can't answer

Not because the data is missing — because it is in three companies.

You run with one app, sleep with a ring, and live out of a work calendar. Each of the three is good. Each shows you a chart of itself.

And the question you actually have — am I falling behind because I am training badly, or because March has been brutal? — needs all three at once.

Why nobody ships this feature

Your fitness app could answer it, if it had your sleep and your calendar. It does not, and it never will: the data belongs to two competitors, and no amount of product roadmap fixes that.

So the answer today is three exports, three schemas, and an afternoon in a spreadsheet. Most people do it once, never again, and go back to guessing.

What changes when the database is yours

If those apps write into a database you own, the question stops being an integration and becomes a join.

select week
from   runs
join   sleep    using (week)
join   calendar using (week)
where  sleep.hours_median < 7
  and  calendar.meeting_hours > 30

Nobody had to build that. No vendor had to agree to it. It works because all three sets of rows are sitting in one place that belongs to the person who generated them.

The answer is either reassuring or actionable. Both beat a fourth chart.

Why this is only possible cheaply

A database per person is a sane idea only if a database costs cents. Priced like an always-on instance, one per user is a business nobody can run — which is why the companies best placed to offer you this are the least able to.

That is the whole reason the argument is available to us: everything here suspends when nothing is happening, and a personal database is idle nearly all of the time.

This describes how the platform works rather than a deployment we have run. When there is a customer story to tell, it will say so.