Search

MacroFactor’s Algorithms and Core Philosophy

This article is Part 2 of a series of “Behind the Scenes” articles about the MacroFactor app. In this article, Greg addresses the two most important aspects of MacroFactor: how the app actually works, and the overall philosophy that infuses the app.

Of the three articles in this series, this is probably going to be the most important one. The first was basic background information, and the third will primarily address some of the most common questions people have about MacroFactor – good information for users and potential users to be aware of, but nothing critically important. This article, however, addresses the two most important aspects of MacroFactor: how the app actually works, and the overall philosophy that infuses the app.

The first part of this article will discuss the algorithm we use to adjust calorie and macronutrient targets, as transparently as reasonably possible. I think that once people understand how the algorithm works, prospective users will have an easier time intuitively understanding the utility of the app, and current users will have an easier time understanding the logic behind their calorie and macronutrient adjustments week-to-week

The second part of this article will discuss, in broad terms (and some specific terms) why MacroFactor is the way it is, and why it feels the way it feels. A lot of new users report that, for reasons they can’t quite put their finger on, other nutrition trackers stress them out, but MacroFactor doesn’t. That’s not an accident. It’s the result of decisions driven by our core philosophy, which more-or-less boils down to, “what if nutrition apps didn’t try to guilt people into losing weight?” With that in mind, the second part of the article will discuss some of the key design and functionality decisions flowing from this philosophy.

How MacroFactor Actually Works

The first article in this series covered the broad strokes of how our algorithms works, but this article will discuss the system that MacroFactor uses to set and adjust calorie and macronutrient targets in quite a bit more depth.

Our algorithms are purely deterministic, and rest on a simple premise: changes in body mass over time reflect changes in stored chemical energy in the body, which are directly linked to energy balance (the difference between energy consumed and energy expended). Thus, deterministic algorithms make the most sense for an app that seeks to make appropriate adjustments to calorie and macronutrient targets to help people gain or lose weight at their desired rate, or maintain weight over time despite fluctuations in energy expenditure.

When you first start using MacroFactor, you’re taken through a brief series of questions that aims to do two things: 1) get a rough estimate of your energy expenditure, and 2) get you set up with an initial set of calorie and macronutrient targets that suit your goals, needs, and preferences. I’m going to ignore the actual calorie and macronutrient targets for now, because estimating energy expenditure is really the primary thing the rest of the app revolves around.

This initial estimate of daily energy expenditure is based on two factors: we use the Cunningham equation to estimate your basal metabolic rate (the amount of energy your body would use in a day, merely to stay alive), and a series of custom activity multipliers to estimate your maintenance energy needs (the amount of energy you’d need, per day, to neither gain nor lose weight, given your activity level).

Our initial estimate is a rough estimate, but it’s the best starting point we can generate before we have more data. However, I’ll note that even though this initial estimate of daily energy expenditure is easily the least bit of information for our algorithms, we still put a lot of thought into it. Most other fitness products use the Harris-Benedict equation to estimate basal metabolic rate; the Cunningham equation “feels” too simplistic because its estimate of basal metabolic rate is only based on one variable (lean body mass) rather than the four variables used by Harris-Benedict (sex, age, height, and weight), but it performs about as well the Harris-Benedict equation in most populations, and may be particularly useful for people with greater than average lean mass.

We also developed our own set of custom activity factors, which can be seen below. The standard activity multipliers have a notable drawback: they don’t separate activity associated with day-to-day life (work, school, or any waking time spent not engaging in purposeful exercise) from exercise activity (purposeful, moderate-to-intense weight lifting, cardio, etc.). So, if you have a sedentary job, but you lift weight six days per week, which activity multiplier should you choose? Or how about someone with a reasonably active job or lifestyle, who doesn’t engage in any purposeful exercise? The standard activity multipliers don’t account for a lot of different lifestyles, whereas ours remove quite a bit of unnecessary confusion.

At this point, we’ve generated a starting energy expenditure estimate. It’s the best estimate we can generate with limited information, but it’s not a great estimate because these types of estimates are inherently imprecise – even when accounting for lean body mass, basal metabolic rate differs considerably between individuals, and the amount of energy expended when performing a given level of physical activity will also differ considerably between individuals. Our initial estimate of energy requirements will hit the nail squarely on the head for some people, but it will be “wrong,” to varying degrees, for most people. If it wasn’t, that would imply that accurately estimating the energy requirements of individuals at a given point in time was quite easy; if that were the case, there would be no reason for MacroFactor to exist. This initial estimate of energy expenditure will change. Don’t get too attached to it.

Once we’ve generated a rough starting point, you just need to log your weight (ideally daily) and food intake (as thoroughly and accurately as is reasonable for you). Your initial energy expenditure estimate will “stick around” for a few days while our algorithms get to know you. After a week of using the app, your energy expenditure estimate will start moving, and the color of the bar representing your daily energy expenditure estimate will turn darker and darker orange over time, indicating that we have greater and greater confidence in our estimate of your daily energy needs. After about 14-30 days (depending on how consistently you track your weight and nutrition, and how close your initial energy expenditure estimate was to your “true” energy expenditure), the rate at which your energy expenditure estimate changes day-to-day should slow down, and more-or-less plateau. That’s when our algorithms have figured you out. From there, everything should be smooth sailing. Your estimated energy expenditure will increase or decrease over time as your actual energy expenditure increases or decreases over time, and we should be able to make excellent calorie and macronutrient recommendations and adjustments to help you reach your goals.

This is the start of my personal expenditure graph. My actual energy expenditure was 700kcal/day higher than the initial estimate (based on lean mass and activity levels), but MacroFactor figured me out in about 20 days.

So, what’s going on here? Let’s dig into the nuts and bolts of the algorithm.

The first key variable is your weight trend. Body weight is a pretty “noisy” measurement in the short term – you may wake up a few pounds or kilos heavier or lighter than normal because you ate a lot of sodium yesterday, you had a hard exercise session and depleted some glycogen, you have more or less undigested food in your intestinal tract than normal, or for any number of other reasons. However, over the longer term, there’s a lot of signal in all of that noise: long-term changes in weight reflect changes in chemical energy stored in the body, in the form of fats and proteins. So, our first job is to isolate the signal, but remove the noise.

This is my personal weight trend graph, so you can see how our weight trending algorithm handles fluctuations over time.

 

This article in the MacroFactor knowledge base explains how our weight trending algorithm works conceptually, but in more concrete terms, we use an averaging approach that accounts for the influence of weight values over a pretty long time scale, while placing more weight on more recent values. This is similar to (but not identical to) the approach I’d proposed in a YouTube comment years ago, which initially caught Cory’s eye.

With this more sophisticated approach to weight trending, you “care” about data over a fairly long time period, but you “care” more about relatively recent data than relatively old data, because more recent data is more informative about the system you’re trying to describe. This is pretty easy to understand conceptually. Since scale weight is noisy day-to-day, we don’t want to trust it completely, but if I were to ask you, “how much do you weigh?”, the number on the scale this morning would certainly be more informative than the number on the scale a week ago, and the number on the scale a week ago would certainly be more informative than the number on the scale a month ago. However, older data isn’t completely uninformative. If you’re been approximately the same weight for a few weeks, but you randomly woke up five pounds heavier today, your relatively stable weight over the past few weeks probably tells you more about your “true” weight than the number on the scale this morning.

For measuring real changes in weight (and therefore stored chemical energy) over time, our approach to weight trending accomplishes the two things we want to accomplish: 1) it doesn’t overreact to short-term fluctuations in weight, but 2) it isn’t slow to pick up on real trends as they develop.

If you’re trying to maintain your weight, and you’re a bit heavier or lighter than average for a day (or two, or three, or possibly even four), we don’t care too much, especially if your weight is moving back toward its longer-term baseline, but if you’re still quite a bit heavier or lighter than normal (relatively speaking) by day four or five, especially if the downward or upward trend is accelerating, we want to be able to pick up on the trend and start adjusting. This same logic applies if you’re gaining or losing weight, except we’re interested in deviations from the longer-term trend, rather than the longer-term baseline.

In short, we use a pretty sophisticated approach to weight trending, which allows us to pick up the signal (true changes in weight over time), while filtering out the noise (short-term fluctuations in weight that don’t reflect real changes in chemical energy storage).

At this point, if you’re starting to feel like I’ve gotten lost or sidetracked, don’t worry. We’re getting very close to our destination: explaining how MacroFactor adjusts calorie and macronutrient targets week to week.

Remember, changes in weight reflect changes in stored chemical energy over time. Luckily for us, stored chemical energy can be described by the amount of heat that would be released if that energy was utilized. In other words: calories.

