jehoshua02 / todo

Another todo app.
0 stars 0 forks source link

Vision #2

Open jehoshua02 opened 10 years ago

jehoshua02 commented 10 years ago

I'm aiming to build more than just another todo app. Here are my thoughts for the app.

Goal 1: Help Users Get Things Done On Time

Missing dates, having plans fall through and knowing it was my fault, getting buried under upcoming deadlines, and having to reschedule things -- all of this is demoralizing. I want the app to help me get things done on time so I can avoid all this trouble.

Goal 2: Help Users Achieve Balance

The most important goal I have for the app is in how it will help me achieve a balanced life. There's many things to do in my life and I don't want to neglect any one part of my life. I want to give each part of my life the attention I feel it deserves.

Goal 3: Help Users Maximize Productivity

Not only do I want to have a balanced life, but I want to have a full one too. There are lots of things I want to do in my life and I want the app to help me optimize how I get things done. That means the app has to be smart and easy to use. I don't want to spend much time, if any, prioritizing lists. Creating, editing, and completing tasks must be quick. And knowing what task to work on next should require very little, if any, time or thought on my part. The app should be smart and easy to use.

Solution

There's still a lot of thinking that needs to be done to solve these problems the right way. Each possible solution introduces it's own set of additional problems, that require another level of problem-solving. I want to find the simplest, most complete solution.

Version Control

Because this thread might get kind of noisy, I'm going to keep an abridged copy in the repo.

salticus commented 10 years ago

https://en.wikipedia.org/wiki/Getting_Things_Done may be a good reference. The basic premise is to dump everything into a list, then do everything that takes 2 min or less, and schedule a concrete time for other tasks.

Personally, I like to balance out the areas in my life: each gets an allotment of hours in a day or week. When the time allotted in a day is up, I move on to the next task. If needed time can be taken or added from the next day's allotment. Most of the tracking is handled by Hamster Time Tracker.

The idea of a todo list quickly gets into scheduling.

jehoshua02 commented 10 years ago

I think I have a solution that avoids scheduling pretty well. Managing a schedule is not in line with goal #2, maximum productivity, as it consumes time that could be spent completing tasks.

I've been meaning to jot all my thoughts down. I'll get to it soon. Probably done time this week. I've been super busy. On Jul 7, 2014 8:49 PM, "Robert Stewart" notifications@github.com wrote:

https://en.wikipedia.org/wiki/Getting_Things_Done may be a good reference. The basic premise is to dump everything into a list, then do everything that takes 2 min or less, and schedule a concrete time for other tasks.

Personally, I like to balance out the areas in my life: each gets an allotment of hours in a day or week. When the time allotted in a day is up, I move on to the next task. If needed time can be taken or added from the next day's allotment. Most of the tracking is handled by Hamster Time Tracker https://projecthamster.wordpress.com/.

The idea of a todo list quickly gets into scheduling.

— Reply to this email directly or view it on GitHub https://github.com/jehoshua02/todo/issues/2#issuecomment-48269337.

jehoshua02 commented 10 years ago

@salticus This is going to be more of a response to your comment. Yes, I like the GTD method. The "horizons of focus" sounds interesting but I need more elaboration. And I love the idea of "context lists" - grouping similar tasks together. This was one of the long term goals I have for the app. Some groups could be "computer", "phone", "home", "garden", "day", "night", etc. Another could be "nearby", which could be complicated, comparing locations to current location. Or it could be simple if every task is just related to one of a few key locations and current location is of no concern. "context lists" could be as simple as labels. Any task can have any number of labels. When I look at task details, perhaps I could see a summary of other tasks with the same labels. We'll have to discuss this later after we have a basic product to play with.

I'll touch on my ideas of how to achieve balance later.

I wasn't thinking that time tracking is a primary concern but it's a feature I might consider, later.

As far as scheduling, I want to steer clear. The closest the todo app will get to scheduling is due dates. But due dates should not be confused with scheduling. I could complete a task with a due date before it is due. But when I have to do something at a specific time and place, that goes on the calendar. I'm not trying to replace or even integrate with Google Calendar.

jehoshua02 commented 10 years ago

At first, I was thinking I wanted an app with a single "smart" list that always has things ordered the way they should be done. But after conversing with @Legioneer and @jfindlay, I think there is a much simpler way. And maybe eventually, after studying the problem, we can figure out how to do a "smart" list correctly, but for now, simple. Stupid simple.

The Wall-O-Stickies

First, I imagine myself having nothing more than a wall and a stack of stickies available to organize all my tasks.

Organizing Tasks

Then, because balance is important to me, I would start by organizing my stickies into categories representing different parts of my life. I would create a column for each category.

Because I really don't like missing due dates, I would then, split the columns into two rows: tasks with due dates and tasks without. Tasks with due dates sorted by due date, naturally.

Next, because I want to get things done in order of dependency and greatest benefit first, I would order the tasks without due dates accordingly. If items have the same due date, I might want to order those too, depending on how many there are and if I will be able to complete them all or not.

To keep a pulse on how balanced my efforts have been, I'll keep track of how many tasks I've completed in each category. I can create another row at the top of the wall to collect stickies, or even just keep a tally.

Now that everything is organized, I am ready to get things done.

Pick Order

First I would work on tasks past due date. Then I would work on tasks due today.

After that, I might work on tasks due tomorrow, and each day after, up to a week, or I might want to procrastinate and work on something without a due date. It's kind of fuzzy to me where the cut off is. But I definitely wouldn't work on things due in the far future.

After I've beat the due dates back, like weeds, to a point I'm comfortable with, I'd work on things that don't have due dates.

To pick the next task, I would look at the category with the least completed tasks, and pick the task from that category that is the first of those without a due date. Then I would simply repeat this step, find the most neglected category, pick a task, until I'm done for the day.

Then each day, I would start with past due, then due today, then other tasks with due dates, then tasks without due dates.

Solution

So, to relate this back to the app, basically, the app just needs to replace the board and stickies. Instead of "smart" list, with it's complicated algorithm for ordering the list, I would rather the app suggest what tasks could be done next and then leave the decision up to human intelligence. To help the user decide what task to do next, the app needs to provide easy access to the necessary information.

So I think the solution is a) a good dashboard with links to b) various filtered, sorted lists.

Dashboard and Filtered, Sorted Lists

This is the stupid simple part of it that every other todo app is missing.

Due Dates

So the dashboard will tell me when the next due date is and how many tasks are past due, due today, due tomorrow, and due this week. Clicking on this part of the dashboard takes me to a list of tasks that have due dates.

Category Balance

The dashboard will also tell me how balanced my efforts are. For each category it will tell me what percentage of a sample of completed tasks belong to that category. Clicking on a category will take me to a list of tasks in that category, sorted by due date and manual sort order. It might be useful to add due date information for each category on the dashboard as well.

Feedback

@salticus, @Legioneer, @jfindlay

What do you guys think? If this makes sense to you guys, I think I'm ready to start building this thing.

And if you really read and thought about all this, I owe you lunch.

dr0jas commented 10 years ago

I think this sounds like the right direction for version 1 of the app; it's complex enough to be useful, but simple enough to get up and running quickly. The next question I would ask is how do you want the GUI components laid out for the user? I think answering this question might help solidify the relationships between the logic components under the hood.

jehoshua02 commented 10 years ago

How will the todo app help the user achieve balance?

On the dashboard, categories will be sorted by neglect score. This way the user will see the most neglected category first. As tasks are completed from that category its neglect score will change and another category will rise to the top.

How might the neglect score be calculated?

Let's consider that the neglect score for a category is simply a percentage of a sample of most recent completed tasks that are associated with that category.

For example, I have three categories: Family, Chores, Scouting. If my sample size of completed tasks were 100, and I've completed 20 Family tasks, 30 Chores, and 50 Scouting tasks, then the neglect scores for those categories, respectively, would be 0.2, 0.3, 0.5. We could skip a step and not even convert to a decimal and just keep it as an integer and we could still use it the same.

Family, with a neglect score of 20, would be the most neglected. So for the next task, the user would pick something from Family.

What happens as tasks are completed?

If the application is used as intended, the user would focus effort on the most neglected category, which according to the example we've been using, would be Family. When a task in Family is completed one of three scenarios could occur:

  1. A task in Family is pushed into the sample while another is shifted out of the sample, leaving the neglect scores exactly the same.
  2. A task in Family is pushed into the sample, while a task from Scouting is shifted out of the sample, changing the scores to 21, 30, 49.
  3. A task in Family is pushed into the sample, while a task from Chores is shifted out of the sample, changing the scores to 21, 29, 50.

When does another category become the most neglected?

We could encounter Scenario 1, from the previous question's answer, at most 20 times, if all 20 tasks from the Family category were at the front of the sample, before neglect scores would change at all.

Scenario 2 could occur until the scores become 30, 30, 40, completing 10 tasks from Family, shifting 10 task from Scouting out of the sample, at which point Family becomes tied with Chores.

Scenario 3 could occur until scores become 25, 25, 40, completing 5 tasks from Family, shifting 5 tasks from Chores out of the sample, at which point Family becomes tied with Chores.

So it seems that at least anywhere from 5 (if we encounter Scenario 3 every time) to 30 tasks (if we encounter Scenario 1 the maximum number of times, followed by Scenario 2 every time) would need to be completed before another category could rise as most neglected.

Should the neglect score be dependent on the order of the tasks in the sample?

No. That doesn't feel right. Any ideas are welcome.

Balance is not an equal mixture of categories. How will that affect neglect score calculations?

In the examples so far, we've assumed that every category is equally important. But that's not true balance. True balance is more likely a mixture of the right amounts of each category -- a recipe. The neglect score now becomes a measurement of how closely a sample matches the recipe defined by the user. For example:

Category Parts
Family 2
Scouting 2
Chores 1

Given this recipe, we take the total parts, which is 5, and convert parts into percent:

Category Parts => Percent
Family 2 2 / 5 40%
Scouting 2 2 / 5 40%
Chores 1 1 / 5 20%

What this says now is that a balanced sample should be 40% Family, 40% Scouting, and 20% Chores.

Our neglect score can then be calculated as actual percent - recipe percent = neglect score.

So, given our sample size of 100, and counts of 20, 30, 50, we could calculate neglect scores like so:

Category Percent Actual => Neglect Score
Family 40% 20% 20 - 40 -20
Scouting 40% 50% 50 - 40 10
Chores 20% 30% 30 - 20 10

According the recipe, a negative score means the category is neglected, a positive score means it is getting more than enough attention, and a zero score means it is spot on. If all scores are zero, then, according to the recipe, balance is acheived.

We want to be balanced in terms of time, not tasks completed. How does this affect the neglect score?

This requires a simple but delicate change in what we are counting. Instead of counting tasks completed in each category and feeding that to neglect score calculations, we must count hours and hand that over to the neglect score calculations.

The user would have to record how many hours the task required to complete. Ideally time tracking would be built into the application.

Our sample can still be the last 100 tasks completed. But instead of counting tasks for each category we sum hours and divide by the total number of hours to get a percentage for each category. These percentages would then go into the neglect score calculations and be handled the same as previously.

What about categories with no uncompleted tasks, empty categories?

First we find all categories in the recipe that don't have tasks. We won't use these categories in our calculations. Then we get a sample of 100 completed tasks that belong to the remaining categories. Then we perform the calculations all the same using the trimmed recipe and sample.

What about tasks that fit in more than one category?

Let's say we introduce another category, Spiritual, and we have a task that fits in this category as well as Family, like preparing for Family Home Evening or something. I don't see why a task can't belong to more than one category and be counted toward both categories during neglect score calculation. When the task is completed the neglect scores would both be adjusted, causing both categories to be less neglected. I don't see a problem with that.

Is there a use case for categories that aren't part of the balance recipe?

There may be use cases for categories that are not part of the balance recipe. These would essentially be treated the same way as empty categories, excluded from the recipe and sample. These categories would be good for smaller groups of tasks that only occasionally have tasks in them, not enough to throw off the balance. An example category could be "Other", but then again, maybe a user would want to try making sure "Other" tasks are not causing them to neglect other categories.