DRAFT: The Tareable Diet

A picture of a scale with a bowl on it that's been tared

I’m pretty amenable to arguments about scale weight being a terrible metric for the goal of changing one’s physical shape. We have another blog post about when and why weight is a good metric to mind.

But let’s assume you’re convinced that you want to literally lose weight. Or that you have a weight that you’re certain you don’t want to exceed. Everything here applies equally well to maintaining weight as to losing it.

The hard thing about weight loss (besides the eating less bit) is that your weight fluctuates so much day to day, seemingly randomly. That means the feedback is not immediate and you never have a good sense of exactly how much you can eat. But of course the fluctuations aren’t random. With enough data we can understand them and you can get minute-by-minute guidance on how much to eat to stay on track towards your weight goal.

Here’s what you do.

Weigh in immediately before and immediately after every change in your weight. This includes using the bathroom, putting on or taking off clothes, and eating or drinking. Basically whenever anything goes into, out of, onto, or off of your body.

Every time you weigh in, the Tareable Diet App [1] prompts you for what changed and you choose any subset of the following:

  1. Breathed
  2. Sweated
  3. Peed
  4. Pooped
  5. Clothes on or off
  6. Ate
  7. Drank
  8. Barfed

By collecting that data the app can compute exactly how your weight changes throughout the day and can tell you moment by moment exactly how much food you can put in your face and still be on track to your target weight.

In its simplest version, it just tares your clothes (insert joke) and tells you continuously what the maximum you’re allowed to let the scale read is.



a. I’m too akratic.

You’re probably not so akratic that you’ll pick up a piece of pie, see that it will cost you $90 to put it in your piehole, and decide to do that.

b. I’ll wake up and waste whatever buffer I have on ice cream by 10am.

That’s near-term enough suffering (subsequent hours of fasting) that you’ll not want to do that (much).

c. I’ll eat lots of crap like potato chips that don’t weigh much.

The incentives to eat junk aren’t too different. But the Tareable Diet will reward you (with less fasting) for eating nutrient-dense stuff that will keep you full as long as possible.

d. Fasting that much isn’t healthy.

This absolutely means less fasting. You’re constantly shedding weight just by breathing (not to mention going to the bathroom) so it can never be too many hours from hitting the cap before you can eat again.

e. This would incentivize you to dehydrate yourself.

On the contrary, if you’re well hydrated then you get a nice drop in weight every time you pee which allows you to eat something like a meal.

Related Reading



[1] Yes, it’s pronounced the same as “terrible”.


Notes for a technical spec for MVP with no UI

We can do this as a new aggday.

It just assumes all double weigh-ins within 60 seconds of each other are before-and-after tarings. You can still always weigh in multiple times but not within 60 seconds else it will think you’re taring it. So two in a row where the 2nd one is higher means subtract that delta for the rest of the day.

What if you don’t get dressed fast enough? You can just hold the clothes if you haven’t put them on yet. Or get dressed in stages as long as you wait 60 seconds between stages.

What if you put on or take off more clothes later? You just have to keep in mind that any time you do that you need to weigh in right before and after.

Here’s an example that illustrates that it works:

  1. Wake up naked and weigh in at 70kg.
  2. Time passes, moisture is lost, you now weigh 69.9kg.
  3. Time to get dressed: gather clothes, step on scale without and with them. Weights are 69.9 & 70.4 ⇒ Δ = +0.5.
  4. Now all weights the rest of the day get 0.5 subtracted.
  5. Oops, it’s warm out, let’s ditch the sweater.
  6. Make sure it’s been 60s and then weigh in with and without sweater: 70.4 & 70.2 ⇒ Δ = -0.2.
  7. Now we have deltas [+.5, -.2] which sum to +0.3.
  8. So all subsequent weights get 0.3 subtracted.
  9. Your current weight with clothes-except-sweater is 70.2.
  10. So your real weight is 69.9, which is exactly right.

What if you forget and weigh in twice in a row for no reason? If the scale is accurate then you’ll add a delta of zero, which won’t matter. If the weights are randomly different, as they sometimes are, then that will throw everything off the rest of the day. The solution is that more than two weigh-ins within 60 seconds means ignore that batch of weigh-ins (or only count the min of them).

What if you put on a kilogram of clothes but when you tare the clothes back off again it happens to only see a delta of -0.9? Then you’ll be back to naked but Tareable will think there’s still a net delta of +0.1. So it will tell you you weigh 0.1kg less than you really do. That might be live-with-able or ideally there’s an option somewhere to throw away all the deltas. Or if it at least shows you the net delta it’s using and you know it to be wrong (like you’re naked again and it should be zero) you can just purposefully do a new taring with 100 grams of something in your hand to coerce it back to zero.


testdata = {{1, 70}, {100, 69.9}, {100, 70.4}, {200, 70.4}, {201, 70.2}, 
            {300, 70.2}, {400, 70.1}, {459, 80.1}, {459 + 59, 80.1}, {600, 80.1}};

tareable02[{{t1_, v1_}, {t2_, v2_}}] := v2 - v1

(* Helper for tareable *)
tareable0[l_] := If[Length[l] != 2, 0& /@ l, {0, tareable02[l]}]

(* Tareable algorithm. Adjusts the datapoints by treating all pairs 
   of datapoints within 60 seconds -- a string of more than 2 datapoints 
   with gaps less than 60 seconds doesn't count -- as a tare operation.
   Assumes a list of datapoints sorted by timestamp. *)
tareable[data_] := Module[{d},
  d = Accumulate@
    Flatten[tareable0 /@ 
      Split[data, Abs[First[#1] - First[#2]] <= 60 &], 1];
  MapThread[{First[#1], Last[#1] - #2} &, {data, d}]]