This means we can estimate the caloric content of weight gained or lost once we’ve identified your weight trend, and that tells us how large of a calorie deficit or surplus you’ve been in. If we know that information, and we know your energy intake over time (i.e. if you’ve been consistently and accurately logging your nutrition intake), we can estimate your daily energy expenditure with a high degree of accuracy. This estimate of your daily energy expenditure, based on your actual body weight and nutrition data, will be far more accurate and reliable than the energy expenditure estimate you started with (based on an equation that just considered your lean body mass and activity level).

From there, calorie and macronutrient recommendations and adjustments are a breeze. When you set up a new goal, we simply look at the rate at which you’d like to gain or lose weight, convert that rate of weight gain or loss to the size of the calorie surplus or deficit it represents, and add or subtract that figure from your daily energy expenditure. Once a goal is locked in, week-to-week adjustments move in concert with changes in your energy expenditure.

So, for example, if your activity levels increase, that increase will be reflected by the combination of your nutrition and weight trend data: either your weight will keep changing (or not changing) at the rate it was previously while your calorie intake increases, or your weight trend will bend downward (increasing at a slower rate, decreasing it was previously flat, or decreasing at a faster rate if it was already decreasing) while your calorie intake remains constant. When this happens, your calculated energy expenditure will increase, and your calorie recommendations will increase. The opposite is also true; if metabolic adaptation occurs while you’re trying to lose weight, that will also be reflected by the combination of your nutrition and weight data, which will decrease your calculated energy expenditure, in turn decreasing your calorie targets.

Once calorie recommendations have been set or adjusted, macronutrient recommendations and adjustments are also a cinch. They’re largely (or completely) based on preference. If you’re on a “collaborative” program, the algorithm will adjust your weekly calorie budget, and you’ll have all the freedom in the world to set and adjust your own macronutrient targets from there. If you’re using a “coached” plan – the default for new users – your protein targets will be based on the type of exercise you do (no serious exercise, just endurance training, just resistance training, or a combination of endurance and resistance training), and your preferences (whether you want to be near the bottom, middle, or upper end of the advisable range for the type of exercise you do). Carbohydrate and dietary fat targets are purely preference-based. When calorie adjustments occur, we respect your macronutrient preferences, to the greatest extent possible. If, for whatever reason, you have a very low calorie target, we prioritize maintaining fat intake at a safe level for normal metabolic and hormonal health, followed by maintaining protein intake to preserve lean mass, followed by carb intake. 

And…that’s about it! I held a few key details back (what, exactly, is the calorie content implied by a particular rate of weight gain or loss? How does it differ in different situations?), I didn’t discuss a few other small adjustments that make our systems more robust to a wider variety of scenarios than the “vanilla” version would be, and there’s also a very light dusting of magic, but that’s a pretty thorough explanation of how our algorithms and “coaching” system work. I’m trying to strike a balance of making sure you can have a really solid conceptual understanding of our system’s inner workings, without making it easy to completely reverse-engineer.

(I’ll also note that our algorithms are only going to improve over time; we already have the most sophisticated system out there, but as soon we have enough user data, the possibilities for fine-tuning are virtually limitless. Professors regularly consult with Eric for advice regarding statistical analysis, and Rebecca has a graduate-level education in data science and machine learning from MIT. As I mentioned in the first article, we have the best team for transforming your weight and nutrition data into actionable recommendations and advice.)

This may have been a more thorough explanation than you were expecting, but I think this level of detail is worthwhile, for several reasons.

First, we’re committed to being as transparent as is reasonable, as I mentioned in the first part of this series. That’s an easy thing for someone to bullshit about in the hopes that it will create positive brand associations, but if my willingness to divulge a large chunk of our “secret recipe” (with the rest of the team’s blessing, of course) doesn’t illustrate that we’re serious about our commitment, I don’t know what will.

Second, this explanation should illustrate how our “adherence neutral” coaching adjustments are possible. Some other apps with functionality that’s similar to MacroFactor require the users to have more-or-less perfect adherence to calorie and macro targets in order to receive weekly calorie and macro adjustments. Since that’s an established pattern within this niche, I’ve seen quite a bit of skepticism about whether “adherence neutral” calorie and macro adjustments are even possible; if you don’t actually need to require an extreme degree of adherence to make appropriate program adjustments, why would you? Is the MacroFactor team lying about the capabilities of their algorithms to get a competitive edge?

However, now that you understand how our MacroFactor works, the reason we don’t need to require perfect adherence should be pretty obvious: what we’re actually doing is solving for energy expenditure. If you can do a good job of solving for energy expenditure (and you can therefore track changes in energy expenditure over time), the final step of actually recommending and adjusting calorie and macro targets is simple. In our system for estimating energy expenditure, “adherence” is irrelevant. The algorithms don’t even need to know your goal (much less whether you’re sticking to it); you could use MacroFactor for the simple purpose of tracking your energy expenditure over time, with no weight-related goals at all. As long as you track your weight and nutrition, accurately and consistently, MacroFactor will have no trouble calculating your energy expenditure, so it will have no problem generating and adjusting calorie and macronutrient targets for any weight-related goal.

In this long-term expenditure graph, the ups and downs correspond with periods of different goals, different activity levels, etc., and the changing colors represent days with missing data. You can see that MacroFactor handles things pretty well without wild swings. For scale, this covers about eight months.

 

Third, I think it’s worthwhile for illustrating the sorts of scenarios where our algorithms struggle, versus situations where they may be expected to struggle, but actually perform really well.

Assuming you track your weight and nutrition data accurately and consistently, there are two scenarios where our algorithms really struggle. First, if you have a relatively large, persistent change in body weight that doesn’t reflect actual changes in energy storage, we’ll wind up providing reasonably inappropriate calorie and macro adjustments for a week (or possibly two weeks, if the weight change is large enough). For example, if you’re someone who gains a significant amount of weight when you start using creatine, that change in weight doesn’t reflect significant changes in energy storage; we’d (erroneously) believe your energy expenditure was dropping, and decrease our calorie recommendations. The same would apply if you switched from a very low-carb diet to a high-carb diet (and stayed on a high-carb diet), or if you went from consuming virtually no dietary fiber to a considerable amount of dietary fiber (and kept consuming a considerable amount of dietary fiber). Conversely, if you switched from a high-carb to a low-carb diet (and lost weight due to glycogen depletion), the opposite would occur – calorie recommendations may be a bit too high for a week or two.

Our algorithms also struggle in the face of a very large, somewhat protracted, anomalous increase in energy expenditure. For example, if you’re a recreational cyclist, and you embark on a once-per-year, weeklong cycling excursion where you’re burning a couple thousand additional calories per day, our algorithms won’t know that this true increase in energy expenditure is a momentary aberration, rather than the “new normal.” Once you get home and return to your normal schedule, it may take a couple of weeks for your estimated energy expenditure to return to normal.

I don’t mind admitting that our algorithms don’t produce absolutely perfect recommendations in every conceivable scenario, for several reasons. First, transparency. Second, I don’t want users to be surprised by (or unprepared for) one of these situations. Third, MacroFactor has a very simple solution for these rare scenarios: just don’t do your weekly check-in for a week (or two). Once the rare event has been “priced in,” your energy expenditure estimate will stabilize, and you can start checking in again.

Conversely, our algorithms will handle most situations splendidly.

Did you eat a huge meal with a ton of carbs and sodium, so you wake up several pounds/kilos heavier than normal? That’s totally fine, and I hope it was delicious! Your weight will trend back down, our algorithms won’t over-react, and you won’t get slapped with a huge reduction in recommended calories.

Are you up a couple pounds/kilos on the scale for a few days each month due to your period? No worries! Our algorithms will handle it beautifully. I knew that this situation would theoretically be handled well, but since approximately half of all people on this planet either menstruate, have menstruated, or will menstruate, we were on high alert during alpha and beta testing to make sure there was no negative feedback about how our algorithm made adjustments around peoples’ monthly cycles. Thus far, feedback has been absolutely flawless.

Were you unable to track your weight and nutrition for several days (or even several weeks)? That’s completely okay. We don’t expect you to track your macros when you’re sick, or take your scale (and ESPECIALLY not your food scale) on vacation. Just start tracking again when it makes sense, and we’ll carry forward your last “high confidence” energy expenditure value to get things rolling again.

Were you far more active than normal for a single day? That’s also totally fine; it takes a large, multi-day excursion from the norm for your energy expenditure estimate to start trending up due to large increases in activity. The algorithm will handle this just fine.

Want to just take a break from your diet for a day? Or a week? Or two weeks? There have been a lot of questions about how to take a “diet break” using MacroFactor. You could absolutely change your goal from “lose” to “maintain” for the duration of your diet break, or you could simply stick with your current weight loss goal in the app, but use your estimated energy expenditure as your new calorie target, and basically ignore your macronutrient targets for a while.

Furthermore, there’s one scenario where the algorithms theoretically struggle, but where I think they actually behave quite well, for practical purposes. Remember, the algorithms do struggle in situations where notable changes in weight don’t necessarily reflect changes in energy storage. However, there’s one such situation where I actually like the way the algorithms behave: when you start a new weight loss or weight gain phase. When you transition into a caloric deficit from a prior state of maintenance or a caloric surplus, your weight will generally drop quite a bit, pretty quickly. This initial change primarily reflects a bit of glycogen depletion, combined with a decrease in intestinal contents. The opposite occurs when you transition into a caloric surplus. When this happens, the algorithms will initially think you’re losing or gaining weight a bit faster than desired, and therefore increase or decrease (respectively) your calorie targets a bit. Over the next week or two, your calorie targets will ease themselves to the appropriate levels of your desired rate of weight gain or loss. In effect, this behavior grants you a week or two to “ease into” your weight loss or weight gain phase. It’s a behavior that’s theoretically slightly “incorrect,” but I think that practically, it grants people a bit of time to adapt their lifestyle to their new goal, rather than being tossed in the deep end all at once.

Finally, I think that explaining the algorithms serves the purpose of illustrating why certain things are possible with our app, and for explaining certain behaviors of the coaching algorithm that may initially appear to be counterintuitive.

Because our energy expenditure calculation is at the heart of MacroFactor, and since the energy expenditure calculation is based solely on weight and nutrition data, the algorithm can “get to know you” from day 1 if you have prior, high quality data you can fill in. If you don’t, no worries! Everything will be fine-tuned in 14-30 days. But if you have 14-30 days of prior data, you can enter it in on the “Habits” tab to get everything humming along nicely, right out of the gate. As a note: if you back-fill old weight and nutrition data, create a new macro program so that your calorie and macronutrient targets will reflect your updated energy expenditure value, rather than our initial, imprecise estimate.

Because our algorithms only require weight and nutrition data, that explains why MacroFactor can provide “coaching” to people who still prefer using other food loggers. As long as you feed your data to the algorithm (yum yum), we can provide the same calorie and macro adjustments to you as we provide to people who use the native MacroFactor food logger.

Finally, the nature of our algorithms helps explain calorie and macro updates that some users find to be counterintuitive. For example, in our Facebook group, users will occasionally make posts along the lines of, “I went over my calorie targets last week, but in my last check-in, the app increased my calories this week, instead of decreasing them. What’s going on?” Those are completely understandable questions, because that’s how some apps (and a lot of nutrition coaches) operate. The thinking more-or-less goes: “if I was over my calorie target last week, I’m going to be forced to ‘make up’ for it next week.” However, that’s not how our system operates at all!

At the start of each week, we give you targets that will help you gain or lose weight at your desired rate, based on everything we know about you at the time we make our recommendations. Over the next week, we gather more information. At your next check-in, we make adjustments based on updated information, with the goal of helping you gain or lose weight, at your desired rate, over the following week. Each week is, therefore, its own self-contained unit. The goal of the algorithm is to help you meet your goal for that week, and that week alone.

So, in the example above, we’re not going to force people to “make up for” deviating from their calorie and macro targets for the week! We’re just going to use what you actually ate, and how your weight actually changed to make recommendations for the next week. For example, if we thought you needed to eat 2500kcal/day to lose weight at your desired rate, but you consistently ate 2600kcal/day, and you wound up losing weight at your desired rate, why would we bump your calorie target down to 2400kcal/day to “make up for” eating 100kcal/day more than your previous targets? We just learned that 2600kcal/day is a more appropriate target than 2500kcal/day was, so of course we’re going to bump your calorie targets up! The same logic applies across the board – we’re constantly updating and refining our estimate of your energy expenditure, and using that information to adjust your targets for the next week. Ultimately, it’s all just information. Our recommendations are informative, not punitive.

That’s actually an excellent segue into…

Our core philosophy

Our philosophy is simple: we want to help you reach your goals, while taking as much stress as possible out of food logging. In a lot of insidious little ways, other food loggers seem to be designed to cause stress and encourage neurotic behaviors. We’ve designed MacroFactor, top-to-bottom, to break that mold.

The most obvious way we try to take the stress out of logging is via the way our core feature functions: adherence-neutral calorie and macro adjustments. You’re completely in control of every step of the process. You set a goal, and we tell you how to get there, but it’s totally fine if you don’t follow our advice. We’ll make appropriate adjustments to your calorie and macro targets based on what you log, regardless of how close you came to hitting your targets from the previous week.

Our algorithms don’t function any worse if you deviate from your targets. Lord knows I don’t hit my numbers squarely on the head every day (or sometimes even for weeks at a time)! There are plenty of reasons you may want to deviate from your calorie and macro targets – a big social event, a coworker bringing doughnuts into the office, a new restaurant opening in town, or simply not feeling like thinking too hard about your nutrition for a day – and our algorithms will take them all in stride, continuing to provide appropriate recommendations and adjustments for you and your goals.

You don’t have to eat like a robot and perfectly adhere to your daily or weekly targets for us to make appropriate adjustments to your weekly calorie and macro targets over time. We believe that you shouldn’t have to work for your nutrition app; we believe your nutrition app should work for you. It’s our job to tell you how to reach your goals, but everything else is in your hands.

However, our philosophy of reducing stress extends well beyond our adherence-neutral calorie and macro adjustments.

For starters, independent of the “adherence-neutral” framework we use for calorie and macro adjustments, simply having targets that are clearly derived from your actual data really puts many people’s minds at ease. One of the things that’s stressed me out when trying to lose weight previously was the feeling that I was never quite sure if my personal calorie targets were correct. Were they unnecessarily low, which could make me less sharp, more lethargic, and more likely to lose muscle while dieting? Were they too high, meaning I’d take longer to reach my goal weight than intended? When would I need to update my targets, based on reductions in energy expenditure that naturally occur when dieting?

I personally know enough about nutrition that I had the capacity to answer those questions, and I should have felt confident in my answers … but I just didn’t. Dieting can fuck with your head. And for some people, it goes the opposite direction – “hardgainers” are often unsure if they’re actually eating enough to gain weight at the rate they want (weight loss just happens to be the thing I’ve personally struggled with). With that in mind, when you have calorie and macro targets that make sense, and are clearly being informed and updated based on your actual nutrition and weight data, that can remove virtually all of the guesswork (and therefore a lot of the stress) from a diet.

For another example of how we aim to take some of the stress out of food logging, when you’re setting your first goal in MacroFactor, you’ll notice that we don’t encourage you to select any particular goal; you can aim to gain weight, lose weight, or maintain your current weight, and nothing about our user interface tries to hassle you into choosing any particular goal – whatever you want to do is fine with us!

Our weight trending feature was also designed to reduce stress. As someone who experiences larger-than-average day-to-day weight swings, this has been huge for my psyche. If your weight is trending the way you want it to, but the scale gives you “bad” news one day (you’re trying to gain weight and your weight is below normal, or you’re trying to lose weight and your weight is above normal), it’s not hard to start catastrophizing. However, the nice, smooth, gradual procession of the weight trending line puts my mind at ease. It’s not uncommon for my weight on the scale to be heavier than yesterday, but my weight trend to still tick down (and, again, I’m personally losing weight at the moment, but the same principle applies in reverse if you’re trying to gain weight) due to how the weight trending feature works. The weight trend is also very resilient in the face of large weight swings that are short-lived. As you log your weight in MacroFactor, you realize more and more that your trended weight reported in the app is more indicative of reality than the day-to-day vicisitudes of the scale. This has helped me out tremendously.

One of the first things users notice about MacroFactor is the way we handle things when you go over your calorie or macro targets for a day. And by that, I mean we simply don’t do anything. We don’t throw a warning up on the screen to shame you for exceeding your calorie target or your carbohydrate target, or anything of that nature. We don’t turn any numbers red (and we all know that on the user interface of a nutrition app, red means “bad”) when you exceed a particular target. There are a few main reasons for that.

The numbers on the screen change, but that’s it: just neutral information with no implied judgments attached.

