-
Notifications
You must be signed in to change notification settings - Fork 2
Home
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:
It converts a Mind Mapped project decomposition like this: into an Xlsx estimation report like this:
The idea is to use Mind Mapping to make your 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.
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.
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.
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, ...).
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.
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:
- Title - it contains names of general nodes (hierarchy is shown with the magic of indention);
- Usage multiplier - it shows if the row should be used in the report statistics (technical column, hidden), could be used as a filter column (see options below);
- Comment - aggregated comment from the comment nodes;
- Estimation - three column for O (optimistic, min), E (expected, real) and P (pessimistic, max) - original estimations from the MindMap;
-
Weighted mean - mean value, calculated by the formula
(O + 4*E + P) / 6
; -
Standard deviation - the deviation of the estimation interval, formula:
(P - O) / 6
; - Squared deviation - squared value of the previous column (technical column, visible).
Footer has extra several rows with their own structure:
- 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;
- 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);
- Standard deviation for total project work - square root of the Squared deviation from the Total row;
- Correction factor - is used to make a correction based on the history of the estimator, default value is 1.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).
TODO: techniques description with samples
TODO: step-by-step tutorial (screenshots)
Warning: this section is a translation from python language to English.
TODO: input format (uppercase attributes), script arguments
TODO: strict node format
TODO: detailed script algorithm
The solution is written in python language and uses OpenPyXL module to generate Excel XLSX files.
It loads MindMap (freemind format) file and transforms it to xlsx report:
usage: python estimate.py [-h] [options] [-o OUTPUT] filename
Converts freemind estimation to xlsx report.
positional arguments:
filename a freemind (mindmap) file to be converted
optional arguments:
--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%
--mvp add Minimum Viable Product (MVP) features
--no-data-validation don't apply data validation for filter and MVP column
--no-roles don't provide estimation details for each role
--formulas use formulas for estimation numbers
--filter-visibility don't hide multiplier/visibility column, use it as a filter instead (EXPERIMENTAL)
-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 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.
-
MindMup - www.mindmup.com works fine with freemind format, also there is Google Drive version.
-
Xmind 8 - free version is enough, but it's Ok to use any other MindMap editor which exports freemind format;
-
Python 2.7 (+pip) - download if it's required;
-
OpenPyXL - install it with pip, see module page.
-
yEd - just download and use it:)