Changes between Version 72 and Version 73 of ProjectManagementIdeas


Ignore:
Timestamp:
May 21, 2009, 7:43:13 PM (5 years ago)
Author:
ChrisNelson
Comment:

Flesh out scheduler requirements

Legend:

Unmodified
Added
Removed
Modified
  • ProjectManagementIdeas

    v72 v73  
    395395 task:: The ID of the task this task depends on  (I'd really like a better name here.  ''parent'' is wrong. ''origin''? ''other''?)
    396396 type:: Dependency type (FS, SS, SF, or FF)
    397  lag:: Offset of this task's anchor relative to the anchor of ''task''. Whether the ''anchor'' for the dependency is the start or end of the task depends on the dependency type.  For example, if Task B has a FS dependency on Task A with a lag of 1 day, then Task B starts 1 day after Task A finishes.  Or, if Task B has an SS dependency in Task A with a lag of 1 day, then Task B starts 1 day after Task A starts.  (''lag'' is not scaled by ''percentEffort''.)
     397 lag:: Offset of this task's anchor relative to the anchor of ''task''.  (''Lag'' may be negative.) Whether the ''anchor'' for the dependency is the start or end of the task depends on the dependency type.  For example, if Task B has a FS dependency on Task A with a lag of 1 day, then Task B starts 1 day after Task A finishes.  Or, if Task B has an SS dependency in Task A with a lag of 1 day, then Task B starts 1 day after Task A starts.  (''lag'' is not scaled by ''percentEffort''.)
    398398
    399399== IProjectCalendar ==
     
    423423Computing a schedule involves determining the ''computedStart'' and ''computedFinish'' for a set of tasks taking into account the dependencies between tasks and the resources assigned to those tasks.  Where the tasks do not have assignedStart or assignedFinish, the computed schedule prioritizes tasks to keep resources at or below 100% utilization.  However, assigned dates may force overloaded resources.  These overloads can then be reported and either manually resolved or resolved with a resource leveling module apart from the scheduler.
    424424
    425 Random algorithm notes.
     425The following rules control the scheduling:
     426
     427 * Handle assigned dates
     428  * It is an error for a task to have an assignedStart ''and'' an assignedFinish.
     429  * If a task has an assignedStart, the computedStart is the assignedStart and the computedFinish is the computedStart plus the duration.  Done scheduling this task.
     430  * If a task has an assignedFinish, the computedFinish is the assignedFinish and the computedStared is the computedFinish minus the duration.  Done scheduling this task.
     431
     432 * Handle dependencies (This must be done iteratively for all of a task's dependencies.  Several FS dependencies may produce different computedStart dates with the latest one being use.  Interaction between other types of dependencies is complex.)
     433  * If a task has an FS dependency on another task, its computedStart is the other task's computedFinish plus lag.  The task's computedFinish is computedStart plus duration.
     434  * If a task has an SS dependency on another task, its computedStart is the other task's computedStart plus lag. The task's computedFinish is computedStart plus duration.
     435  * If a task has an FF dependency on another task, its computedFinish is the other task's computedFinish plus lag.  The task's computedStart is the computedFinish minus duration.
     436  * If a task has an SF dependency on another task, its computedFinish is the other task's computedStart plus lag.  The task's computedStart is the computedFinish minus duration.
     437
     438 * Handle resource limitations[[br]]Tasks assigned to the same resource but with no other dependency between them and no assigned dates must be sequenced to keep from overloading the resource.  A comparison function can be used to determine which task should go first (as in many sorting algorithms).  {{{sequenceTasks(taskA,taskB)}}} would return -1 if taskA should go first, 1 if taskB should go first or 0 if it doesn't matter.  ''The scheduler should not be aware of the policy implemented in the comparison function.'' Possible criteria for sequencing the tasks include:
     439   * priority - More important/urgent work goes first
     440   * risk - Riskier work goes first
     441   * work - A function may favor short tasks ("low hanging fruit") or long ones (which inherently have more risk).
     442   * percentComplete - Finishing something that's partially done is better than starting something new
     443   * "fit" - It's better to start a 2-day task on Wednesday and hold a 4 day task for the next week than to break up the longer task across a weekend.
     444
     445=== Random algorithm notes ===
    426446
    427447 * As Late As Possible (ALAP) with only FS dependency is an easy scheduling algorithm.  A task without successors is due on it's milestone date and things back up from there.  However, it is sometimes helpful to use ASAP, even for single tasks.  For example, if a software development task is poorly understood so its estimate might be wildly wrong, that task should be tackled early in the project so that deviation from estimate is known early and there is more time to adjust for it.  Also, it's often desirable to handle bugs before new features so tasks might get ALAP and bugs ASAP within the same project.