I’ve created two Custom Activity Fields that - after an Activity has been completed - calculate the required Load to keep me (just) in the Optimal Zone. One is for if I do some more work today and the other is for tomorrow (by which time my Fitness and Fatigue will have decayed a bit). The calculations are trivial and involve the Fatigue and Fitness values for the Activity. So far so good. But the figures I’m getting displayed seem to be based on my Fitness and Fatigue before the current activity, as if the calculation of my Custom Fields is taking place before the re-calculation of the “standard” fields. The solution is to manually perform the Analyse action on the Activity, and that gives me the Custom Field answers I expect. But is there a way to force the precedence so that Custom Fields are calculated after everything else, to save me having to do a manual Analyse action?
Spoiler Alert: if you plan to go this route, you will get injured and/or overtrained within 3-6 months.
Best case, your performance will stall. And then you will probably say that you did everything to the letter and you don’t understand why you’re no longer progressing…
This is not how you should use the Fitness chart.
Start by reading the Guide section to understand what all these different tools are ment for and how you should/shouldn’t use them:
Hi!
Yes, I get your point and agree that this “continuous improvement” approach is unsustainable in the long term.
I think I misled you slightly. The “So far so good” refers to the calculations doing what I want them to do.
I’m just using it as a way of getting an idea of how much Load would put me back to Optimal from where I am now - I wouldn’t feel the need to follow it slavishly day after day.
And thanks for pointing me to the Fitness Page Guide. I’ll get onto it.
There is a Google docs spreadsheet that does what your activity fields sound like they are doing. Admittedly a bit more labour intensive initially in terms of setup & learning but perhaps also more flexible & more widely informative to justify that. But as @MedTechCD says it can lead to over cooking yourself as my screenshots show comparing my current sustainable CTL tolerance (70ish) with my 2021 lunacy (130ish), fun as it seemed at the time.
Discussed within:
These custom fields you’ve made sound really helpful @Chris_Hancock, have / will you make them accessible to others?
It’s always nice to see the little tool I put together, and occasionally update, get a mention in the forum
@David_Bannister, it looks like you’re using quite an old version there, you may want to go to this folder and get the latest version. Among other changes, the v3.x series aims to be more user-friendly and less complicated - particularly for first time users. It’s probably worth checking that folder every few months to see if there has been an update.
I think that for most of us, the easiest way to get a grip on future Fitness/Form is to simply use the plan function in Intervals.
Create a workout with simply a Name and a Load. Copy that (Alt drag on Windows) on the days that you have available for working out, and display the Fitness/Form floating pane after setting up ‘Show next week’ in the Activity page Options.
You will immediately see the influence of the workout load and you can adapt it to meet your goals.
@William_Barnes
They’re so trivial compared to the spreadsheet that I’m almost embarrassed to show them. But here goes.
I’m using the decay formula with the normal 42 and 7 day figures, which gives me that Fitness decays to 0.976472*Fitness and Fatigue decays to 0.866878*Fatigue overnight, and that new Load contributes 0.023528*Load to Fitness and 0.133122*Load to Fatigue. Hopefully I don’t need to derive these figures here.
If you’re going to do some LOAD and you want to know how much to do to keep yourself in the Optimal Zone today:
Fitness(new) = Fitness(old) + LOAD*0.023528
Fatigue(new)= Fatigue(old) + LOAD*0.133122
You want Fitness(new) - Fatigue(new) = -10 to keep you just in the Optimal Zone. So, substituting:
Fitness(old) + LOAD*0.023528 - Fatigue(old) - LOAD*0.133122 = -10
Rearranging, you get:
LOAD = (10 + Fitness(old) - Fatigue(old))/(0.133122 - 0.023528)
LOAD = (10 + Fitness(old) - Fatigue(old))/0.109594 [#1]
If you’ve finished for the day but you’re going to do some LOAD tomorrow:
Fitness(new) = Fitness(old)*0.976472 + LOAD*0.023528
Fatigue(new) = Fatigue(old)*0.866878 + LOAD*0.133122
You want Fitness(new) - Fatigue(new) = -10 to keep you just in the Optimal Zone. So, substituting:
Fitness(old)*0.976472 + LOAD*0.023528 - Fatigue(old)*0.866878 - LOAD*0.133122 = -10
Rearranging, you get:
LOAD = (10 + Fitness(old)*0.976472 - Fatigue(old)*0.866878)/(0.133122 - 0.023528)
LOAD = (10 + Fitness(old)*0.976472 - Fatigue(old)*0.866878)/0.109594 [#2]
So these simple formulas [1] and [2] are all I’m using (apart from stopping them going negative).
If you look at your current Fitness and Fatigue values, plug them into [2] and plan an activity for tomorrow with the Load it proposes, you should see your form curve hitting -10. It might not be spot-on because intervals only displays rounded figures.
I’m not a coach, and would not advise anyone to try to keep at the bottom (or is it the top?) of the Optimal Zone for ever.
It’s simply that I used to look at the fitness curve and wonder what I needed to do, either today or tomorrow, to put myself there. Well now I know
As far as Custom Activity Fields are concerned, the scripts (for today and tomorrow respectively) are:
Math.max(0, Math.round((10+wellness.ctl-wellness.atl)/0.109594))
Math.max(0, Math.round((10+wellness.ctl*0.976472-wellness.atl*0.866878)/0.109594))
The problem, as I mentioned in the original post, is that intervals.icu seems to calculate my custom activity fields before recalculating ctl and atl, so I have to do a manual Analyse action to get the correct figures . Maybe it’s better to just use a calculator!
Yep, I can’t disagree. My equations were just meant to be a fun problem for me to solve for my own use. It was only when I saw the calculations were out-of-date until I did a manual Analyse action that I raised it on the forum. I probably shouldn’t have gone into any detail .
Will do & many thanks for creating it & making it freely available.
Thanks for sharing your working - it all looks right at a glance. I believe that users can make their custom fields publicly accessible, have you looked into that? While I could copy/pasta your script to make my own custom fields, it would be nice to just search for your fields in the public library and add them to my activities - then if you improve it in the future I will hopefully see the benefit!
You can make them public here:
But changes will not come in automatically. That’s because as soon as someone uses the shared field, a personal copy of it is created.
If you want future changes, you will need to update the script yourself if you want to keep historical calculations. Or you remove the field and get the modified one (which will delete all historical values), followed by a re-analysis for all historical activities.
My advice to the authors is to post on the forum after a change of the script.
Thanks for the instructions and clarification
Unfortunately the fitness, fatigue and other related longitudinal stuff is calculated asynchronously a little after the activity has been analysed. This is for performance reasons to batch the calculation when multiple activities come in at once etc… So the first time an activity is analysed it will be out of date.
I am planning to add custom wellness fields computed with Javascript. These will run as part of that async computation and will be able to do this.
Thanks! I’m a bit reluctant to create public fields as they might seem to be working “out of the box” but - due to the asynchronous nature of the calculations (as alluded to by @david in this thread) - they can give the wrong results until you do a manual Analyse action.
Also, putting them at the Activity level isn’t really the best place - it’s just currently the only place until custom Wellness fields come along.
Sorry about that. But they are, after all, simple calculations - easy for anyone to create themselves (or even customise, for example if you’d rather set your Form target to -5, or -15).
Thanks for the clarification
Fair enough! I’ll keep my eyes out for when custom wellness fields come along and hopefully you will make one of those which does what your activity fields are trying to do