Opened 13 years ago
Last modified 13 years ago
#9042 assigned enhancement
Display unscheduled tasks at the end of the milestone
Reported by: | Ryan J Ollos | Owned by: | Chris Nelson |
---|---|---|---|
Priority: | normal | Component: | TracJsGanttPlugin |
Severity: | normal | Keywords: | |
Cc: | Patrick Schaaf | Trac Release: | 0.11 |
Description
Currently, unscheduled tasks have their start and due dates set to the current day. This is causing a bit of a problem for my group because it is not immediately obvious whether a tasks is unscheduled or actually has a start and due date set to today. We have many tasks that span a single day, so this issues arises quite a bit.
Although not a perfect solution, I think it would be less confusing to have tasks with no start and due date appear at the end of the milestone. It might also be useful to have them appear with some kind of marker, like the diamond that is displayed for a milestone, rather than the tasks having a span of 1 day.
Hoping to get some feedback and ideas about how to best deal with this.
Attachments (2)
Change History (48)
comment:1 Changed 13 years ago by
Summary: | Move unscheduled tasks to end of milestone → Display unscheduled tasks at the end of the milestone |
---|
comment:2 follow-up: 3 Changed 13 years ago by
comment:3 follow-up: 4 Changed 13 years ago by
Replying to ChrisNelson:
I think, though, that a better option is to wait a week or so for the better scheduler we're working on.
Thanks, I will wait to see before working on any more patches. Is the scheduler going to be part of TracJsGanttPlugin, or is it a separate plugin?
comment:4 Changed 13 years ago by
Replying to rjollos:
Replying to ChrisNelson:
I think, though, that a better option is to wait a week or so for the better scheduler we're working on.
Thanks, I will wait to see before working on any more patches. Is the scheduler going to be part of TracJsGanttPlugin, or is it a separate plugin?
My vision -- likely not realized in the first release -- is to specify some interfaces for extension points that facilitate project management. The first two that come to mine are task scheduling and a resource calendar ("How many hours is Ryan available on August 8th?" "None" (he's on vacation)). I imagine those EPs will be in another plugin. The TracJSGantt would then 1) provide it's own, default implementation of the scheduling EP that does what it does now, 2) be able to find a more robust scheduler that is installed in the system. I have a scheduling plugin that provides a scheduling service and could be installed to beef up the Gantt's own simple scheduling.
comment:5 follow-up: 6 Changed 13 years ago by
I have ALAP scheduling working in my sandbox. I think I can extend this to ASAP fairly easily.
comment:6 Changed 13 years ago by
Replying to ChrisNelson:
I have ALAP scheduling working in my sandbox. I think I can extend this to ASAP fairly easily.
I'm ready and eager to test anything new you post ;)
comment:7 Changed 13 years ago by
comment:8 Changed 13 years ago by
(In [10689]) Sort based on dependencies. Refs #9042, #8982.
This nicely puts milestones after their tasks.
This turned up a problem with dependency representation. When we did:
s = '1, 2, 3' l = s.split(',')
l ended up being ['1', ' 2', ' 3'] so "'2' in l" was false.
So now we strip white space from pred and succ ticket IDs.
Also, Trac milestones don't have successors but an empty list simplifies other code.
comment:9 Changed 13 years ago by
(In [10690]) Schedule tasks by hour, not day. Refs #9042, #8982.
This is an first step toward handling dependencies (so, a four-hour task and an 12-hour task can take just two 8-hour days) but it also addresses a display but that tasks that took a multiple of 8 hours showed up a day too long in the Gantt.
Giving Trac milestones 0 estimates simplifies other code.
comment:10 Changed 13 years ago by
comment:11 Changed 13 years ago by
comment:12 Changed 13 years ago by
comment:13 Changed 13 years ago by
(In [10695]) Use adjusted estimate for computing hours, percent complete. Refs #9042, #8982.
- Add configurable default estimate for tasks.
- Add configurable overestimate padding. If work is already more than estimate, we likely need still more time.
- Improve reporting of percent complete. Use projected work, not estimate.
- Remove a stale comment; already fixed.
comment:14 Changed 13 years ago by
Status: | new → assigned |
---|
This is somewhat experimental and not tested at all for tickets which have start dates specified. Feedback on functionality is welcome. I could use some code reviews, too. My Python is weak and I use recursion and object assignments in ways that may not be optimal.
comment:15 Changed 13 years ago by
comment:16 Changed 13 years ago by
comment:17 follow-up: 18 Changed 13 years ago by
Okay, I'm up and running with r10710 on Trac 0.11.7 now. I think this ticket can be closed.
comment:18 Changed 13 years ago by
comment:19 Changed 13 years ago by
(In [10809]) Fix conversion of estimate to work hours. Refs #9042.
When scheduling was converted from days to hours, one conversion wasn't addressed.
There are two factors that apply:
- Time per estimate (how many scheduling units are in each unit of
estimate (and work)
- Hours per day (how much work gets done each day)
The former affects the size of the task, the latter affects the
duration. Both conversions were muddled up in _workHours()
because we
used to convert estimate to days and wrongly concluced we then needed to
scale by hours per day to get work.
A failed case was an hour as a unit of estimate and a 6-hour work day (or a day when only 6 hours of work get done). With an estimate of 8, days per estimate of .125, and hours per day of 6, this gave:
hours = (8 * .125) * 6
Which converted the task for 8 hours to 6!
We first need to convert estimate to the unit of scheduling (hours) so days_per_estimate becomes hours_per_estimate. Computing work hours is then just (estimate * hours per estimate).
When scheduling, we divide work hours by hours per day to get days.
comment:21 Changed 13 years ago by
comment:22 Changed 13 years ago by
comment:24 Changed 13 years ago by
comment:25 Changed 13 years ago by
comment:26 Changed 13 years ago by
comment:27 Changed 13 years ago by
comment:28 Changed 13 years ago by
comment:29 Changed 13 years ago by
comment:30 Changed 13 years ago by
comment:31 Changed 13 years ago by
(In [11079]) Cleaner date adjustment using calendarOffset. Refs #9533, #9300, #9042, #9515.
Scheduler used to assume work week. Now let calendarOffset() do that.
Also, it seems rounding errors would creep in and some datetimes would have non-zero microseconds. This tests for beginning and end of day with a little delta.
comment:32 Changed 13 years ago by
comment:33 Changed 13 years ago by
comment:35 follow-ups: 36 37 Changed 13 years ago by
Replying to ChrisNelson:
Hows this working for you now?
Today's SVN version:
situation: milestone date set and we have some unscheduled tickets
It looks good with ALAP:
- they always end at milestone date minus 1 day
- they are at the end of the chart list (and the milestone is the last one in the chart) <== BTW: Why is actually the word 'one' tagged?
- their start date is always end date minus planned hours
It looks almost good with ASAP:
- they always start today
- they are at the end of the chart list (and the milestone is the last one in the chart)
- remaining problem: tickets with many planned hours can end *after* the milestone date
comment:36 follow-up: 38 Changed 13 years ago by
Replying to falkb:
- remaining problem: tickets with many planned hours can end *after* the milestone date
Hmm... you may say: That's OK because the milestone is planned for a certain day, and such tickets we start today can have so many planned hours that it isn't possible to let it end before the milestone date.
But I suppose the ticket must start earlier than today in case we already have worked on it, which means the remaining hours are less than the planned hours. Then you must let it start on 'today minus already worked hours'. Here's illustrated what I mean:
Changed 13 years ago by
Attachment: | 9042_asap_unsched_tick_NOK.jpg added |
---|
Changed 13 years ago by
Attachment: | 9042_asap_unsched_tick_OK.jpg added |
---|
comment:37 Changed 13 years ago by
Replying to falkb:
Replying to ChrisNelson:
Hows this working for you now?
Today's SVN version:
situation: milestone date set and we have some unscheduled tickets
It looks good with ALAP:
Great.
- they always end at milestone date minus 1 day
- they are at the end of the chart list (and the milestone is the last one in the chart) <== BTW: Why is actually the word 'one' tagged?
Apparently someone registered at T-H at user one
and got a wiki page. Not sure if it was bogus playing or not.
- their start date is always end date minus planned hours
It looks almost good with ASAP:
- they always start today
- they are at the end of the chart list (and the milestone is the last one in the chart)
- remaining problem: tickets with many planned hours can end *after* the milestone date
I view a Gantt with dependencies that point leftward to be a red flag that I need to reschedule some stuff.
comment:38 follow-up: 39 Changed 13 years ago by
Replying to falkb:
Replying to falkb:
- remaining problem: tickets with many planned hours can end *after* the milestone date
Hmm... you may say: That's OK because the milestone is planned for a certain day, and such tickets we start today can have so many planned hours that it isn't possible to let it end before the milestone date.
But I suppose the ticket must start earlier than today in case we already have worked on it, which means the remaining hours are less than the planned hours. Then you must let it start on 'today minus already worked hours'. Here's illustrated what I mean:
I have had in the back of my mind for some time that an incomplete task should have its progress bar at today, not its start. I'm not sure how to do that, exactly. I think I need to break the task into two virtual tasks: one complete today and one starting today and schedule the first one back to its start and the second forward to its projected completion. But what if the first activity in the task was before of after the scheduled/projected start of completed work before today? Which start do I show?
It seems to me that the problem described in this ticket is addressed. Can you open a new one with a summary like, "Partially completed tasks should have unworked hours starting today" or something? Copying your figures from here would be awesome.
comment:39 follow-up: 40 Changed 13 years ago by
Replying to ChrisNelson:
But what if the first activity in the task was before of after the scheduled/projected start of completed work before today? Which start do I show?
That's exactly the problem I've addressed in #8786. Look at the attached image. I went to the future and made a screenshot how it'll be implemented...
comment:40 follow-up: 41 Changed 13 years ago by
Replying to falkb:
Replying to ChrisNelson:
But what if the first activity in the task was before of after the scheduled/projected start of completed work before today? Which start do I show?
That's exactly the problem I've addressed in #8786. Look at the attached image. I went to the future and made a screenshot how it'll be implemented...
Yeah, we may get there eventually. Now, if I only knew how soon in the future you took that screen shot, I'd know how soon I have to get working on this to finish on time. :-)
comment:41 Changed 13 years ago by
Replying to ChrisNelson:
Replying to falkb:
Replying to ChrisNelson:
But what if the first activity in the task was before of after the scheduled/projected start of completed work before today? Which start do I show?
That's exactly the problem I've addressed in #8786. Look at the attached image. I went to the future and made a screenshot how it'll be implemented...
What I mean is that it's all much easier to handle if you separate done work from planned things. This implies work and plan become unchained from each other.
Yeah, we may get there eventually. Now, if I only knew how soon in the future you took that screen shot, I'd know how soon I have to get working on this to finish on time. :-)
You already know that knowing too much about the future changes the present and this can lead us on another time path which could be the failed one. ;)
comment:42 Changed 13 years ago by
comment:43 Changed 13 years ago by
comment:44 Changed 13 years ago by
comment:45 Changed 13 years ago by
comment:46 Changed 13 years ago by
(In [11426]) A tree-aware task sorter. Refs #9833, #9042, #9290, #9300, #9691, #9784.
A task's priority depends on its parent's priority.
Includes a base sorter class to hold common sorter methods.
SimpleSorter and ProjectSorter derive from the base class.
(Copy effective priority list, just in case.)
Also remove unneeded debugging output. Refs #9648.
This is really an ASAP (as soon as possible) vs. ALAP (as late as possible) dichotomy in scheduling. To handle this ticket in isolation, I'd add a
schedule=
option which tookasap
oralap
as values and did what we do now or what you ask for. I think, though, that a better option is to wait a week or so for the better scheduler we're working on.