First, it’s just a stupid design decision. A user presumably has a particular calorie goal (I’m just going to use calories for this example to keep things simple) because that calorie goal is in line with some weight goal – it will help them maintain weight, gain weight at the desired rate, or lose weight at the desired rate. With that in mind, there’s a similar “cost” associated with any deviation from your target. Being under your calorie target has undesired effects (losing weight faster than desired, losing weight when the goal is to maintain weight, or gaining weight slower than desired), and being over your calorie target has undesired effects (losing weight slower than desired, gaining weight when the goal is to maintain weight, or gaining weight faster than desired). If you use pop-ups and changes to the user interface (turning numbers red) that indicate a user has done something bad when they exceed their targets, but you don’t do anything when a user is below their targets, you’re giving your true intentions away – you’re not trying to help people reach their goals on their terms. You’re just trying to cajole everyone into losing weight. And if the user already wants to lose weight, you’re trying to cajole them into losing weight faster than they said they want to. If the purpose of a nutrition app is truly to help the user reach their goals, there are only two defensible options: shame people for any deviations from their targets, or don’t shame people at all. We think the latter is the superior option, because a) shame doesn’t work, b) expecting people to hit a particular target on the head every day is wildly unrealistic and completely unnecessary and c) we’re not assholes.

Second, we don’t use pop-ups or UI changes to tell people they’re doing something “bad,” because we believe that what you want to do is your own damn business, and it’s not our job to judge you for it. Again, this is most relevant when people are trying to lose weight. When you put yourself in the shoes of someone who’s trying, and struggling, to lose weight (i.e. when I put myself in my own shoes), it becomes pretty obvious that design decisions that shame people for exceeding their calorie and/or macro targets are incredibly unhelpful. When you’re trying really hard to stick to a diet, you probably already feel a little bad when you exceed your calorie target for the day, simply because our society attaches so much stigma to weight and difficulties losing weight; speaking for myself, I certainly don’t need an app to tell me to feel even worse. I’m already suitably disappointed in myself, thank you very much. Furthermore, when you purposefully deviate from your diet – you’re celebrating a special occasion, going out with friends, or simply not in the mood to worry about it for a day – the last thing you need is an app telling you, “sorry. No fun for you. You wanted to relax and have a good time, but guess what? You fucked up, buddy.” For what it’s worth, I’ve never had that bad of a relationship with food or that bad of a relationship with my body – the notifications and red numbers were generally little more than an annoyance – but some of our users have told us that those UI decisions in other apps have really messed with their heads.

We don’t expect people to eat like robots, and we don’t shame people for the choices they make. One user called this approach, “depressingly revolutionary.” We’ll take it.

This philosophy of aiming to remove unnecessary stress influences virtually every decision we make. We aim to give you all of the information and guidance you need to reach your goals, without trying to shame you or force your hand.

Finally, you may be wondering why this article covers both our algorithm and our philosophy. At first, they may seem like strange bedfellows or, at minimum, strange topics to discuss in the same article. After all, the algorithm is the most data-driven, technical part of the app, which seems very divorced from our feel-good “don’t be mean to people” philosophy.

However, our philosophy, and the decisions flowing from our philosophy, are crucial for ensuring the algorithm works as well as possible, for as many users as possible.

One thing that a lot of our users report is that they’re simply doing a better job of logging their nutrition since they started using MacroFactor, and I think there’s a reason for that. The most common systematic food logging error people make is under-counting – they don’t log all of their foods, they underestimate portion sizes, etc. I think there are several reasons for that, but a major factor, for people coming from a calorie-counting background, is that they’re used to being met with negative feedback when they eat more than they’re “supposed” to eat. I assume that the intention of such feedback is to convince people to eat less, and maybe it accomplishes that goal to some degree, for some people (though, to be clear, that’s not always the best goal). However, it also encourages logging less – logging with less consistency, logging with less accuracy, and simply logging fewer calories, to avoid being met by feedback that says, in so many words, “you fucked up.”

When people start using MacroFactor, and they find there’s no penalty for exceeding calorie targets, and there’s no design elements or pop-ups or warnings telling them they did something wrong, that removes a fairly significant disincentive against accurate food logging. Furthermore, when you log everything, and log accurately (which means logging more calories for most people, most of the time), our algorithm responds appropriately by increasing calorie targets. Especially when you’re dieting, being told to eat more is generally preferable to being told to eat less, so beyond removing a disincentive, our system passively (but pretty strongly) incentivizes accurate food logging.

That’s where our algorithm and our philosophy meet. If we were jerks, our algorithms would be analyzing less accurate data from more users, and would therefore be making worse recommendations. A kinder approach to food logging doesn’t just make for happier users because their interactions with the app are more pleasant. A kinder approach also makes for happier users because it tangibly improves the recommendations we provide, and therefore makes it more likely that more people will reach their goals (and we’re glad to see that other people agree).

Scroll to Top