cornercorner
FeaturesPluginsDocs & SupportCommunityPartners

TaskList Project Scheduling Feature Proposal

Tor Norbye

Published Sep 21 2002

The user task list contains tasks the user needs to perform. They already have descriptions and priorities.

What if the user wants to estimate how long it will take to complete the tasks? Or what if the user wants to decide which tasks to do first, assuming there are dependencies between the tasks such that one has to be completed before another can start?

To help with this, I propose we build a simple project scheduler into the tasklist.

First, we add some new attributes to tasks. In terms of UI, this means that in the "New Task" dialog there is a separate tab asking for scheduling info. You can ignore it, in which case this task is not considered part of the schedule. These new properties should be shown in a separate property sheet in the properties window.

The new attributes are:

  • Estimated effort - in other words, how many days (or hours or weeks or months) do you estimate that this task will require to complete?
  • Concentration - how much of your time will you be spending on this? Typically 100%. However, let's say you want to work on two tasks concurrently; you can make each 50% and then the scheduler will allow these tasks to overlap. Perhaps "concurrency" is a better term (but with reverse logic) ?
  • Depends on - a list of tasks that must have completed before this task can begin.
  • Start time, end time. The start time can be "as soon as possible", "as late as possible", or a specified date. Ditto for the end time. (There are some other possibilities too, like "start no earlier than", "finish no later than", etc.)

Let's take an example. Let's say you've entered the following tasks:

Task id (implicit> Description Effort Starts Ends Depends on
1 Turn on oven 1 min As soon as possible - -
2 Add sugar 1 min As soon as possible - -
3 Add milk 1 min As soon as possible - -
4 Add butter 1 min As soon as possible - 5
5 Melt butter 3 min As soon as possible - -
6 Wait until oven has been heated 0 min As late as possible - 1+lag 30 min*
7 Bake cake 15 min As soon as possible - 2,3,4,5,6
8 Cool down the cake 10 min As soon as possible - 7

The "1 + lag 30 min" notation for task 6 is introducing the concept of "lead" and "lag"; you can specify that you depend on some task and you want to wait a specific interval after the task has completed (lag) or before the task has completed (lead).

With the above information, the scheduler would order the tasks as follows:

Task id (implicit> Description Effort Starts Ends
1 Turn on oven 1 min now now + 1 min
2 Add sugar 1 min now + 1 min now + 2 min
3 Add milk 1 min now + 2 min now + 3 min
5 Melt butter 3 min now + 3 min now + 6 min
4 Add butter 1 min now + 6 min now + 7 min
6 Wait until oven has been heated 1 min now + 30 min -
7 Bake cake 15 min now + 30 min now + 45 min
8 Cool down the cake 10 min now + 45 min now + 55 min

As you can see, it would take 55 minutes for these tasks to complete. It reordered some tasks based on dependencies (if we had specified priorities those would cause reordering as well). When you add tasks with specified start and/or end times, overlapping tasks, etc., it really becomes a help in planning.

One thing that most project scheduling tools provides is the ability to schedule multiple "resources" (people). Then you can assign tasks to people and this helps in the concurrency computation. I propose we add that in the second version of the project scheduler.

New Views

So far I've only proposed that we add some new properties to tasks. Based on that, it will derive "start" and "end" times for tasks. These, along with dependencies should be visualized in a "timeline" view so that you get a better picture of what's taking up time. Here's a mockup of what the timeline view may look like:

Obviously, you should be able to zoom in/out so you can both see this at a minute/day granularity, week granularity or month granularity.

Issues

  • Tasks should be marked "include in schedule". We don't want "mom's birthday" etc. to show up in the schedule, since not all tasks in the tasklist pertain to your project schedule.
  • We need a property editor for dates so that you can easily and conveniently pick dates from a calendar view when specifying them.

  • The property editor for "estimated effort" should allow you to specify fractions and suffixes like "m", "d", "w" and "mo" for minutes, days, weeks and months.

  • There are many more "derived" attributes we should list in the schedule; for example, "duration" can be computed based on effort and amount of time you're spending on it. (Let's say you're spending 50% of your time on a task whose effort is 2 weeks; the duration will be 4 weeks.) "Slack" is another; some tasks can slip without affecting the schedule and this tells you how much a task can slip.

  • The context menu in the timeline view should allow you to change the interval shown, either by specifying a time interval or choosing between a day view, week view, or month view.

  • We should allow ASCII and HTML export. Perhaps export and import other scheduling tools' files?

  • The timeline view should also highlight the "critical path"; these are tasks which directly affect the end date of the project, so any slips will move out the end date.

  • You should also be able to specify the project start date, and view the computed project end date, somewhere.

  • When we support resources, have a resources menu somewhere where you can add people to the project; specify their "efficiency" (used to modify duration computation from estimated effort), time availability, etc.

  • Also add a place where you can specify holidays, number of working hours per day/week, etc.

Implementation

  • Go pick a scheduling algorithm. There are lots of resources on this on the web. See this link for an introduction to the math of scheduling.

  • Make a new module for this, which subclasses usertasks. In the "New Task" dialog, have a checkbox (and tab) for "schedule". When you choose this, a SchedulingNode is created instead of a UserTaskNode, etc. with additional attributes. Having a separate module not only leans up the IDE for those who don't want it, but it means I can have additional toolbar buttons in the Task toolbar that aren't clutter for those who don't use it. This does however mean usertasks needs to provide a way to plug functionality into the New Tasks dialog, tasklist import/export, etc.
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems