Loading...

All project content is available for reading, but you need to be a member of the project for Subversion checkout of source code, or to create/modify any information.
Login if you are a member. Apply here to request membership (open to all).

Estimation Tools & Burndown Charts

About Estimation

The 'Estimation' feature adds a new "Remaining Hours" field to all tickets. The fundamental idea is track the value of 'remaining' on each ticket over time, which allows its current status and progress to be queried and charted:

Example Burndown chart.

Enable the feature

The feature is optional, and needs to be enabled (Admin -> Features):

Screenshot for enable/disable of feature.

It adds a Ticket Custom Field with the name 'remaining'. The name cannot be changed, but the default label 'Remaining Hours' can. If you work with 'days' or 'points' or some other estimate system, then feel free to change the visual label in Admin -> Ticket -> Custom Fields.

Understanding Estimation

With 'Estimation' feature, the new 'remaining' field on tickets is all about tracking the CURRENT status of what remains for this issue to be resolved.

The task may initially be estimated to 12 hours to complete, and following a day of work is done to get that down to 7. Then a project meeting may discuss the feature and decide to trim its scope, reducing the remaining time needed to 3 hours. All these changes should be logged on the ticket by updating the value on the corresponding ticket. "What remains for completion" is the only important general metric as that is the number needed for scheduling and allocating resources to complete it.

The change and status in the value for a group of tickets can the be summarized and charted for easy visual overview like the example above. The level of summary is entirely a matter for the project to decide. A common grouping is 'Milestone' for releases, so that the charting is the progress for the completion of some upcoming new version like '2.2'. Or splitting a chart further onto each member to visualize also the 'Owner' aspect.

For some, a straight "sprint = milestone" organisation will work. Typically projects with many unrelated tasks or mature projects that continually dip into the backlog and pick some handfulls of issues for shorter sprints.

[[TicketQuery(status!=closed&milestone=2009.44, col=tid|summary|type|priority|owner|remaining, format=table)]]

For others, a straight "sprint = milestone" does not fully capture the complexities involved. In those cases another option is to use 'Milestone' as a grouping for a major feature ("master ticket"). An example milestone may then be called 'RSS Feeds' to group all the individual tasks that goes into adding RSS feeds to all aspects of the solution. Agile practice says that a task should not take more than perhaps 8-16 hours at most, so adding major feature areas becomes a larger milestone in itself. The nice effect is that any given Sprint may contain tasks from many larger features without needing to fully contain them. The 'RSS Feeds' example may well be loosely scheduled to need 3 sprints to actually complete, and assigning tickets to sprints by order of need and value. To make this practice manageable, create a new Custom Field (in Admin) named 'sprint' (for instance). Make it a Select-type field and update its options with names and numbers of sprints as they are conceived and open for scheduling. If using the [[TicketQuery]] macro on a Wiki page, it may then look like this:

[[TicketQuery(status!=closed&sprint=2010-09.1, col=tid|summary|type|priority|owner|remaining, group=milestone, format=table)]]

Using a Custom Query (View Tickets -> Custom Query), typically select the fields and the grouping you want and hit 'Update'. Any Custom Query selection can also be saved as new reports for easy reference.

Editing

Inline edit screenshot.

In addition to updating the field on each ticket like regular Ticket edits, it is also possible to edit the number inline when viewing ticket in reports. Any Query (like example above) that contains the 'remaining' field, will also make the field editable. Decimals are supported for values (using number format as '3.5' in the illustration).

Note that this inline edit feature requires that the user has XML_RPC permission, which is default enabled for all project members. See Admin -> Permissions.

Burndown Chart

The example chart above is a Burndown chart. It illustrates the sum of the 'remaining' field for all the tickets included in the selection, for each day in the chart. The chart is made using the [[BurndownChart()]] macro and can be placed inside any content area that accepts Wiki markup - typically a Wiki page, or even the description field for a milestone if there is a one-to-one relation between them.

Example of 'sprint=milestone' usage:

[[BurndownChart(milestone=2009.44, startdate=2010-09-13, enddate=2010-10-02, height=300, gridlines=10)]]

Example using a custom field to group tickets for the sprint:

[[BurndownChart(sprint=2010-09.1, startdate=2010-09-13, enddate=2010-10-02, height=300, title=2010-Sept-1, gridlines=10)]]

Usage documentation:

[[BurndownChart]]

Creates burn down chart for selected tickets.

This macro creates a chart that can be used to visualize the progress in a milestone (e.g., sprint or product backlog). For a given set of tickets and a time frame, the remaining estimated effort is calculated.

The macro has the following parameters:

  • a comma-separated list of query parameters for the ticket selection, in the form "key=value" as specified in TracQuery#QueryLanguage.
  • startdate: mandatory parameter that specifies the start date of the period (ISO8601 format)
  • enddate: end date of the period. If omitted, it defaults to either the milestones (if given) `completed' date, or due date, or today (in that order) (ISO8601 format)
  • weekends: include weekends in chart. Defaults to true
  • title: chart title. Defaults to first milestone or 'Burndown Chart'
  • expected: show expected progress in chart, 0 or any number to define initial expected hours (defaults to 0).
  • gridlines: show gridlines in chart, 0 or any number to define hour steps (defaults to 0)
  • width: width of resulting diagram (defaults to 800)
  • height: height of resulting diagram (defaults to 200)
  • color: color specified as 6-letter string of hexadecimal values in the format RRGGBB. Defaults to ff9900, a nice orange.
  • colorexpected: color for expected hours graph specified as 6-letter string of hexadecimal values in the format RRGGBB. Defaults to ffddaa, a nice yellow.
  • bgcolor: chart drawing area background color specified as 6-letter string of hexadecimal values in the format RRGGBB. Defaults to ffffff.
  • wecolor: chart drawing area background color for weekends specified as 6-letter string of hexadecimal values in the format RRGGBB. Defaults to ccccccaa.

Examples:

    [[BurndownChart(milestone=Sprint 1, startdate=2008-01-01)]]
    [[BurndownChart(milestone=Release 3.0|Sprint 1, startdate=2008-01-01, enddate=2008-01-15,
        weekends=false, expected=100, gridlines=20, width=600, height=100, color=0000ff)]]

Workload Chart

It is also possible to chart the current Workload as a pie chart, sliced based on owner of Tickets:

Example Workload chart.

Such a chart may be generated like this:

[[WorkloadChart(milestone=2009.44, enddate=2010-10-02, width=500, height=200)]]

or if using something other than milestone to group tickets for sprints:

[[WorkloadChart(sprint=2010-09.1, enddate=2010-10-02, width=500, height=200)]]

Usage documentation:

[[WorkloadChart]]

Creates workload chart for the selected tickets.

This macro creates a pie chart that shows the remaining estimated workload per ticket owner, and the remaining work days. It has the following parameters:

  • a comma-separated list of query parameters for the ticket selection, in the form "key=value" as specified in TracQuery#QueryLanguage.
  • width: width of resulting diagram (defaults to 400)
  • height: height of resulting diagram (defaults to 100)
  • color: color specified as 6-letter string of hexadecimal values in the format RRGGBB. Defaults to ff9900, a nice orange.

Examples:

    [[WorkloadChart(milestone=Sprint 1)]]
    [[WorkloadChart(milestone=Sprint 1, width=600, height=100, color=00ff00)]]