You can probably find the optimal resource allocation strategy if you are well-versed in multi-armed bandit and reinforcement learning. But often just respecting general optimization principle is enough.
You can do some gradient descent on time/effort resource allocation per activity parameters. As long as you don't change these parameters too fast (which OP was doing), and have a way to evaluate your progress (you can use Bayesian estimates aka Kalman or particle Filter there to track those smoother non-observable states). You will be just fine. It's not rocket science and you need to have a way to internalize it so that it can become practical.
The simple heuristic I suggested was make sure you always progress in all activities you care about, and avoid common optimization pitfalls such as oscillations (i.e. lack of stability) and local minimas.
Those damn oscillations are a typical symptom of being too greedy when selecting the step size. You think you are not progressing fast enough so you make a big adjustments then lose all progress. You can probably converge faster by using some line search procedure to find the optimal step-size, but the conservative approach of not changing things too quickly (small step-size) and letting time do the the work is good enough.
Usually you also don't start from scratch, as you are already doing some activities and are near equilibrium. And you add another activity, you slowly increase the time/effort investment parameters for this activity while taking it from used resources and keeping the monitoring to make sure slow but consistent progress is still happening everywhere.
I wonder if it's useful to incorporate Bayesian probability here to account for this. Like, I could start with my prior belief of what my fitness level would be given time/effort input, collect the data, then update my priors based on collected data. In theory, given enough time, the Bayesian method would have to converge on the right coefficients for your model.