Re: [Orgmode] Estimate ranges in column view
Great news, Carsten--still works correctly. Thanks for the chance to contribute! --Mike ___ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode
Re: [Orgmode] Estimate ranges in column view
Michael, I have applied the patch - please check it if it is still working correctly. Thanks! - Carsten On Jun 22, 2010, at 4:36 AM, Michael Gauland wrote: Carsten, Here is a patch for a new 'est+' summary type, including corresponding changes for xemacs and the manual. I've done basic testing on the GNU emacs version, but not the xemacs code. I'm not sure the change to the manual provides the right amount of information in the right place; I'd be happy to re-write to make it find in better. Similarly, the name of the summary type is entirely up to you. I didn't know whether to send this directly to you, or to the list; if it should go to the list I'd be happy to send it there directly. Thanks for the chance to contribute, Mike diff --git a/doc/org.texi b/doc/org.texi index 17615e0..529be4d 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -4723,9 +4723,10 @@ optional. The individual parts have the following meaning: @{:m...@}@r{Smallest time value in column.} @{:m...@}@r{Largest time value.} @{:m...@} @r{Arithmetic mean of time values.} -@{@@m...@} @r{Minimum age (in days/hours/mins/ seconds).} -@{@@m...@} @r{Maximum age (in days/hours/mins/ seconds).} -@{@@m...@} @r{Arithmetic mean of ages (in days/ hours/mins/seconds).} +@{@@m...@}@r{Minimum age (in days/hours/mins/ seconds).} +@{@@m...@}@r{Maximum age (in days/hours/mins/ seconds).} +@{@@m...@} @r{Arithmetic mean of ages (in days/ hours/mins/seconds).} +@{e...@}@r{Add low-high estimates.} @end example @noindent @@ -4733,6 +4734,22 @@ Be aware that you can only have one summary type for any property you include. Subsequent columns referencing the same property will all display the same summary information. +The 'est+' summary type requires further explanation. It is used for +combining task estimates, expressed as low-high ranges. For example, instead +of estimating a particular task will take 5 days, you might estimate it as +5-6 days if you're fairly confident you know how much woark is required, or +1-10 days if you don't really know what needs to be done. Both ranges +average at 5.5 days, but the first represents a more predictable delivery. + +When combining a set of such estimates, simply adding the lows and highs +produces an unrealistically wide result. Instead, 'est+' adds the statistical +mean and variance of the sub-tasks, generating a final estimate from the sum. +For example, suppose you had ten tasks, each of which was estimated at 0.5 to +2 days of work. Straight addition produces an estimate of 5 to 20 days, +representing what to expect if everything goes either extremely well or +extremely poorly. In contrast, 'est+' estimates the full job more +realistically, at 10-15 days. + Here is an example for a complete columns definition, along with allowed values. diff --git a/lisp/org-colview-xemacs.el b/lisp/org-colview-xemacs.el index 152d9fe..90bf4c4 100644 --- a/lisp/org-colview-xemacs.el +++ b/lisp/org-colview-xemacs.el @@ -917,7 +917,8 @@ around it. (@max max_age max (lambda (x) (- org-columns-time x))) (@mean mean_age (lambda (rest x) (/ (apply '+ x) (float (length x - (lambda (x) (- org-columns-time x + (lambda (x) (- org-columns-time x))) +(est+ estimate org-estimate-combine)) Operator - format,function,calc map. Used to compile/uncompile columns format and completing read in interactive function org-columns-new. @@ -1206,6 +1207,7 @@ Don't set this, this is meant for dynamic scoping.) (defun org-columns-number-to-string (n fmt optional printf) Convert a computed column number to a string value, according to FMT. (cond + ((memq fmt '(estimate)) (org-estimate-print n printf)) ((not (numberp n)) ) ((memq fmt '(add_times max_times min_times mean_times)) (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h)) @@ -1250,9 +1252,9 @@ Don't set this, this is meant for dynamic scoping.) (setq sum (+ (string-to-number (pop l)) (/ sum 60 sum)) ((memq fmt '(checkbox checkbox-n-of-m checkbox-percent)) - (if (equal s [X]) 1. 0.01)) - (t (string-to-number s))) -0)) +(if (equal s [X]) 1. 0.01)) + ((memq fmt '(estimate)) (org-string-to-estimate s)) + (t (string-to-number s) (defun org-columns-uncompile-format (cfmt) Turn the compiled columns format back into a string representation. @@ -1693,6 +1695,42 @@ This will add overlays to the date lines, to show the summary for each day. (format %dd %02dh %02dm %02ds days hours minutes seconds)) )) +(defun org-estimate-mean-and-var (v) + Return the mean and variance of an estimate. + (let* ((low (float (car v))) + (high (float (cadr v))) + (mean (/ (+ low high) 2.0)) +
Re: [Orgmode] Estimate ranges in column view
Hi Michael, I was about to apply the patch, but I don't think I got a reply from you regarding copyright issues. Did I miss that, or did you not say anything about it? Unfortunately the patch is larger than the maximum that I can take without copyright assignment. - Carsten On Jun 22, 2010, at 4:36 AM, Michael Gauland wrote: Carsten, Here is a patch for a new 'est+' summary type, including corresponding changes for xemacs and the manual. I've done basic testing on the GNU emacs version, but not the xemacs code. I'm not sure the change to the manual provides the right amount of information in the right place; I'd be happy to re-write to make it find in better. Similarly, the name of the summary type is entirely up to you. I didn't know whether to send this directly to you, or to the list; if it should go to the list I'd be happy to send it there directly. Thanks for the chance to contribute, Mike diff --git a/doc/org.texi b/doc/org.texi index 17615e0..529be4d 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -4723,9 +4723,10 @@ optional. The individual parts have the following meaning: @{:m...@}@r{Smallest time value in column.} @{:m...@}@r{Largest time value.} @{:m...@} @r{Arithmetic mean of time values.} -@{@@m...@} @r{Minimum age (in days/hours/mins/ seconds).} -@{@@m...@} @r{Maximum age (in days/hours/mins/ seconds).} -@{@@m...@} @r{Arithmetic mean of ages (in days/ hours/mins/seconds).} +@{@@m...@}@r{Minimum age (in days/hours/mins/ seconds).} +@{@@m...@}@r{Maximum age (in days/hours/mins/ seconds).} +@{@@m...@} @r{Arithmetic mean of ages (in days/ hours/mins/seconds).} +@{e...@}@r{Add low-high estimates.} @end example @noindent @@ -4733,6 +4734,22 @@ Be aware that you can only have one summary type for any property you include. Subsequent columns referencing the same property will all display the same summary information. +The 'est+' summary type requires further explanation. It is used for +combining task estimates, expressed as low-high ranges. For example, instead +of estimating a particular task will take 5 days, you might estimate it as +5-6 days if you're fairly confident you know how much woark is required, or +1-10 days if you don't really know what needs to be done. Both ranges +average at 5.5 days, but the first represents a more predictable delivery. + +When combining a set of such estimates, simply adding the lows and highs +produces an unrealistically wide result. Instead, 'est+' adds the statistical +mean and variance of the sub-tasks, generating a final estimate from the sum. +For example, suppose you had ten tasks, each of which was estimated at 0.5 to +2 days of work. Straight addition produces an estimate of 5 to 20 days, +representing what to expect if everything goes either extremely well or +extremely poorly. In contrast, 'est+' estimates the full job more +realistically, at 10-15 days. + Here is an example for a complete columns definition, along with allowed values. diff --git a/lisp/org-colview-xemacs.el b/lisp/org-colview-xemacs.el index 152d9fe..90bf4c4 100644 --- a/lisp/org-colview-xemacs.el +++ b/lisp/org-colview-xemacs.el @@ -917,7 +917,8 @@ around it. (@max max_age max (lambda (x) (- org-columns-time x))) (@mean mean_age (lambda (rest x) (/ (apply '+ x) (float (length x - (lambda (x) (- org-columns-time x + (lambda (x) (- org-columns-time x))) +(est+ estimate org-estimate-combine)) Operator - format,function,calc map. Used to compile/uncompile columns format and completing read in interactive function org-columns-new. @@ -1206,6 +1207,7 @@ Don't set this, this is meant for dynamic scoping.) (defun org-columns-number-to-string (n fmt optional printf) Convert a computed column number to a string value, according to FMT. (cond + ((memq fmt '(estimate)) (org-estimate-print n printf)) ((not (numberp n)) ) ((memq fmt '(add_times max_times min_times mean_times)) (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h)) @@ -1250,9 +1252,9 @@ Don't set this, this is meant for dynamic scoping.) (setq sum (+ (string-to-number (pop l)) (/ sum 60 sum)) ((memq fmt '(checkbox checkbox-n-of-m checkbox-percent)) - (if (equal s [X]) 1. 0.01)) - (t (string-to-number s))) -0)) +(if (equal s [X]) 1. 0.01)) + ((memq fmt '(estimate)) (org-string-to-estimate s)) + (t (string-to-number s) (defun org-columns-uncompile-format (cfmt) Turn the compiled columns format back into a string representation. @@ -1693,6 +1695,42 @@ This will add overlays to the date lines, to show the summary for each day. (format %dd %02dh %02dm %02ds days hours minutes seconds)) )) +(defun
Re: [Orgmode] Estimate ranges in column view
On Thu, Jul 01, 2010 at 06:19:02AM +1200, Michael Gauland wrote: I send the from to ass...@gnu.org just before I sent the patch, but I haven't received a reply. Should I expect one, or is that all I need to do? It goes like this: - submit form online - wait some days - receive a contract to sign (with an ugly FSF sticker for your laptop) - sign contract, mail back Then nothing happens (at least in my case). But someone at FSF should also sign the contract, and you should get some feedback. Regards, Juan Pechiar ___ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode
Re: [Orgmode] Estimate ranges in column view
Carsten, Here is a patch for a new 'est+' summary type, including corresponding changes for xemacs and the manual. I've done basic testing on the GNU emacs version, but not the xemacs code. I'm not sure the change to the manual provides the right amount of information in the right place; I'd be happy to re-write to make it find in better. Similarly, the name of the summary type is entirely up to you. I didn't know whether to send this directly to you, or to the list; if it should go to the list I'd be happy to send it there directly. Thanks for the chance to contribute, Mike diff --git a/doc/org.texi b/doc/org.texi index 17615e0..529be4d 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -4723,9 +4723,10 @@ optional. The individual parts have the following meaning: @{:m...@}@r{Smallest time value in column.} @{:m...@}@r{Largest time value.} @{:m...@} @r{Arithmetic mean of time values.} -@{@@m...@} @r{Minimum age (in days/hours/mins/seconds).} -@{@@m...@} @r{Maximum age (in days/hours/mins/seconds).} -@{@@m...@} @r{Arithmetic mean of ages (in days/hours/mins/seconds).} +@{@@m...@}@r{Minimum age (in days/hours/mins/seconds).} +@{@@m...@}@r{Maximum age (in days/hours/mins/seconds).} +@{@@m...@} @r{Arithmetic mean of ages (in days/hours/mins/seconds).} +@{e...@}@r{Add low-high estimates.} @end example @noindent @@ -4733,6 +4734,22 @@ Be aware that you can only have one summary type for any property you include. Subsequent columns referencing the same property will all display the same summary information. +The 'est+' summary type requires further explanation. It is used for +combining task estimates, expressed as low-high ranges. For example, instead +of estimating a particular task will take 5 days, you might estimate it as +5-6 days if you're fairly confident you know how much woark is required, or +1-10 days if you don't really know what needs to be done. Both ranges +average at 5.5 days, but the first represents a more predictable delivery. + +When combining a set of such estimates, simply adding the lows and highs +produces an unrealistically wide result. Instead, 'est+' adds the statistical +mean and variance of the sub-tasks, generating a final estimate from the sum. +For example, suppose you had ten tasks, each of which was estimated at 0.5 to +2 days of work. Straight addition produces an estimate of 5 to 20 days, +representing what to expect if everything goes either extremely well or +extremely poorly. In contrast, 'est+' estimates the full job more +realistically, at 10-15 days. + Here is an example for a complete columns definition, along with allowed values. diff --git a/lisp/org-colview-xemacs.el b/lisp/org-colview-xemacs.el index 152d9fe..90bf4c4 100644 --- a/lisp/org-colview-xemacs.el +++ b/lisp/org-colview-xemacs.el @@ -917,7 +917,8 @@ around it. (@max max_age max (lambda (x) (- org-columns-time x))) (@mean mean_age (lambda (rest x) (/ (apply '+ x) (float (length x - (lambda (x) (- org-columns-time x + (lambda (x) (- org-columns-time x))) +(est+ estimate org-estimate-combine)) Operator - format,function,calc map. Used to compile/uncompile columns format and completing read in interactive function org-columns-new. @@ -1206,6 +1207,7 @@ Don't set this, this is meant for dynamic scoping.) (defun org-columns-number-to-string (n fmt optional printf) Convert a computed column number to a string value, according to FMT. (cond + ((memq fmt '(estimate)) (org-estimate-print n printf)) ((not (numberp n)) ) ((memq fmt '(add_times max_times min_times mean_times)) (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h)) @@ -1250,9 +1252,9 @@ Don't set this, this is meant for dynamic scoping.) (setq sum (+ (string-to-number (pop l)) (/ sum 60 sum)) ((memq fmt '(checkbox checkbox-n-of-m checkbox-percent)) - (if (equal s [X]) 1. 0.01)) - (t (string-to-number s))) -0)) +(if (equal s [X]) 1. 0.01)) + ((memq fmt '(estimate)) (org-string-to-estimate s)) + (t (string-to-number s) (defun org-columns-uncompile-format (cfmt) Turn the compiled columns format back into a string representation. @@ -1693,6 +1695,42 @@ This will add overlays to the date lines, to show the summary for each day. (format %dd %02dh %02dm %02ds days hours minutes seconds)) )) +(defun org-estimate-mean-and-var (v) + Return the mean and variance of an estimate. + (let* ((low (float (car v))) + (high (float (cadr v))) + (mean (/ (+ low high) 2.0)) + (var (/ (+ (expt (- mean low) 2.0) (expt (- high mean) 2.0)) 2.0))) +(list mean var) +)) + +(defun org-estimate-combine (rest el) + Combine a list of estimates, using mean and variance.
Re: [Orgmode] Estimate ranges in column view
Hi Mike, On Jun 17, 2010, at 10:06 PM, Mike Gauland wrote: When planning my work, I estimate the effort required as a range, rather than a single value. That is, instead of estimating a certain task will take 4 days, I'll use a range of 3-5 days. If I'm a bit less confident I know how long it will take, I'll use a wider range (e.g., 2-6 days). When I first started doing this, I switched from using a single 'Effort' column in org mode, to two columns (Effort_Low and Effort_High), simply summing each column to get an estimate for a composite task. However, this magnifies the level of uncertainty in the estimate. The final 'Effort_Low' value tells me what to expect if everything goes optimally; 'Effort_High' provides the extremely pessimistic view. More realistic summaries come from considering the range of each pair, using the combined statistical variance in each (low, high) pair to determine the variance in the final value. This is the method used by LiquidPlanner, for example. I've been mucking about with org-colview.el to automate this calculation for me, and am quite pleased with the results so far. I've approached this by adding a new summary type (est) to org-columns-compile-map, and extending org-columns-number-to-string and org-columns-string-to-number to convert ranges to and from strings. This lets me populate an 'Estimates' column with values such as [2 4], and specify a summary type est to have the algorithm described above used to produce the final estimates. I have two questions for the list: 1. Is this the right approach, or should I change the behaviour of the existing EFFORT property? Changing the existing EFFORT property would require more changes in other places for example in the agenda filter that filters by estimated effort, or maybe also in code that helps to set/change the effort property. So to make this fully work with the existing EFFORT property would probably require a lot more work. 2. Is this something others would find useful? I like the idea of variance calculation for this purpose. So I would be inclined to take a patch that will introduce this new summary operator. Depending on how much code this is, you'd also have to sign the papers with the FSF (unless you have done so for Emacs already). To complete the patch, you could make things easy for my be providing a change to the manual, and by also doing the corresponding changes in org-colview-xemacs.el. But neither of these two would be required for acceptance. Cheers - Carsten ___ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode
[Orgmode] Estimate ranges in column view
When planning my work, I estimate the effort required as a range, rather than a single value. That is, instead of estimating a certain task will take 4 days, I'll use a range of 3-5 days. If I'm a bit less confident I know how long it will take, I'll use a wider range (e.g., 2-6 days). When I first started doing this, I switched from using a single 'Effort' column in org mode, to two columns (Effort_Low and Effort_High), simply summing each column to get an estimate for a composite task. However, this magnifies the level of uncertainty in the estimate. The final 'Effort_Low' value tells me what to expect if everything goes optimally; 'Effort_High' provides the extremely pessimistic view. More realistic summaries come from considering the range of each pair, using the combined statistical variance in each (low, high) pair to determine the variance in the final value. This is the method used by LiquidPlanner, for example. I've been mucking about with org-colview.el to automate this calculation for me, and am quite pleased with the results so far. I've approached this by adding a new summary type (est) to org-columns-compile-map, and extending org-columns-number-to-string and org-columns-string-to-number to convert ranges to and from strings. This lets me populate an 'Estimates' column with values such as [2 4], and specify a summary type est to have the algorithm described above used to produce the final estimates. I have two questions for the list: 1. Is this the right approach, or should I change the behaviour of the existing EFFORT property? 2. Is this something others would find useful? Thanks, Mike ___ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode