Changes between Version 102 and Version 103 of ProjectManagementIdeas


Ignore:
Timestamp:
Aug 1, 2011, 12:44:53 PM (13 years ago)
Author:
Chris Nelson
Comment:

Minor edits

Legend:

Unmodified
Added
Removed
Modified
  • ProjectManagementIdeas

    v102 v103  
    398398= Design =
    399399
    400 To maximize the flexibility in mixing and matching plugins to provide features for project management, I propose to leverage Trac's [http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture Component Architecture] to specify a number of interfaces in a `tracpm` namespace.  In this way a Gantt chart, a workload chart, a task scheduler, etc. can all use the `tracpm` interfaces regardless of whether, for example, Subtickets of Childtickets (or even ticket decomposition in a future Trac core) are used to represent parent/child relationships.
     400To maximize the flexibility in mixing and matching plugins to provide features for project management, I propose to leverage Trac's [http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture Component Architecture] to specify a number of interfaces in a `tracpm` namespace.  In this way a Gantt chart, a workload chart, a task scheduler, etc. can all use the `tracpm` interfaces regardless of whether, for example, Subtickets or Childtickets (or even ticket decomposition in a future Trac core) are used to represent parent/child relationships.
    401401
    402402== IProjectTask ==
    403403
    404 Tasks for project management will be based on tickets but an abstract interface allows us to decouple a scheduler or other PM tool from the implementation of non-core ticket features like recording estimates and progress.  One user may choose to implement IProjectTask on top of !TimeingAndEstimation and another on top of !TracHours.
     404Tasks for project management will be based on tickets but an abstract interface allows us to decouple a scheduler or other PM tool from the implementation of non-core ticket features like recording estimates and progress.  One user may choose to implement IProjectTask on top of !TimingAndEstimation and another on top of !TracHours.
    405405
    406406An IProjectTask has the following properties:
     
    414414 percentEffort:: How much of ''resource's'' time is spent on the task.
    415415 duration:: How long will ''resource'' take to complete ''work'' with ''percentEffort''.  For example, a 16-hour task with 50% effort will take 4 days.
    416  assignedStart:: An explicit constraint on when the task must start (a date)
    417  assignedFinish:: An explicit constraint on when the task must finish (a date)
     416 assignedStart:: An explicit, user-specified constraint on when the task must start (a date)
     417 assignedFinish:: An explicit, user-specified constraint on when the task must finish (a date)
    418418 computedStart:: The result of scheduling this task based on constraints.  Equals ''assignedStart'' if that field is set.
    419419 computedFinish:: The result of scheduling this task based on constraints.  Equals ''assignedFinish'' if that field is set.
    420420 [#Dependencies dependencies]:: A list of other tasks (by ''id'') and the dependencies of this task on them.
    421421
    422 ''assignedStart'' and ''assignedFinish'' are likely mutually exclusive (that is, only one can be set).
     422''assignedStart'' and ''assignedFinish'' are likely mutually exclusive (that is, only one can be set; though both could be set if ''percentEffort'' was allowed to be computed).
    423423
    424424Each dependency specifies:
     
    436436An IProjectCalendar should provide the following methods:
    437437
    438   startFromFinish(task,finish):: return the date on which ''task'' must begin to complete by ''finish''.  If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''.
    439 
    440   startFromFinish(task,finish,resource):: return the date on which ''task'' must begin for ''resource'' to complete it by ''finish''.  If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''.  May account for ''resource's'' vacation, etc. in addition to the general work calendar.
    441 
    442   finishFromStart(task,start):: return the date on which ''task'' will complete if started on ''start''.  If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''.
    443 
    444   finishFromStart(task,start,resource):: return the date on which ''task'' will complete if ''resource'' started it on ''start''.  If ''task's'' work is more than a day, this accounts for weekends, etc. so ''finish'' - ''start'' may be more than ''task.work''.  May account for ''resource's'' vacation, etc. in addition to the general work calendar.
    445 
    446 '''NOTE that the functions above likely need to be passed a percentEffort.'''
    447 
     438'''Used to have `startFromFinish()` and `finishFromState()` here but those are likely scheduler functions.  I think what we need here is `hoursAvailable(resource, date)` which a scheduler can call on each date and subtract the result from the work it is trying to schedule.'''
    448439
    449440== IProjectResource ==
     
    454445== IProjectSchedule ==
    455446
    456 Computing 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.
     447Computing a schedule involves determining the ''computedStart'' and ''computedFinish'' for a set of tasks taking into account the dependencies between tasks, the resources assigned to those tasks, and the resource availability.  Where the tasks do not have ''assignedStart'' or ''assignedFinish'', the computed schedule prioritizes tasks to keep resources at or below availability.  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.
    457448
    458449The following rules control the scheduling:
    459450
    460451 * Choosing a method
    461   * If using As Soon As Possible, tasks without precedessors should be done done today (or the start of the project, if that's later), and their successors when they are done, etc.
    462   * If using As Late As Possible, tasks without successors should be done at the end of the project and their predecessors done right before they must start, etc.
     452  * If using ''As Soon As Possible'', tasks without predecessors should be done done today (or the start of the project, if that's later), and their successors when they are done, etc.
     453  * If using ''As Late As Possible'', tasks without successors should be done at the end of the project and their predecessors done right before they must start, etc.
    463454  * It may be desirable to override the method for individual tasks so exploratory work is done ASAP and clean up work is done ALAP, regardless of the overall method being used.
    464455
    465456 * Handle assigned dates
    466   * It is an error for a task to have an assignedStart ''and'' an assignedFinish.
    467   * If a task has an assignedStart, the computedStart is the assignedStart and the computedFinish is the computedStart plus the duration.
    468   * If a task has an assignedFinish, the computedFinish is the assignedFinish and the computedStared is the computedFinish minus the duration.
    469 
    470 NOTE: Once a task is begun, its assignedStart is set from the computedStart so recomputing a schedule doesn't change its start.  We may have to deal with split tasks, however, if a task is begun then put down and resumed later.
    471 
    472  * 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.)
    473   * 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.
    474   * 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.
    475   * 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.
    476   * 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.
     457  * It is an error for a task to have an ''assignedStart'' ''and'' an ''assignedFinish''.
     458  * If a task has an ''assignedStart'', the ''computedStart'' is the ''assignedStart'' and the ''computedFinish'' is the ''computedStart'' plus the duration.
     459  * If a task has an ''assignedFinish'', the ''computedFinish'' is the ''assignedFinish'' and the ''computedStared'' is the ''computedFinish'' minus the duration.
     460
     461NOTE: Once a task is begun, its ''assignedStart'' is set from the ''computedStart'' so recomputing a schedule doesn't change its start.  We may have to deal with split tasks, however, if a task is begun then put down and resumed later.
     462
     463 * 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.)
     464  * 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.
     465  * 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.
     466  * 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.
     467  * 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.
    477468
    478469NOTE: A scheduling algorithm which handled only FS dependencies would be a ''very'' useful first step.