Hacker News new | ask | show | jobs
by racingmars 1244 days ago
Somewhat related to to-do apps, there was an application back in the classic Mac OS days that I remember (although I don't remember the name) which worked in a way I don't think I've seen since, but seems like a pretty reasonable approach to recurring to-do tasks.

Some repeating tasks have to happen on a fixed schedule, e.g. put the trash out every Tuesday night.

But many (most?) of my repeating tasks a) have quite a bit of wiggle room, and b) the scheduling of the next occurrence should be based on when I actually complete the previous occurrence.

So the way that application worked is you'd create tasks and say it could happen as early as this date, it would ideally happen on this date, and it must happen no later than this date. You'd also tell it the ideal time between occurrences. The "priority" of the task would automatically change as you move through that window of dates. When you mark the task as complete, the next earliest/ideal/latest dates would be based on the ideal time between occurrences.

Watering plants is a good example. Let's say I want to water my houseplants every 8 days. I could water them 7 days after I last watered them, but I could also be lazy and wait until 9 or 10 days. If I water on day 10, that doesn't mean I should water again in 6 days (which is what a strict 'repeat every 8 days' task manager would make me do); even though I'm "late" I still want to wait the ideal time until the next occurrence. [I'm just making this up, don't take houseplant care advice from me...although most of my plants live nice long lives.]

tl;dr: The ideal repeating task scheduling should allow for a window of time, not a specific day, in which a task should be completed, and the scheduling of the next window of time should be based on when I actually marked the previous one as complete.

4 comments

Org Mode supports a simpler and more manual form of this, by giving you three different repeater types on timestamps.

See https://orgmode.org/manual/Repeated-tasks.html for official manual, but in short:

- <2023-01-23 Mon +6d> - completing a task with such timestamp will move the time forward by 6 days. If you were supposed to do it 20 days ago, you'll have to complete it three times before it's no longer overdue (and becomes scheduled to 4 days from now, i.e. 4x6 - 20).

- <2023-01-23 Mon ++6d> - completing a task with such timestamp will move the time forward by however many 6-day increments it takes to get it at least 6 days ahead of now. E.g. if the task is overdue for 20 days, completing it now will make it due in 10 days (four 6-day increments are enough for the due date to be in the future, but you need an extra 6-day increment for due date to be at least 6 days in the future).

- <2023-01-23 Mon .+6d> - completing a task with such timestamp will move the due date to 6 days after today. If the task was 20 days overdue and you complete it now, the next due date is in 6 days.

These behaviors have some extra variations depending on whether the timestamp contains the hour/minute part, and on what unit is used for the increment - e.g. the difference between ++7d and ++1w is that the latter will ensure the task stays on the same day of the week as previously.

Taskwarrior [0] has different dates you can set that allow some of the features you want. There’s a scheduled date (earliest date to work on task), wait date (hide task until date), due date (must be completed by date), until date (when to drop it since it’s too late to do now).

If none of those work you could create a user defined attribute for your desired feature [1].

0: https://taskwarrior.org/docs/using_dates/

1: https://taskwarrior.org/docs/udas

The biggest problem with taskwarrior is taskd and its use of client certs to authenticate which prevents people just using lets encrypt with it and having to manage self signed certs.
That sounds like a really awesome idea! There's been a discussion about repeating tasks in Vikunja recently [0], just throwing that in there.

[0]: https://community.vikunja.io/t/repeatable-tasks-appear-to-ju...

Maybe not a great example? Isn’t watering plants a case where, with in reason, it really should tend towards a fixed interval? Isn’t the ultimate goal “10cc a day” or some such?