I edge skate a lot. One side effect I’ve noticed with this is that my days become very fragmented, because a large number of goals need attention to avoid derailing. This becomes a problem for goals which need a significant chunk of time to make real-world progress, but which I’m not ready to commit a significant amount of time to every day.
- Get uber-disciplined and start doing a lot on a few goals per day vs a little on a lot of goals every day.
- Write a script to auto-schedule breaks so that I could have goals that only require attention on certain days.
- Convince Beeminder to make Weekends Off support specifying an arbitrary set of weekdays that should be off each week.
Does anyone else experience this issue? How do you deal with it?
This might not be exactly what you want, but you can use https://github.com/DrTall/beelint to enforce a requirement that specific goals are only allowed to eep on specific days. You configure a meta goal for the “linter” and that goal will eep if you have a constraint violation.
For example, if you have goals A and B and you say that A can only eep on M/W/F and B can eep on T/Th then if it would be the case that they’re both eeping on the same day the linter goal will eep to force you to keep adding buffer to one of the goals until it is on a permitted day.
The configuration of which days are permitted can be static or based on scanning your Google Calendar.
That’s really neat, @drtall.
Say I have a goal for doing something for 4 hours per day, but I don’t want to have to do it on Wednesdays. I’m guessing that if I edge skate that goal, your tool would try to make me do that thing for 8 hours on Tuesday, yes?
If that’s the case, this would be great for little goals where doing 2 or 3x isn’t that bad, but probably not for the goals where even 2x would be unmanageable.
I wonder if the script could look ahead, count the days until the day you want to be free, and require that you get a little ahead each day to build up the needed buffer in time?
That’s exactly right, your additional requirement “piles up” as you described. You can’t stop until you move the eep day onto a satisfactory day (e.g. to Thursday since Wednesday isn’t allowed).
The tool isn’t smart enough to make your daily requirement possible, though. So you’re right that it might demand a superhuman effort from you if it isn’t possible to double up your daily output.
We could talk about how to make it smarter if you’re interested?
For sure. What do you have in mind?
Well, broadly speaking I think Beeminder could be a lot more powerful if it knew additional information about goals. I elaborate on some of that here: On making Beeminder more appealing to a wider audience .
For example, if Beeminder knew your daily maximum for a goal was 4h per day then it would know that if you’re setting yourself up to need to do 8h on Tuesday it needs to force you to do extra on the days leading up to that in order to span the Wednesday gap.
Right… It seems like Beeminder infers that a goal is time-based in some instances based on the format the user uses to input data points. Of course, this doesn’t work when users try to input minutes instead of hours. And it wouldn’t work if data points aren’t time based at all. You could imagine a goal where the user simply inputs 1 when they’ve done X, but X takes quite a bit of time to do. Or perhaps it’s variable. Sometimes X takes a few minutes, other times it takes hours. In that case you can’t even ask the user to tell you how much time a data point will represent.
Right, I don’t think there’s any way to infer it. I think it has to actually be a goal setting. But we could make such a thing a configuration option in beelint and use it to deduce which days are acceptable eeps based on the workload / maximum-per-day ratio.
Hmm, interesting. So:
- Specify 1-to-time ratio for each goal under management.
- Specify default assumed time available for Beeminder goals / day.
- Optionally, specify day-of-week time available overrides.
- Optionally, infer time available using calendar by subtracting time blocked off from time available.
- Run some magic scheduling algorithm to decide how much extra per day, per goal you need to do.
I guess, then, that under this system “break days” would just be days with zero available time.
Does that sound manageable?
Another potential solution occurred to me:
- Mirror data points from goal to new goal (IFTTT?)
- Set aggregation method to something like +1 if sum(day) >= desired block size
Unfortunately, such an aggregation method doesn’t yet exist, so, unless we can convince the Beeminder folks to add it, the steps would be more like:
- Make a goal with an aggregation function of nonzero
- Write a script that posts a +1 to the goal if the source goal’s daily sum >= desired block size
- Put that script on a cron
Note that either approach doesn’t directly care about block size, but rather if you reached some threshold for the entire day, regardless of how many smaller blocks during the day you used to do that. I think that’s an acceptable trade-off to make to allow you to always have a way to satisfy the goal’s requirements even if you were unavoidably interrupted during the task.
I’m doing a little experiment to try to address this issue. I have an msda-time goal with a rate of 0.1 hours / day, weekends off, so effectively half an hour per week. This results in me doing 7 minutes here and 10 minutes there, which is not ideal for the behavior I’m tracking, and leads to a lot of stress.
So–I’m archiving this goal and replacing it with a new goal, msda-blocks, which, instead of tracking time directly, tracks completed half-hour blocks of time. I’ve set it to 0.2 half-hour blocks per day (weekends off), which ends up being the same amount of time as the previous one, except that I’m on the hook to complete blocks of time, not minutes of time.
Here’s to hoping this will prove to be a generalizable solution.