Skip to content
Viktor A. Danilov edited this page Nov 29, 2016 · 47 revisions

estimation-tools

pp

Warning, the page is still under development. It has already contained a lot of info, but there are TODOs I'm going to fill.


Techniques and Tools which could help you to estimate a scope of work:

this


It converts a Mind Mapped project decomposition like this: this into an Xlsx estimation report like this: this

The Idea

The idea is to use Mind Mapping to make you project decomposed into parts: from stages down to simple tasks (see Work breakdown structure and Three-point estimation). An introduction of a special node value format for extra elements (roles, estimation numbers and comments) will allow estimation tool to analyze the MindMap file and to create a report speadsheet with the decomposition and estimates.

MindMap improvements

There is three special nodes which are caught by the tool (matching the node value determines the its type). All other nodes (starting from the root up to a first special node) are general nodes - it's just the project decomposition. For more details of the behavior see How It Works section.

Estimation node

An estimation node specifies the value of resource range (minimum, realistic and maximum time) required for the node it's connected with. It could/should be connected either to general node or to role node. Also it should always be a single leaf node: if a node has an estimation node as a child, there should not be any other child nodes in the first one.

Node value format: estimate=O/E/P - the keyword estimate with an equal sign and a set of three numbers divided by a slash sign, where O (optimistic), E (expected) and P (pessimistic) are non-negative numbers (0 <= O <= E <= P < Infinity) - see Three-point estimation:

  • O (optimistic) - the best-case estimate - value defines absolute minimum of required time of a resource;
  • E (expected) - the most likely estimate - is an amount of resource time likely to be enough;
  • P (pessimistic) - the worst-case estimate - is a maximum resource time (think it like «this time is enough even if almost all goes wrong»).

It does not defined which time metric you should use (story points, days, hours, Friday evenings, ...) - only one rule you have to follow: all estimation nodes should have one and the same metric through your MindMap.

Role node

A role node is used to specify type of resource (role) required for the node it's connected with: it could be placed only between a general node and its estimation node. In that case it's possible to specify several roles (with their estimations) for a single general node.

Node value format: (rolename) - the role title enclosed in parentheses, where rolename is just a string without spaces identifies type of the resource or/and activity (i.e. coder, developer, analyst, admin, manager, ...).

Comment node

A comment node is used to highlight/clarify additional information to the node it's connected with: it's always a leaf node and should be connected only to general nodes.

Node value format: [prefix] text - the node should have a multi-line text value, each line starts with a prefix enclosed in brackets (i.e. [idea] let's document the rules).

According to the prefix the following text will be changed and placed to the report by the rule defined for that prefix.

Report Format

The result report is a spreadsheet (xlsx document). It's just a compact representation of the original MindMap with final numbers: it shows the original task decomposition with estimations and statistics over them. All original tree and decomposition goes from MindMap as it was, all calculations are injected to the report as a formulas: you always can change any data directly in the report (useful if someone wants to play with scope/numbers) and recalculate result directly in the report document (you don't have to modify the original MindMap and use the tool for each change).

The document has the header (captions for column), the body (rows for nodes in the MindMap with estimations) and footer (aggregation over the numbers from the body).

Main columns (used in the report body part) are the following:

  1. Title - it contains names of general nodes (hierarchy is shown with the magic of indention);
  2. Usage multiplier - it shows if the row should be used in the report statistics (technical column, hidden);
  3. Comment - aggregated comment from the comment nodes;
  4. Estimation - three column for O (optimistic, min), E (expected, real) and P (pessimistic, max) - original estimations from the MindMap;
  5. Weighted mean - mean value, calculated by the formula (O + 4*E + P) / 6;
  6. Standard deviation - the deviation of the estimation interval, formula: (P - O) / 6;
  7. Squared deviation - squared value of the previous column (technical column, visible).

Footer has extra several rows with their own structure:

  1. Total row - it summarizes by rows all estimation columns, weighted means, range sizes and squared range. It uses SUMPRODUCT with usage multiplier column value to filter rows;
  2. Total rows (for each role) - there is a row for each role in the original MindMap, it summarizes values the same way (but for estimations marked by the appropriate role only);
  3. Standard deviation for total project work - square root of the Squared deviation from the Total row;
  4. Correction factor - is used to make a correction based on the history of the estimator, default value is 1.5;
  5. Min (P=95%) and Max (P=95%) - both calculated and corrected - total estimation of the project.

See Three-point estimation for details (formulas and math).

Estimation Approach

TODO: techniques description with samples

TODO: step-by-step tutorial (screenshots)

How It Works

TODO: input format (uppercase attributes), script arguments

TODO: strict node format

TODO: detailed script algorithm

TODO: don't forget to recalculate formulas (see the known bug and implementation details)

TODO: link to xlsxwriter

How to Use

It loads MindMap (freemind format) file and transforms it to xlsx report:

usage: estimate.py [-h] [--sort] [--theme THEME] [--p99] [--no-roles] [-o OUTPUT] filename

Converts freemind estimation to xlsx report.

positional arguments:
  filename       a freemind (mindmap) file to be converted

optional arguments:
  -h, --help     show this help message and exit
  --sort, -s     sort children nodes by title
  --theme THEME  use a given .py file as a theme
  --p99          use P=99% instead of P=95%
  --no-roles     don't provide estimation details for each role
  -o OUTPUT      out file name

First, you have to export your MindMap to freemind format. Then, call the script with its name as an argument - the report will be produced next to the given file.

It's important to recalculate formulas in the result document (see the known bug and implementation details) and (re)save it after. Hotkeys are the following (source):

  • F9 - Calculate all worksheets in all open workbooks;
  • Shift+F9 - Calculate the active worksheet;
  • Ctrl+Alt+F9 - Calculate all worksheets in all open workbooks, regardless of whether they have changed since the last calculation;
  • Ctrl+Alt+Shift+F9 - Check dependent formulas, and then calculate all cells in all open workbooks, including cells not marked as needing to be calculated.

Recommended tools

Clone this wiki locally