getting-things-gnome / gtg

Getting Things GNOME! trunk
https://wiki.gnome.org/Apps/GTG
GNU General Public License v3.0
559 stars 164 forks source link

Drag & drop tasks into calendar to create events #1128

Open HibGut opened 4 months ago

HibGut commented 4 months ago

I realize this is a long shot since even a graphical calendar integration isn't part of GTG yet. But I live by my calendar. I schedule EVERYTHING. If it's not in the calendar, it won't get done. It also gives me a better idea what I can realistically accomplish next week.

Once a week I sit down, go through my to-do list and assign tasks as events to specific pomodoro-type time slots on my calendar, e.g. "Tue, 10:00 - 10:30, update financial forecast for Q3". Been doing this manually, but it's a tedious nightmare.

Could GTG implement creating CalDAV-compatible calendar events from to-do list items in an intuitive GUI-based way? By that I mean drag and drop into a calendar timeline, not tedious time selection dialogs.

To clarify, assigning tasks to calendar time slots shouldn't be a 1:1 relationship. Say, I already know I'll need a full hour for my forecast, so Tue, 10:00 - 10:30 from my example is not enough. I'll have to find a second slot for the other half hour. And the due date from my boss most likely will not correspond to the end of the second "work on it" time slot either. I'm going to schedule the "work on it" slots a couple days before the due date, so just in case I still can't finish within the two half-hour slots, the task should remain as unfinished in the task list until I check it off so I can schedule yet another "work on it" event later if needed.

nekohayo commented 1 month ago

By "into calendar", I presume you mean into a calendaring application, rather than into GTG's mini-calendar date picker widgets for the start/end dates fields.

As co-maintainer of both GTG and GNOME Calendar, I feel you.

I also know that it would be extremely difficult to achieve in a way that keeps anything in sync, unless you're just talking about the ability to convert/export a GTG task into a GNOME Calendar event (or vice-versa), and then any changes afterwards will diverge. In that case yes, that would probably be desirable, and maybe achievable, but won't happen unless someone designs & implements it.

I have no idea how this would work in practice, and this would require a bulletproof specification from the UX and code architecture standpoint (and probably with FreeDesktop portals, too), if anything because the two types of apps have very different data structures and formats.

See also my opinion from the other side of the fence:
https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/713#note_1666214

HibGut commented 1 week ago

difficult to achieve in a way that keeps anything in sync, unless you're just talking about the ability to convert/export a GTG task into a GNOME Calendar event

Yes, if you read my use case above, it should be clear that a sync between tasks and events isn't necessary. In fact, I'm not sure how that would even work. I just want to be able to fill my calendar for the next week with time slots dedicated to specific tasks.

This approach gave me a productivity boost. Most people complain that meetings are often time wasters. Yet, they fill their calendars with meetings and appointments, i.e. unimportant things, and leave blanks for "working on stuff". But deliverables created during "working on stuff" is what they actually get evaluated on, not on sitting in meetings. Their priorities are backwards. When an empty time slot comes around, they look at their to-do list, get overwhelmed and end up procrastinating or picking something easy, like filing away bills, instead of getting started on heavy weights like writing the next chapter of their master's thesis. But, hey, I worked!

This can be avoided by scheduling real work first. Every important task gets a dedicated time slot. In a team environment, it also makes you look less available, so team mates will not dump more boring meetings on you just because your calendar says you're free. This works very well for me.

In practice it'd look like this:

I have a typical week calendar view and a task list side by side. I don't care if its two different windows or even two different apps or all integrated in one. As long as the calendar accepts dropped items to create new events, that's all that matters.

Say the task list contains "Update Q3 financial forecast" from my earlier example. It has a due date of June 30. Let's say we're in the first week of June now. I'd grab that task from the list and drag it to Tue, June 3, at 10:00 am on the calendar. It automatically creates a calendar event "Update financial Q3 forecast" from 10:00 - 10:30 which also marks my (shared) calendar as "busy", so nobody will book meetings with me during that time. It is reserved for me to work on my deliverables.

The duration of 30 minutes can be an adjustable default, other people may prefer an hour or whatever for newly dropped tasks. Like with all events, the calendar will allow to adjust the duration of the new event simply by dragging the bottom edge of the time block in the Tuesday timeline. So if I already know I have a full hour, I could drag the end time to 11:00 am.

Worth thinking about is how it would deal with overlaps. Say, there is already a meeting scheduled at 10:15. Upon dropping the task at 10:00, it could shorten the event to fill the available time and end at 10:15 or it could stick with the default 30 minutes, create an overlap, and let me resolve it manually.

From my experience, I know updating the forecast will take me at least an hour, but on Tue, I was only able to schedule 30 minutes. So I grab the same task again from the task list and drag/drop it on Wed, 11:30 am, to reserve a second timeslot for my forecast from 11:30 - 12:00.

To make this work, the task in the task list should remain unaffected by all this. Due date is still June 30 and it is still incomplete even after the Wed session. So if for some reason I need more than an hour and am still not done on Wed at 12:00, I will schedule another half hour to finish it off on Thu, June 12, 9:00 - 9:30 using the same procedure as above. At the end of that session the forecast is finished, I check it off on my task list as complete and submit it to my boss several days early.

In theory, there could be a preference setting, so that the passing of a scheduled event automatically marks the task as complete. Is that what you meant with "keep anything in sync"? I find it hard to imagine when that would be preferrable. In realty, things always come up, emergencies happen and it would be dangerous to assume a task to be complete and remove it from the to-do list just because the scheduled time to work on it is over. I'd be happy without such an option.

The calendar is then synced via CalDav (I use Nextcloud) to my various devices and can be shared with team mates.

I know nothing about internal data structures and formats, but I hope someone who does finds this approach useful enough. Most important for me is that this is all done visually, by drag and drop, without muddling through date and time pickers, selection and confirmation dialogs.