<?xml version= "1.0" encoding= "utf-8" standalone= "yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Estimate on Spinning Code</title>
    <link>https://spinningcode.org/tags/estimate/</link>
    <description>Recent content in Estimate on Spinning Code</description> <generator>Hugo -- 0.157.0</generator>
    <language>en-US</language> <lastBuildDate>Sat, 21 Feb 2026 21:19:59 +0000</lastBuildDate> <atom:link href= "https://spinningcode.org/tags/estimate/feed.xml" rel= "self" type= "application/rss+xml" /> <item>
      <title>Estimates Tool Expansion</title>
      <link>https://spinningcode.org/2026/fib-estimates/</link>
      <pubDate>
        Sat, 21 Feb 2026 21:19:59 +0000
      </pubDate> <guid isPermaLink="false">https://spinningcode.org/2026/fib-estimates/</guid>  <description>Adding story points, t-shirt sizing, and other new features to my estimating tool.</description> <content:encoded><![CDATA[<p>Several years ago <a href="/2017/06/time-estimation-making-up-numbers-as-we-go-along/">I created a tool to help me estimate projects</a>.
It uses a <a href="https://en.wikipedia.org/wiki/Monte_Carlo_method">Monte Carlo</a> approach by taking your task list, estimated hours range, and your confidence in your own estimates.
From those inputs it generates a series of possible outcomes to give you a sense of how long the project might take.</p>
<p><a href="/estimates">Try my estimation tool.</a></p>
<h2 id="quick-history">Quick History</h2>
<p>At the time I created it I was struggling with the accuracy of the estimates I was doing.
I was either underestimating because of <a href="https://en.wikipedia.org/wiki/Optimism_bias">optimism bias</a>, or over estimating because I offset my bias too much.</p>
<p>The solution as startlingly effective.
I used <a href="https://www.joelonsoftware.com/2007/10/26/evidence-based-scheduling/">someone else&rsquo;s ideas</a> and built a <a href="/2017/06/time-estimation-making-up-numbers-as-we-go-along/">basic tool</a> and changed my behavior.
That first version was enough to vastly improve my estimating ability, and give me a tool to help other team members think about their own.
When I&rsquo;ve been able to check estimate vs actual all but once I&rsquo;ve been within on standard deviation of the mean (the &ldquo;likely range&rdquo; in that tool&rsquo;s results).</p>
<p>A few years later I needed to estimate costs in addition to hours.
So <a href="/2022/01/project-estimates-tool-2-0/">I created a second version</a> which added cost projections to the process.
That helped in a few scenarios, but honestly not as much as I&rsquo;d hoped.
Still, I learned stuff, therefore making it a useful exercise.
Mostly it got to me fix some old bugs, and add scatter plot graphs to deal with complex outputs.</p>
<p>Those versions were driven purely by hour range estimates.
They were extremely useful in helping me improve my estimates, if limited in estimating approach.</p>
<h2 id="time-to-add-new-approaches">Time To Add New Approaches</h2>
<p>Now I work on a team that estimates with <a href="https://www.atlassian.com/agile/project-management/fibonacci-story-points">Fibonacci story points</a> and <a href="https://www.easyagile.com/blog/agile-estimation-techniques">t-shirt sizing</a>.
I need my tool to support those approaches.</p>
<p>So over the last few weeks I&rsquo;ve done more updates and upgrades.
I now have a new version that will let you estimate using either of those techniques.
It automatically converts those estimates to day ranges and runs the same simulations as it did before.</p>
<h3 id="new-options">New Options</h3>
<p>My experience is that teams using Fibonacci estimates, story points, or t-shirt sizing are usually estimating in days.
Calendar time, or business days, are often what matters to product teams or in house teams.</p>
<p>Consultants track billable hours.
In house teams hit a deadline.</p>
<p>To give users control over the conversion between the raw inputs and the day ranges the tool offers two modes.
Which mode is best depends on what you&rsquo;re doing, how you team works, and how well you track productivity now.</p>
<p>The first is a simple points to days conversion that takes maps the Fibonacci number to a number of days.
It is labeled &ldquo;Calendar Days&rdquo; and lets users control the mapping.
This approach is better for long-term estimation covering months or more.</p>
<p>The second mode is for teams that are good at measuring their velocity for agile methodologies.
This mode let&rsquo;s users specify a number of points per sprint, and the length of a sprint.
It uses those factors to determine the number of points per day, and converts from there.
This approach is better for shorter term estimate cover a few sprints.</p>
<h3 id="other-updates">Other Updates</h3>
<p>While I was doing those updates I addressed a few other long standing issues.
Older versions lacked feedback that a simulation was running.
I also fixed several <a href="/2025/empathetic-accessibility/">accessibility issues</a>, improved test coverage, and added line item results summaries.
The ReadMe file is now far more complete with better descriptions of process and more instructions.</p>
<p>Importantly, I changed the behavior for under-run estimates.
Previously 50% of the time when the simulated value was outside the range provided it would pick a number below the specified range.
Now that happens only 25% of the time, the other 75% generate numbers above the range.
It also uses a calculation similar to the existing overestimate approach – the lower your confidence the wider a range it uses.
This greatly reduces the number of 0 hour/day tasks in the simulations.
It also changes the typical graph shape a bit to long-tail more on the high side.
I think that is likely more realistic for most projects.</p>
<h3 id="welcome-our-new-ai-overlords">Welcome Our New AI Overlords</h3>
<p>To accelerate the updates I used Copilot to help draft and review the code.
AI coding still feels like cheating, but it <em>is</em> far faster.
The code new is a bit sloppier in spots than I&rsquo;d like and required several rounds of revisions at times.
However, the AI added a lot of speed and reduced research level for new features.
That saved time meant I added polishes I&rsquo;ve been thinking about for years, but never took the time to do.</p>






<figure class="figure-figure-right">
  
  <a href="/images/posts/estimate-tool/ScatterPlotWithKdeLine.png" target="_blank" rel="noopener noreferrer">
    
    

    











<noscript>
  <img class="rcf-image" src="/images/posts/estimate-tool/ScatterPlotWithKdeLine.png" alt="A scatter plot graph, with a red trend line over the top outlining the graph&#39;s curve." loading="lazy" />
</noscript>

<img class="rcf-image lazyload show-if-js"
     data-srcset="/images/posts/estimate-tool/ScatterPlotWithKdeLine_hu_de90c12f91c4c902.png 680w, /images/posts/estimate-tool/ScatterPlotWithKdeLine_hu_d9c85115efc91e79.png 850w, /images/posts/estimate-tool/ScatterPlotWithKdeLine_hu_55002b8f0a53c692.png 1020w, /images/posts/estimate-tool/ScatterPlotWithKdeLine_hu_411e3066dfd8f994.png 1360w, /images/posts/estimate-tool/ScatterPlotWithKdeLine.png 1648w"
     data-src="/images/posts/estimate-tool/ScatterPlotWithKdeLine.png"
     src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABhCAIAAACRRD67AAAU9ElEQVR4nNQdXW8jSbGrqntm7IQod7tCB7wchxAP8AL//zegE49IIKHTPu3Cfib2TH8UqqqZtuOMc8nerj2pXbiNM7Zrqrq&#43;P8bf3Ny4e8DM9R&#43;gcP&#43;aRQDz&#43;Bdg/PvcwN9/qeyBXOE9ES2RB6VwShyjK8UhQhOAvEM8N1pPg0MGMHOMcbPZxBiZGRHX63XXdYtjALNQf7spfa8MIMytW63gucnBDANSSpvNZhgGAPDet21bNdJygEvhOPAwOMEycMk89I5QRIHo3Ng9AQ4ZAAAhhPV63TRNKQUAEHGBx9&#43;Z8nEOQ&#43;MQ3CAHx/UD&#43;CBaaGkIH4d5BhBRzjnGmFLC5WlVOf4pupQdeUcEOYkWMqWUInh58dw4PhbmiVsP/hJdIGaXs9BaPQSHKH4QovzbOZEMZca5sXwszNgAO/tZgRXOhNsREBSTS1l0vfcFiRvnigdmFwfOGVISCVjauTkC817Qp0&#43;fYoxmhEMIZ8JtHpiLKB8ujgKTzw4KBkBGZihFeZAcN8&#43;D/LMqyE59DQWWJQGifwrnLAeciAEKu&#43;JccVAANAgAzsWV/Fy00LwRvri46LoupWShwJlwmwO1tC5nUTLknQMH7JTULCzxjqLLiUVB&#43;WehhWYY4L1HxFLKAr0g0T85cckQ1PyCc5qGYHbgXBHPgVwaID8bCfgZ4i7LCE/6h9kVwKLJiPEFFQN2wHrq2TTncjA/DvNGuO/7lJLlghZkhEdPP4vTiVTYpcJJaC2hGACIGKAYBtFRpqYWD/MMuLm5GYYBES0VcSbcDoHVRy45c2gYsag8jF4CSigGCEXCF4SUMCUIYflmYCYbioh26i0cW4oNUJUi9FYUHSA7dYXk32IAnEiAuEPOAWbx34B56eSfNcJN0yBiztm00IIi4ZxdKYDEJPrHokRCJISdskdxRlmT1btSwYJhhgEmAXbwU0pLYYDqn1GzI2V2MRUVBiExuGpxNRpAFNOc8/Izo/MFmZRSlYCleEHi&#43;mRxQ1Gi31wmrPacHVFRwg4kIpEACYmXbgbmc0GbzWa73TLzYlIRFp2ranGQ9J&#43;EQASexOzaLwuLVwoOSByh4p5DVm5GAqwmY2Ew6L2dA7EDnFSnq6PDgGJmQagfSKul&#43;stcxD8qzB7AyTVOfhA7LNb63DdwFGYYQETr9dp7n3M2p&#43;gciN0FiwCyRAAFqTjLPoBYXNMwek6KyAEXcAxYQKJ5FQJaMP3njDARdV0XQhiGYSlG2AxAyYVCUv/HAl43FYBNIDxjERXEmpPAkhKkBH7RSaEZCaiwCNIrmAEQLjhgOyUI8seNCgZBjAGIcS6qdhwDsMZpCzcD80Z4GAaryTDz&#43;Y2wEN4MgLiYREhIXiywnHOhv/HAAYtLiqb6hQFqOdgtOhybkYADL&#43;j8qQg9FJxzAWQkQPQk1Cetlu4fb7RXwGWGsTRvnMPlhmMzDDAz4L2XOHMJLVlaBBYXh4LF5RIt2v/Uv2E3hWH626L/ZSKx2DnDsmsDIwNqwIUi42RtKRaInd0LshAA7IRrzcterxSF0RwzGjOK/FisqSAnXHZtwBv1h2Ho&#43;x4R27b1CktJRUwGQEIS0T87dPbde81FaE5Oaa15OxCDIOFZWXIg4M3qfvr06e3bt977b7/99uLionaInr8gYwYgZQbMgMwgDqbq&#43;gOa3jknPGa1RGLYzMBCu7VGCdhsNu/evbNqsCkf84KsRHxOBCcDkNAnFoeHxL7ep/90uWkhtRAUApSs/Euw1EYVv98LhIjVDd1ut6WUEILVxc4F1qAhWEn85WhydR4mppUHtG0Ci5aIeam1AV8Lv&#43;bzmP9j1vj8qYidAUCHcoSV9EePv5EeweWxfqw/Fiazw4usDcx4QZYBbdv2/KmIKQUkbn8Qv&#43;Dn&#43;4SVP4ggUbCcejXPCy4Rj6fbmlBijKZw4C6cDTtNAZkJRSJPEoIhPiAAJgFACJ4kZkbvHVJJiVNapjM6SgAAWB3GSjHWEWQZ6bMZYdP&#43;WS0QokMQetLD9HduKhSDdqgULmIJYualmgG/X3wvpRj1Y4w1FXE2IzxlIBjREaH2a&#43;PjJBK0YU7rAlgQix4vXKQzesfA8pjFgiXMZbAagJJydpgcllExPvK9Y3UsFVeQ2ErEi9RCOy/IzG&#43;FEEIdEzsDXur/iEdcSkKXMntkVZePPRM2RZANfySX4zK10C4ZZzGXzURaRggAzugF1QDYuhCfeHTZuobUZUVtombMeYEhMdasg3WjkPpqfBdOj5YOIaWcUgFkPRBP1YjmjIoddi47zAxFPdons/Irw5gLsi5oaweqdtgCsTN4Qap/iuZii/cM4lB6tcCP1kCA4gtBKVAcMCEjmRngEGBJ8YC3WQwA6LputVrZeN5WwXzQM3hBNgSQkgPgKQC24/xI&#43;oMVyEZ3AhyTOKNJfKqlaSFvvYjX19cXCiEEAGjbFgByzmfpDR39H3FAiYlg8j4ff/5HHmhEVhiYJTDjDCUmiAmXUGWawBu5v/nmm1LKfiKoaZqaED0pRtYCnRI7yNoEh26Xgn4aqBZihiKmznOiHCPECE1YzkC9twJkPeb7d6lO4Kmbc7kwxygMQILgtQhvPRBP/qhavGTtFBJ5YvlkWlJeaJeKqC/V7LTFASf1gqz/R/RPycE7pKCbQqbq71NBS/QA7DixY5BzZvs92HvARTRszTfn9n1/e3ubcyaik3pB4wxM0voXsYOgiZ3P0T9jjczo7zKrZ0S&#43;pKHECCFwgNpXd0aYH1O1pJCpoNMJgWXfYtQGCPFbdor/c8k01g9QPwARQnBIJaYyRE3znT8mmJ&#43;QMS&#43;opiJOYwaEzzHlIebiOBAoA8wAPMn/OYDRHSLQ1l4PJfDQ8zCArjlwdGYRODqiZNUxm5c/BSJjLbTPKWX0RYIlObi/fBMWOPGFPGLWZolM3oFoOd/3IAGBh7P23RztDT1xBkKUzxDzMGjg6gt&#43;htdzBPZqZDrPig69SxmG3iEQrMTOnM8UzBthm1SNupDnFEbYMj99n1LOFAqJ&#43;TW98ZT4dx6gZuVqii4EcbbiwJstWJh3vp6JmeZc69O6vb1NKZ2iN9Qir75Pw5AYI1ApQOCC6g36EgbIhoh3jaSIkQLH7GOEzVZY0Lbn4sHMfICFZpaT&#43;OqpCFP92z5u&#43;lRcJi/eJ0t8qDWwL6McaloCwcU8da2DL1AgJne78cyVBycOPOeNsE2qfvVUxI76myGm7AP7YJVHr&#43;nPX6p99sAGCGy2O&#43;aSiig5RwFKKn30ufiUqW0xhC8jdI&#43;Go93RtVflq2BjsYVqnrzZZlH9PmJwmnkORG3QFMSX&#43;2qt1EMgzJ6ybphgcA59RizRpSH6lH1MvutC1yD5z0l9fBbMD&#43;kdBGJf8PvGsE6sbi5DL8c/5oSUKCT1BwNA8I/qfng6yBcEQtcIb4sIgXpfADkCp6HcbjlnKMV3rTXAnMAqzDOgrg61ZPWX&#43;SprM8&#43;lpCTupjidccglAmXyrObGy/HXe//M5M9DYArNk0i4qCPVRRJrEjE0CUB&#43;6CUOb1IMnaij0TJPOY0vi4/BPANqMo6IflFBhu3PtOYhpTTE1A9RVH6JDL0T6kMBj9AQtoGaQISP7D55Mqhb4Wz2tqAqIucyu8LA6DFgSVF7ojZtTE0b0HvbwThKw8iML4nbvA0IIaxWKxuSeaoXtGvQr9rGaoE5l5RTTGIDGSKGBFTUDfdEbUNdQ20gT5&#43;ZensMgJvSc&#43;qXBuJEqPN/wIiaAQQGLCWJdJTiKSLROI0m8bQ3mWCobaq/FNF5L8gGNB5ORexPPewTfTrs2Yq6jov2lxfHXAATUUKfHLIEp9jqfYVAXaDgyeM4ePT1wNSJpSGDR&#43;e8p5IV35hK1spBZh&#43;FI074UgqmHjSVB&#43;QdodNDI4zxHvYSZbshKWexx&#43;77HkgnzqciDojOY2YC6kTWOJc1TWftnfQs1NeSug1ZqhNOuuCT7JSV7FIS4feETRCfJ3hsvLl/p/P/zC/SYXvUFsgSqQyppFwKo0PggAyu6IQByC0xiA8b7ejJ2yZDDUaZSUeBzc3aeMgobuBgXnMdNcKDjqqWUki7Ey2OhPH309xoGRcmyf/Zj7ZqVEe0CoXxLm3BntKXHIRUHGQu7EXpeyP9ialvoIlqiQfKOP8qscKQchoHolAzUt5NayR1X05WiyE37ProbHhtNAz6cTo16yycsb0tulSWvDfjdoDD0VyQpSLUMQ8EEZS4MNpUXY3BhScGmPQ5QrZ5RO3mBCKwhOZU&#43;TAae4Q2ECtPxeP8aib3MTAO2qtoqyMmcpnVQ63zaMXUKqsc2/KJOjhVyqQPnA7I1pnypAt9tRGP0PlAXde0DdwLbo6qIPV/dOZQ3QLISTSlKR3bhqGrkZwnU01gHYBEblp6jJZLcPWEOBhTYwiT/jor8ffuVsc6TLcwgp&#43;GXqv6ZQdm3WpMVMhzKJP&#43;vdPL5qZmNy5FO5OyGwYEYC9K&#43;OBuj6YiACAOQ&#43;x7NwzZsWhw8ozjiVZyj3/Hqd1R&#43;42CaP04ON1DZcAdM7WM4UUYTWbde8Blp9f1eOv5UZGfrhCHAtSQqy6YHG5jhcnTKAm5QE6YEtpyzXurW46mIrSrr5R&#43;EIvig2taF4KrA9JQDT3gZF4Q6o24KfCBvY91C6H4AzDuIQWuJnNiw7QXBEbh4Kp4VEe5cXWps7zTyBh27NkVj7rCZbYf6aGCTFH9hb4LmqWyxcCTwR/NwX6MWD8c7t7S5KI6V4uw/HA19vGDvV/tSji2YwJGXQWTbExTyjz92riIOrnM5hE5sgN6H47mgsQRijGza5oAFpTv3UTVe2YmxsY1vu9p3VGP0&#43;e7IxkmnvQs11m8IwmhwyvhqD577JVc/QuxAqAFWZyvy/Go&#43;essBUw7Gx07mLtsCv/cfRGYlwDLRhTd/6UN4rulGDxdsEvY6Xqesa8dDsPmsfk3S1igHNL92g4O6c&#43;ucLHr2J7cQeR1M8ohzta5q5cWVmJ5&#43;YOIh4StV2b17cXLHJvvD67UM5HHjf2FibDtmq5pJDJ0ByERl2x/srWUex/GtV37BLIOG0OyFPEQAYOXmBPuNjnM2wDLRgAgOxYH9qAxgjkzpzhsN5tBawbe03q1ptVqzOLvU7&#43;UOPTb7TbGKPfmfdt2TdOIQrx7XGIqMQ2Dzic78VCDX68a6pDw7pVlGHI/9H3fW&#43;Ne27Xtet0ED3fZX7jEIdUr5XPatvHrJuDdK8WX7ofYD9thGOR2hKJrF8SVPrzxwjnF7Vav1Irheq03jjRz432/2WxsxiJ4WnWd1vjuIDkvAdYYYX2ik5DBTp2D2h3N2OVBAhdXPDctOfb7TbR6pU5Y5xyHbE0ujqlr2kDe&#43;wOMCXJERpd13QYDQ0DXNXJo99PCIh&#43;cByiRkzgsDshJNNc1/iBtJewpqYcM4pUXZCIobYD28EoWMc4wuIKcuSQHEmoROD8FtrsbZ23ZHIbU91kiZOaS0bHHPZ9jd&#43;PJ&#43;jxE8DnwXF75aBxw1DsHW0yCbdsAuJRaS9i1bWuSuHufouuJuq5FBJs2IKKmacK9lBuza0K4vJCDXCeW27b1ZLMZe9QCbJvAlxdt29iVIYRWk6gHSON45WWnD4IysW6axh&#43;qNfmhaxtwF6tVZwpQkfR3yGAERmzaxjm2byciRZLAzd54B7YyR41K0zT31//A7JP0fhbuz8/UZ848fOUD48f1wRETVR66cv/5Erg3QHPQRmZXViQfGD48uPLY7dRC4Ze6nc9kwNnB/LTtdmtDDDbnbEJjBe1zI/hYeGhp35KBmbfb7f/&#43;97/tdlvPb9d1L168qMuOngU8VwbUFcvWQGZ1C5ODc&#43;P1NHiuDLDBnqurqzrJg4j26JtndPyfPQMQ8fLysgalNl9&#43;9uzqk&#43;AZM8Bi2v2cxkPe81LhuTLA4DlS/ABmmnNPj8Qxx/z0mBicpzWxjsyf&#43;KEN1n6x7zueC5P9pbUnmwsaGWCF&#43;Pfv379&#43;/frm5ialdILvrvmGb7755sWLF&#43;v12nR6Sun9&#43;/dv3rz5&#43;PHj2FpxEjAzfnV19fLly6urq9NsDd7tjLu5ufn3v//9448/vnr1qu/7r/3FBoh4fX39pz/96a9//WvTNCEEZr69vf3Pf/7z97///aeffjoZJsaAruu&#43;//77v/3tbz/88MN6vT4dA&#43;y2f/rppx9//PFf//qXPc&#43;8XrSfS3nSp&#43;8/g6MK9a6Yo8mDb7/91jn3/fff//rXv7bVFJvN5tWrV//4xz/&#43;&#43;c9/9n0/i8lTkTkQo30Ns5&#43;tWq/X79&#43;//&#43;67737729&#43;uVqsn3eznwR0VZPtz3717x8y2uKOmveya/XkNu4G6T2JX95k62uuzQOsT&#43;SwFbR9oT643Xffu3TtL2dsnp5Rubm7eKliCYf&#43;N1eunu9PuVhswnA/YU5dgm35DxPqZZm/qqtTtdvv27VtTwqdRfXeMcL3Dtm1fvny5Xq8Ne1PEVlgwvGvj4jAMtuPSyGf3b3dl2iOEYPffKViNwUj85s2bDx8&#43;1LxmRWMfk6ZpXrx4cXFxUVfaWRrOPrmq6ZTSMAze&#43;67r6lmp9K1LaG0zv&#43;m91WpV3xtj/PDhw&#43;vXr0//EN&#43;j9QCbDrOdKXVwTItfvvoJJjeWEzfCWSBqjLFDZ6kCI5lR2VjYNM1jsmZ2qK3YUHmz3W5TSpZhNzSM4nalrTwyPC1ZZKalaZpKXONNfVdl5&#43;lTSXdWlhlYovH169cfP36sGtxobTS1EWLnnD1oY3&#43;Qz25jUDDtZHdlqsb4au&#43;15jsbgdqPpw7y5tvt9r///e/t7a0R2vCpyZ&#43;6ZqRiYjjbeffe27in1YKs2XsYBma&#43;ubmxN1ZB6RXsx1MuLNwxwMqbl5eXFxcXRsEDZ3S/D6C&#43;Ujdd2itGkfo8&#43;npxPVnVvBtfu667VNhP4hPRarUyTOy5rgdFi/uYlLFFtVSc72NSpdD0EtwduzCedV33q1/9quu6kz25YmQAIq7X69/97nd/&#43;ctfrq6uPtv52&#43;fNY64nouvr6z/&#43;8Y/X19cmGYi4Wq1&#43;85vf/PnPfzYGfJ46fiom9pbVavXDDz989913XdedmgEXFxd/&#43;MMfLi8vP378eMpAzKooL1&#43;&#43;rIduvV7//ve/N4/wZJhUDXl9fX1KBuxKkvUBeicOPu22q23Yn5E6JSYVH5uRPpkKOqwJnysFNlvUPgsmZ0vGnf67H4blYPJV4f8BAAD//4OHUh0TP21GAAAAAElFTkSuQmCC"
     data-sizes="auto"
     width="1648" alt="A scatter plot graph, with a red trend line over the top outlining the graph&#39;s curve."
     loading="lazy" />



  </a><figcaption>New scatter plot display with KDE line, and save buttons.</figcaption></figure>

<p>For example the tool now outlines scatter plots using a <a href="https://towardsdatascience.com/kernel-density-estimation-explained-step-by-step-7cc5b5bc4517/">kernel density estimate</a> curve.
I added save buttons for the images, and there are print styles that make it easy to print into a PDF.
Hopefully all those changes will make it easier to share the results.
I only bothered to make those changes because AI made it easy to add them.</p>
<p>That process was aided by having had a reasonably good structure to the code I wrote in earlier editions.
And I did check all the new work, but keeping tabs on 200 lines of new code from one prompt is a challenging exercise at times.
The code base needs some additional refactors still to deal with some of the bloat it picked up.
I don&rsquo;t care that Claude and Copilot assure me all cleanup already been handled, the 2000 line <code>index.js</code> tells me otherwise.</p>
<p>You can find the full code my <a href="https://github.com/acrosman/simple-project-estimates">estimation tool</a> on Github.
If you have suggestions, please open an issue there and we can discuss it.</p>
]]></content:encoded> </item> <item>
      <title>Project Estimates Tool 2.0</title>
      <link>https://spinningcode.org/2022/01/project-estimates-tool-2-0/</link>
      <pubDate>
        Sun, 23 Jan 2022 20:28:04 +0000
      </pubDate> <guid
        isPermaLink="false">https://spinningcode.org/?p=1814</guid>  <description>Project estimation tool using Monte Carlo simulations and graphs to tell a story that empowers good decisions.</description> <content:encoded><![CDATA[<p>A few years ago I wrote <a href="/2017/06/time-estimation-making-up-numbers-as-we-go-along/">a piece about project time estimation</a> and created an estimating tool. My goal was to get project managers to listen to the fact that estimates were inherently a guess not promise. The tool I created took a series of project tasks, the estimated time range, and a level of estimator confidence. It then ran a Monte Carlo simulation with those tasks, and generated a histogram of possible outcomes.</p>
<p>Five years later I still use it for project estimates. But I have grown tired of its interface weaknesses and needed to add cost estimation to keep it useful. So I recently heavily revised the tool and <a href="/estimates">posted an updated version</a> (the old version is <a href="/estimates/old-version">still available here</a>).</p>
<p>The interface is still very utilitarian ( <a href="https://github.com/acrosman/simple-project-estimates">pull requests welcome</a>), but this version makes it make easier to adjust the tasks. Much more importantly it now also estimates costs, not just time.</p>
<p><a href="/wp-content/uploads/2022/01/TimeProjections.png"><figure>
  <a href="/wp-content/uploads/2022/01/TimeProjections-300x242.png" target="_blank" rel="noopener noreferrer">

    
    
    
    
    

    
    











<noscript>
  <img class="rcf-image" src="/wp-content/uploads/2022/01/TimeProjections-300x242.png" alt="Histogram of time estimations" loading="lazy" />
</noscript>

<img class="rcf-image lazyload show-if-js"
     data-srcset="/wp-content/uploads/2022/01/TimeProjections-300x242.png 300w"
     data-src="/wp-content/uploads/2022/01/TimeProjections-300x242.png"
     src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABnCAIAAABHHd2mAAAR2UlEQVR4nOxdiXbbuM7mps1Jc3pm5v2fcKYzTWItJAH8h/wkWnacNFtj5b/B7e24jiLLAAl8WOnu7&#43;9jjEop55wxRmutlKJMOpPKVH4kIlprk8laa4xRX/QGcj9//vzvv/9CCNZal8laG2OcpglMJ6LCdK21iFhrq6rquu7m5qbrui8ZvIXcNE1///33jx8/Yoxa66ZpdrudMWYcRxEhohBCjJGIlFIQQ13Xbdv&#43;&#43;eefeP0lgLeQa9u267q2bcdxhKrBAldKQSTgu1KKmaGUoH8u/eT/T0jfZxqGAZagLGoi4oWwFUQEwoCmaprm27dvXyrojaShXiQT&#43;FuMLd5Z0/qaLyP8LuS893hVAA9IRJhZKQUuw/xiW8AOF1z0RW8h9&#43;&#43;//4YQtNbWWryFpS0i3nvw2jlXVZUxxns/jqPWuuu66&#43;vruq6/ZPBGcj9&#43;/Oj7npnBdBExxrRtW1WVzyQizrmrq6u2bYdhuLu7s9Z&#43;//69aZqqqta66&#43;E2&#43;qJfksN/YAaYGXATrARz8SOYCqggICJcXEyIMaaqKmvtlwxeRA6YByu9CMBaiz3RNA1cYiCftm2LGOCsjePY9z0RtW17c3Oz2&#43;2&#43;BPAicmuYjyWvtWZmGAYwuixw/A1RwUsYhuH29jaEcH193XXdQ&#43;D0RU&#43;Tw4pGLEjrhEqZGQEJCEBrHUKA&#43;a0y1ZmaprHWgulEBJPwtfxfSg7MVUqBg84dAVP4yX3fj&#43;M4DIO19ubmpm3buq4RvKvr&#43;urqqmyRLwG8lJIKCiFA80DRE5H3fpomgP2mabA58Hq323VdV4wtsNMXCno1OcB8Iio&#43;LXjtFoJbAOCP5Q95lFt8Mf0tlFRQCAF6P8bovcc/9UJEhN3QZnLOvfrDTkz0l&#43;SSAIwxBYAWJwAyEBEgH4gHWwSyKew7CRk9jYLKT8sdEM/4X5aEQ2oFvIZCt5mQookxWmsBe4io73uwDBFp7I&#43;yYyBIcLnItYSMSmwVYQ8Ybdjz/&#43;WwUlJBWPghhGmaCsuAQfu&#43;h2yYGegIgAdSaZomhLDf70MI2CjFVYYrx8xAViKCxA4E4FxyAHe73ffv3wGlLs2Hi5FDzKf4tyXSWbIueB8rHa/BQYiq6C78Lpi&#43;DqaulRK2Dt4B7vpy3Nxff/317du3wkFoDzCrhOcK40paBgqkaRqlVNd1CFcUdq//LsajGBi8jz3Utm2Jwr6UZtlp9amVl/bel7RXiUYUAkgt&#43;YCycstyfix1c/QZK9msqeyzlxoASRZFmOF/qFllvur7X5wcYCVWNzAo/DLwC7jzBPi/I73utsziI/lAWYq6srZyxppPKYIDZxFznjLB0kLFr/OUW6D0nMT7MYxTVFoZrZvKXrWVrqzZzEM&#43;nw5eVUEjKIkoyZmLPt4ZYlFTiLf7afDRmrTsp8pao501&#43;hOi2VkABZvXdQ3WI0j3agv5&#43;yg9G/Ho434MWfmrJujOqs4Z21Tqs5nkww6AnimWFihzgwEDWODI4gOJKKNFawlWqLFSWb29FfM0HQRwgn&#43;AiLYG1TNYYB85RI4ZuzmtSGLsY&#43;iqqqn1Z3OqZwGA44BASIGBYA&#43;2QyzKRx7G4CPBbxElTOQn7vvJ7XamcvYzCgCO0jRNwzBM01QcqK3ZAECgKVCMXHZmsgqRBh&#43;bEGuujVafSARHNgBVoSUQXbzijZBk75eYiWc/ZUHQiiSZhNFTR5wg0ecxxUcoCOVAUPoI/mxKAEqEOGv/rH6yRIoTo2KyDRRJGvlMUOjID1jHf0r0Zjs2TUQBgPpID5EBJ/H8KiqyPTqDgtZxzRK83AKJkhB5mGKIeQccrfT0mMyLDGQ7y&#43;YXdIqCpmlCkRYA6KYi9SyKiAMx5QDJmpI4simeQmyibapP4xQfoaBxHO/u7u7v79dVKhvZAcUDiDSv/hNiltHTbe8Tftjppv4cRZJHKKi0x2itwf3thOGSAYg8&#43;OwBnJMAsUQf4/3IIrWzlTPGbuLJn6ZTFGStvbq6wptEtB0/IBmAZIGPPICTSwJxmGJV2UC8iW37DDpCQUXnlGDcpnZAtrH8KPsFjoLweRW1UTrA/MeqS7ZgA8D9SHDB4JP9P6EjGBpjXGfE0Jpx0cebSVSOQCQ/63m6RT6NjA4wFCjo/v4epSgov93tdpd&#43;QlVcMB/mdsKnrsR2yWG6T&#43;ERHy3wdY9GSdBf7tnKU836J9CjBmC5NP2BS8ycRbANA/YEnaIgNODhTTTJXPTx1Kx/eI6A/kIAWQTEyWHOWPVT7YCC/QsK2kowTjJPiSM25S8vF5ljQp9BAkcCWPfmravVL/d4C8kL1CFUFm9Bez6DjlAQAnCo4CxViBf/IrKY1ucgG/gBySPLGUujt54fO0JBaIwZxzHGiLAEig8vS&#43;ApF2TzKyJOeCnZDBJrZePJmaMdULKSRISCuJKfuRRJhjSjj6OPkU6DoA8vV0rzHBalyFyL3Tb/lVuP4KiqarfbofIZ71&#43;88RrcvxvCfgyB5jT8EyTrvE2gtnZm21DUlb6JEgtCv8YWUBBS8MMU&#43;zFMgZ5lV0WJTr&#43;VE2fJFiuzaSzkiAjDgtCvUtqDYYcvG4zLRSi0T9xHDOJ5YYgMW3PgiLcflXNocRnHcbfbFberFKxfFgXlJNecak8r&#43;0W/O2NXpbbtDjiEgIZhqOu6BOMK/L9gYRZCOjGv5V86wA9/N28C2b4/7NaddShFwfA49OxdMBoqSojEhxwBfaFbu9RvxRC5qWTLqbEzCZnC9AsXF&#43;QarAD980ItKEpl601jiF3j7IaRkFvPIgP3gYLQtH1ZDJq10CszQuiigfdQue3Wyh2VpZTyLPzzsuMfZBUBejmYSbuXckCCtm0HXKmHWHfcbQEFSbHAD6qAnvHL6f&#43;cK1niHBrdqBJyYDQEEBcqYrgUCkIEYkIE4lWBTZm1ULIixGLNRkXgihuMaU1AQaVd&#43;1IJGRHlQ3LBxlwG9BrOoWQaQSHizXbwufW4YmRj0CYGjXSpUARn3g0ZR74OjEnWQSHOxbxNZbfZNuDquv727Zsxpus6TCRr27ZMhbuIAOBG&#43;UghMKEJ5lWcE6UCUT&#43;Gfoxt5dDP/f6P&#43;zZyGP2Glhi8KCnJ0iT8wc/Euduin1CG/vqAfhIkST/F/eiv2qqutugOOAynKf8&#43;adX7eBSEhOIUaJhiWBDka9kmCOdBlsyVMZuDo0czCDCTBtMjoIU&#43;PhSBKvPRxym8A4LPaEpld/phS8Em6DQjhgr1MiLrg22AiHji&#43;zHcDT7pH34HluW4kKyw0LYkcMTf9fkM61a9DyMWNfn4cz/d9t4H4vcoMcx17dRPYfDPKSz6aDrtD8BIynJow0fuALhOU0i45XkZ4GfeVsKSVutq5zbWyX2k4ssA7nV5&#43;sc9y9IEmZuQ3m&#43;hLla9n&#43;J1oHpjDsEGCt8WkrkCLtneZ9WfPP/OOToNw87vffM30tEOQJ9eQUFE9GGxIMmRgxBRUPXeHMqRpRyWiCGSy1NuNrIJTlHQfr&#43;/vb0F68u4tw8gFpl8vBt8P8X4Vvh/hpBe7sfYN9FaUzu7kQlbZ8rT4QMDC32MFwbsf9v7f26H&#43;yEk&#43;PPeiB3FQvsxVM5ora67usFGuDSdzorACQxlatAH7ACofnSY3vV&#43;CoT0y3su//w3s4wh3vZLtcRuEzI4RUEYZfthE7PmuH&#43;g/ej3Y5iy9tHvy/7DhykiGaZIycPLQskyuGwf4pEAyoQUrP3fmpJEuBjg5G7w/95PwxRQnpE&#43;8DfEDDLLk1e8rnORtqqyPbiUGE5tQDmX57eWp&#43;dsO/uQlPLd4G/30/1SfPhb4YksiZp&#43;ipId7xCpa1xTuaaySR99uAxOYSj69FAV&#43;jvK02WVbrztZ9aPnnwA/P&#43;IYBmyzf2YNpwP1NXu266&#43;2TVtrWYRfOBmOJ2WEkIYhiGEgNr09y1PB9iH2rndT//dT/sxIGf7wTGa3Pcqfa45RdgjqT2pXT4g0OY/HyOG06mJTdPc3NygUfK9ytOx8VHgE4j2U7zbT//djQvivAQJ9K3yQuhnYlGDp8qZprJd7eoqKSSrtTr877fQGRSEVf8u5ekAs5z9LNR6TpF7H&#43;/GAKWfPvRydUc6r4lkkychkv3onTVt7a67qmuqprJNFoPR8x/1G2aFn6KgMj30deXp6wkHnDnOpXE3Ny9OkXz&#43;g3f074KcLyBRCZ5Okp7KGI2QUVvHq6666uoqjy6vjEFZBfLK&#43;v2e&#43;zThxcf0HGf4oGFWrXQsKjJHEsp8XwZZqTCP3HtFsdtvo2XKR8JFlFeOJECmjbbOREkgNRrGJnDJPJg8LTYJQT&#43;inp4vm1MUhCa9csLwycSsk05FqPX572xgl0betPADc8wzxNI/eeb41jIiBXYtL2ZVSXk4b2TRjAWkwWtrtDMM86C1sotqwk8hSD3rktPPOius0zbVaZp&#43;/vwZY0SRhLGWWKzMdSHLGAalF0C5qJdcTc6qjDeAJCASrQ4B4E1x/zEqXtphfuF8WISQ6Mg5bLMSAHhtoLqzI2mWC8pXhvqyD0pjThu1gf1RKqG1UUqHPKnZZBETpuIpydI&#43;6Pe5hHapZOaDjTs8wfby4U&#43;TrF/plabNwhBa7ECZr631vEB1koqa7bYozmVNNp9zgJ2x5sORCsK4CHRJElGISdhTZC8RgpvZXXbAwvSZxfknWs32QL&#43;unGrbtBKGzE5l5nz5qcqrE6oGrIburXJsR4w&#43;WYenKAiaR0R8CDGJQbLRLGb/MLG2rJDyVg7jzANV85OuF9HzN8C5K89oLjnc&#43;Ln0RIndo4/3xHMvGx5f9WAfzeHLSxl4ZUtM5/iOpyhofTzbPCIsaRQ9i1UdPkhWjzi/yK/06vXhp0uT0axV56b33FOKnTLrrxWH5PC7SZulSw/3KsfSiFbLJlyJROu5wWepq5AZ8hasdu7xpazlQ2nawsDyhXR5glXvyIG3xftZdkpm32wUWcScSOBUACUn4/MA0cgiVinDhzx22X5lp8lhYy775PAhnBkni3QTCqKYVKhio1grjWI1g68DCKFmyKHmBaVz5wKQhiqTmA6tG8JgS77n4bGW5DuyC6SzrJKFnN8R3FzNN9TLO1nSopgixYw4i9o5RImOGa9m26uW59Ar8WK5kOig2ClJtmBVmXGm8K3MsWeKKn15NkcTanP/ba5YmQ21PuyAE&#43;yVFij8CZxaiJ1ktaqtUxXlOISZF7Ni4RBJkvORrJE1KOWcEfdBovO2FiKiyFarpqoabWvjauM4733Yw8P1ChualKjsUNmiNApSKU&#43;&#43;OLziJFoxTo7splZyDF5lPt2L2eSC/myAjwkYSYQjB&#43;HkSazA/RkBwBIkLOScUto6V05FQO/YOI6eozOuq5uctS87YSV5eAMZ105ERps2h/bSJhBFO56Hj&#43;misiRGGsZhmiZnXdvNRxw&#43;dGrATyLOzbWD0fqqbbum0taxNrLeqcutKZdcDv3AzG3XLIeXnfdmRfIE4XFUSjpnuvapg/ITQoyhH4JQrJ1pm&#43;rhiVNS1JawfhBpPWMD8Hn5&#43;ML0ddZnUgjzpGRiouCdVpU1XVM/Fi&#43;aA0rTyMFra6uu65raGnusxpZvIuL9pNlLEGf4unW7XYfK1LMC8CEY8XESY3TbVddX1&#43;74OOkDXFFp0dzfUxiIFXWVublK0n2Mp0TU7/dxyl2LRrV19cRB1cw89KRi5Oh1nfMKdfNwD6h5s/DDLO/5HbCc6qlOYuOcoWpVVS0OiVxOPXxMAGxM5Vw9txyj5&#43;Z8EjbZBueaumJKXki93P3sNwdEaOp617Va66auXVp559cpDGldVV3bMHNTV5Vz1eMXa6WqyrVNurhevuNjAtBKOWfrujJGzxc/Xn66uLNHLH1ZwquYaFQtoozuiWgd8mto9Hj64vWdsf8g3KfvjKb&#43;alFuT6xTXIxBnLj5E9/x5OInHqPMWULoHhe/KHz54ozjenbYc2Kl5fpfXrw&#43;gfI5F0MGpZ1tfUDxWx7jLRe/Ipl2&#43;YlkryNkT3GSbjntEueLPr1mt0abGIz7ChKRcRz/&#43;eef9RnTV1dXf/zxx9O6a2v0WQWwPs4VisgY02TLqS4&#43;5eIl9IlVkPe&#43;7/tSSoyE9m63a5rmE&#43;2AzyqA9VSp8hXWvT2Xfrrn0v8FAAD//6qXQwhrcTI3AAAAAElFTkSuQmCC"
     data-sizes="auto"
     width="300" alt="Histogram of time estimations"
     loading="lazy" />


</a>

  
  
</figure></a></p>
<p><a href="/wp-content/uploads/2022/01/CostProjections.png"><figure>
  <a href="/wp-content/uploads/2022/01/CostProjections-300x239.png" target="_blank" rel="noopener noreferrer">

    
    
    
    
    

    
    











<noscript>
  <img class="rcf-image" src="/wp-content/uploads/2022/01/CostProjections-300x239.png" alt="XY Scatter plot of cost projections, in a nice bell curve shape" loading="lazy" />
</noscript>

<img class="rcf-image lazyload show-if-js"
     data-srcset="/wp-content/uploads/2022/01/CostProjections-300x239.png 300w"
     data-src="/wp-content/uploads/2022/01/CostProjections-300x239.png"
     src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABmCAIAAACMQQ4DAAATA0lEQVR4nOxd73Ljtq8lQFKync3O/G7f/wnbD502iW2JJO4Qh4IVR85mN5tYngbT6SaOLNOACBz8ZXh8fNzv96UUN5GI5JxFhJlFiYiYGX9yzjFzCKFX8t4TkfuiX6Xw9PT0119/HY/HlFLOmZXGcYRIcs6lFAgAgnHOdV232&#43;3&#43;T2m73X4J4D0U8IyP43g4HIZh8N53XSciSQmSICIRKaWklIio73sR2e122CjX/gq3TfTw8PD09DQopZSYOcYIdmclsBivQBjQP9&#43;&#43;fbu/v&#43;&#43;6Dtrpi36NKKVUJmovqUoxvuNF&#43;5Um8t6HEPDzVb/CbRNBy59&#43;n7g5F4PR2a8vWc/MX/L4KQrQ/iklwzM8EVQ/mI6fsV3sV/sBFELYbDYxxi8ZvJ3Cfr//888/Hx8fQwjeewggxgjlDktghmG/34/jiHeWUkxIMBW73e6PP/7wStf&#43;XjdDIaW03&#43;8fHh6cc957aPkYY9/3IQQIwHu/3W6Z&#43;agEgwxHwQQAyRlqgr7C3S599pe&#43;qgIIIex2O3MCwBc8wtA2eKJhdbuum5trXF9KwQXMPAzD4XCIMeacx3HEPU1fgfAzZPylr4KxBg81sA1YaewjolLKZrMxPxkvAqemlCDJw&#43;GAC/q&#43;H4bh4eFhHEe4zXM0he1yd3f3v//9Dzjqqhy4MgWwHqyE7Z0D/zzRZrOBbEy3GDeho8xbnr8LjoUZdvwJ3hy20ZcfF8A4WN2u66B8oHDAnePx&#43;PT0hJ&#43;9933fm5BKKTFG7/1ut0NciJlxk77vN5uN2QYTrcU2uq7Dra7NgStTNcKHw2G/34ODXdchAoGHF0of2ma/34N9UFYQABFtNpv7&#43;/u7uzvsAxC2gvluc6fBInpfRripoLkywa/QFeAUAg/4FereuAkmYvfEGM8Yanto/pYvOqOAp36z2YQQuq6DBTbwE2Mcx3Gz2VgQAm&#43;DPmHm7Xb77ds3KJOXLP5i&#43;g&#43;pIn1E4hAT9d4DQZoCgZ9scAgWGKYixgixWeZg7iQvkl0zf/G/HFB6BhBTSkCf4ziCocxsumiOcywe55xDGBV/NdRvvoLdHyy2SIYxHUrsP5vYCeAjHCLsBnDc2GFe2DxBZnmxnPPff/89DAMiE33fd12Xcx6GAZKALEMI&#43;AiTH24LHPX9&#43;/fdbvcfFQD&#43;gScMvpgD3HUdmIIYHCINuAzcBxOfnp4eHx8RI9oppZSOxyOw0/F4LKX0fb/b7eBG4P4ILqWU8Kf/rENQH8y7uztw2aIL0PJQ8WATXjcBQFTb7RbaA&#43;BVROBMlFIgvPkOOEsg4845Z9scv7B6E9rt7h2CBTare4bWTQWZBrdYG2QArGnOgWGhuWmxtP4ZjrKQqm2mt69b8BHSZMB0q4iLwLiXiReLphnGf0tC5ic&#43;eJLTmZv2RqpSF9cWTk4jITcpgeWcIhgNpWTw5iM&#43;/hc1z8R9vYPqH3JtN9CNqaNw9rvF&#43;s88r/WQOFfEZVWYPKFZXaVuBrkxCTwTAOzt8XgEiFxMC1&#43;fTPM4p9yuu4Ec8Y1xvtG5AMZxRKGK9x7xibUJgKg&#43;&#43;GVyt4u4UoRINMHm1rdjf0DnKgjpMIDLM9yyRlIpVGDmHDsn1VDJbeGhZwJANvj&#43;/n632xnovN7alknElWqoquZxXDWPl&#43;LqOr2Qst/dUhjwXADIAYD7o9KqvorABOjPjdMilEYZBomd494xEkpyK87ZuQoy1&#43;mlc7AKUglUhcPU7DCMQE7kPUEqdEuu8WsoyF680tqWSRoSFSntZw6xumEhEPzwVe3ZH9GCAAwFoTRobQKoD32RpAWV1f1iEh/Yax6JuD776pHdihDOVZDV/wAOre5hIgX/ui0LKjOKK8pu70SoMEISetna1r5IP0ZBK/wepD5wcZKKZCmsLM8lB2HPHLy7obDQraEgBaB5ih/mXLForPyvJiFT9ciqY3wjj/9rKMhqT9ZD4P6Y8qh8dxMW8gxvUby6BdBOqoduQAgXUdClFoErUhGXchn1PyIXmKPXEjFyTOrDc9M9iCXeRFzufAegAOvh4QG9YEgcXmltz0gU7qdcNwE554mCPvm5lFQ3hIQqBWEm89HcLXhjC7GgGCPqcFdWOVuf6lxKFvFEMfjgEatyCJ8XeAeKfhiMX8/aL9O5EQ4h3N3doQ/S6jivt7xnBA7nLBwq1tQN4OqDH&#43;v&#43;mJJjRLfjBCzvAKvMRa54PQIA&#43;lRLa1FaYhatu67mocAetAtuYgMsZcTmSbGVGGFkwUQqc1X5ECoF9I9Q&#43;tMeELoN1TPROQpCTRUqFfFijPFKa5uRIA8sTpz31LS/wjR9RtQTbskAh2zqjdjgCyjo8fHRSj/XsANONShaAAG8T2ZoybFTUORKLlKcUBUYnbIDK6YFG4BKKaCglTRQTDVG1QZAxbvz8t4mCbhohJgca3Bu3SI4R0God7NmvDWgICgZ&#43;OUGfl6uiU7XSy71HRUg&#43;bX7w8t&#43;ABpUVxILUvgvConFB7qM8OvOiIFLwxGSXWH26&#43;b/q3VB69D&#43;FfzkUsY8ZacvPBCkAJSIpoyx3EQD1AIKOh6PqKi1F6&#43;0Njdpf9EnwlXb29DP8sXkqEzPj&#43;emrFZOz9pOgYKGYdjv99aldOV9IK3yR4tO&#43;IL&#43;t2urqJLFqN0N&#43;AQBxVhIAqMI1yrLccV1nyJBArKgGPQHF58Wajp09UHpAOD/zz//eO&#43;/f/&#43;&#43;3W43mw1iQWhWvaIAtOiqPtE5l6kmV9i9EmamKTxX8ShrXmbl&#43;eG6A47H47///ouhEdaAN29KvRpJUylVH6oB&#43;MH16hwzUab6xqqKqNC6u5GDhR&#43;seWg9KKgFmBX&#43;B8/Ba8rlskpBHDR4lmrMKnAqQhRWXaoSLPkOdqNdG/I4s8&#43;fTyLN&#43;yXWGOcsAnGJqpPMLggXRaO56qLqDazWJQ42DhHteYChmHtyXRR0CvGTo1Mb&#43;I&#43;5qI&#43;7WMRaddF6FVEwdU9E&#43;L81R85biD6fNKIgYyrOSaig/u2jJUQMB9UN7pjUdq8Sk4Z5CzUsMOaYXBEFIQsB/DOMmdlFj3z7G1dCpIlJ7KFVPvcnap4w&#43;I4ksPUvXm3PCvSPJnsr6OS3aH8jxCQQsk5v8B6uSycBoBIU3etXR0GGfwJzDOz553xaJC&#43;r3CS7qXNvnTshQMtD7cAOY2LEy9mtn0nS8lpUue/5pwvOqzcgdd8U1Al92ELfTQH1P/f39&#43;gIw7iIK8eCyJF&#43;JjNy7Ci2/QkZECo8mAqztIRC1UUrtAchhICBPzYywGJBi6NlPoNgA/RHbkHNn16FGjPyntBktdq4ULARJ/YtN5sNBqhfBQXJlIFJqYjTmP4vdaCimdKjiDpXbyd4dusrnF7olLfBTFeJBdXPLWVI&#43;Zgy6QNyOQfzA0JAukh1Jsi5vvPMfm110ws5dxs9&#43;fnaH9BzTGUYS0rvrc&#43;2904hVS1fXJlBXkhJjuOIIT/XiAW1KGauXoirT&#43;z7IgjaQd8sAYLbgvj0anbBggByzofDAZN8PnkMN3YA5kAEz13gH4egL5M2UzrvORRJyvyUm1z56pmmiZZ7xDabzedPtkVjhZaau&#43;i5i1P986/eEMaNp3aZlCeV5p3z9Ou25bfSggAwpwBlKZ&#43;GgsD9lAvSLyFw9KwRoHexiaYcWStu1EyZZ&#43;HVNG8stCjZdKtPQ0GImiGFkrX/AtD//XOwGhhlrg7lJEo4GTJVj15XEMs9YvMUzUeTTNUMWn2FWZlWe/IbmFNdYk/i6l7S4q5qY7hABdkl7/&#43;cX6QFI4w2McDQj0ZBKLlF42NFihr/RK/vFMR5L2&#43;wCbiZASlSsrb2iVr4CWVdTQLLArBTZWxQ&#43;gdR1Twa&#43;h/GfBjSmAszBWEbSfAbGYMIqzoEzeREz3V3XLV6ccEI4ywe2wEftz9t8MyYyzHl41g/spv5hr/rgy1D4JlKoSIyKCRCrImJC7tr5e2XBYDDFj4IBYlYyXNzjlB4y0yRK/rsFYBO3b&#43;/g9Se173lGZWmuWj9qP6Xqe44tHe4T7cIF1HQB62kpdoFaduKzQd99kuRyvrgT/D/9314K1dhdqF&#43;qTE5zdrXP2kZY2EhL&#43;g6QNPN5wnhk1CQdVgg0lm04ipX7pdhzGMq3lPgyfn6gIgl6zgPNLBqb7do1E9SScgchOCDVr54ntIPnyKGZSOMgei/yxmGukF2tmiwc0wV8KRUBZA0TFM9o4ZYPsokWsmQBOdyHlObeuCcOt5ZYuAYWGGwAw7mjxfCwg4opaBCfX6mzy&#43;Tcb9MkYYhleOQxpQBPYmoix5hn4/O3VJ1yhAD1o57OvX&#43;6doY50Z55hA4tGoumWqNPmRJCwKwBD200FtrcWaOZTNmU3aloR1xWUrOAr2ftI2oGl7Pm873MUT/4YfKkG4EXzcie5YY/OQcVB&#43;wlGqNRFwX/bYLEp01wzJ2w0wt2Xd8J70WjHs7ChLTVFMqca70k2DATAOdor0r4HbwFEOFPV0b3/3hShdMBCJSy0xDKmN9IFokCjCpqIPSxakh1qnL1qaEP/vids&#43;LH/cqLeyAeThoQo2nQQDzy8TNz8cDt5switjr6mqhybQNEyNFmS74qnyilty2xO&#43;bePhe0oh0tbxFKNcHAScilDE1kFaKHMeEybwxAJFJFmI3teFP9znd8oKiblNzLhu25R4xnOeQdViEFw2Q8Qm/m3qxWIHMBmqX&#43;WhzvUbtqk0Sc8UxnibvNeRpowfez9o3kxb81u/EhO1YNAvth/qNpU09aAyxh08dtzLNSngmAME0nbOdQFOhKk/Ti17akuWM2OPjY0oJZbHkA5dCwqd0npzcKPdCALYimRpLSZPjHqsQKZjxQ/PBD1eIzIMnVQwkqDzKUfrsAQ1SLr6pKZpUaX1X3c1ZbGL4FOo&#43;PyqHZvy0Hmae&#43;DCH2csoCGe5EXvHjnMhTSQZTTqpFa9BuDon48RHnlpTWjQYMzT0kuld7jT4/HrRyMn50r5urpIAHNKuNAdAig0Az1HVqchUNkMzJdwYL6dUA3RuQSpUeRI99cHHGdZYTsjc3d1VLVRk1IWkitiKIQC8t7SN2bQQ0zQ6TKxvvTVGTOfrtSgPzW6zgpSUM961DSHiScRPf8CAhOkx90K5NPbbCR54&#43;CAqZbQKbNITsOda5SpM2sY867J6LRZ0HEYZRmoAnWzHgWveZgfr7ZidDdCY2ajT9WaL1sHzZWprfqbIZYbr6uNVWF0HFU4RN9O7bVYIvqJMT1kRCpPW9XTe6PlaLKjVGHtWJNCClGS1rpP6s2DLmTo5fcz5v5dLQ34Xun552zfe8/mxQORO8z7sBghq4Mc51jD/4DQ66tRm0W4NszdfzHIsCIfO5pSdzgcLBklnn2Tb9hLHbHu2PUytQNPw6ItvPv8m5C7f95wuMXeGGd52z9OVKOq65ADbIz9pWpnPqTsJ0VKg1Kbqkw23nmhZADjpv4IxR6zBW1uHzLpwqR2dc2GVDT00Y4ErT4MfXhwb1M7fk9YOcBE8n0TYqj1fQbA2eaF5NpcBebuyAu52Zk5grr7hi8jgFNAtdiKgMlvo&#43;Ref39VqVSdAeFrza9HQIlL9E8Vednc7r7nkTMzBY3reUoVdkVzqTiqoxvGevXeO0HgkZXKdT4c2pYp9RUIMIcTgPb0oCtLCoaL&#43;SVat2o7SWiwf0kxDGsfq03hmve3yAJ75lTquJHQxdl2ILvjn6qsyJ&#43;c0nTxrB5AvHoRUcsWTKdcvpRf6gKiv83b1ggCsWV5HsLEyrukt0ULXYRyG41Dv61zf9dvdVvEyP5sY4ySVnIfheDyk6lVKiHG72Wofjm/zPiee5pwPeTyOhzwMCiBiH7jXoS3P4K9yfxhyOh6TTrOoz2nf932IMTx7ulHkksb9mMp4KDkJsac&#43;dqHrwjOvT5c6jumQkqRjSUmIgut857vAkxtscEhLN9I4HI5jagfUbbfb2G94vmWnRHfK4/Gwt6Pstptt9OedPstGGDVxp/L0acFar&#43;xIipPsigaxPLPbBEYJ2&#43;lrFUxvkyw5lazMqgqoD55C8M89FZcSuUzJi/P1hcjSB9qBrTOdqVszs6R0KMVlceLJdd5tO9918XwBRYZByuCKd1n5F1m2HW822ATPrySRkcQ36xrqAngTvA88sxuqyUoZ6tYe6/cq&#43;i2l17DK8ysdZcGVSeoOQNNDaQ7p646Yu3y&#43;LOsBxNvNJk6xUh/qbn2RwSK7Muj5uK39r&#43;&#43;DP4v6VKtAoV7p9eRW24IxvCyMo0Ju03fkvm01s07MVVfopecLIHExuLtd33dIbIQQ&#43;q4L5yPh65XURXLtSiy17zvvzzJDpDqHN33PUyMXivtfZPAIl/ZdT1P7&#43;zSI6Xwg/Wtn/y7Sy1qVS0Hks5M4aEa/fOXcrs6&#43;Lplmn7/l5W1/uNTpOf&#43;JK19Z6st1LjQDXH0ewS&#43;TwWUcSGkTT1cy5&#43;6NtKyCboLs1DOcpAvFtdvtcPrEtVf3VrphAWCyxTiO&#43;/0eg053u11Uuva6foJuWwCoIbNZy2dHFt8E3bYNgFNmBRx2BuANyeD/AwAA//8hSGUzqMZYlQAAAABJRU5ErkJggg=="
     data-sizes="auto"
     width="300" alt="XY Scatter plot of cost projections, in a nice bell curve shape"
     loading="lazy" />


</a>

  
  
</figure></a></p>
<p>The new version is faster than the previous. And it adjusts the graph type based on the range of possible outcomes.</p>
<p>Each task now includes inputs for min and max time, confidence, and hourly cost of that task. So if different people at different bill rates are part of the project it can still give you useful numbers.</p>
<p>The histograms broke down when faced with too many bars. So I settled on an XY scatter approach to help visualize the broader range that the cost estimator made normal.</p>
<p>Please <a href="/estimates/">give it a try</a>, I&rsquo;m always open to feedback, suggestions, and pull requests.</p>
<h2 id="costs-estimates">Costs Estimates</h2>
<p>For this version I added the ability to include a unit cost for each task. The first tool worked just fine when you were estimating the tasks for one person who had one billing rate (or where hourly costs aren&rsquo;t important). In practice teams need to be to able to do an estimate across all work streams, and different roles will have different billing rates.</p>
<p>This version includes a rate for each task and a graph of projected project costs.</p>
<h2 id="why-i-created-a-project-estimator">Why I Created A Project Estimator</h2>
<p>I wrote the original when I was struggling with project managers who would take any estimate you gave them as a range, pick a number, and promise the client (and themselves) we would hit it. To them an estimate was a promise – one that had to be kept. That lead me to badly overestimate projects so that the lowest end of my range would be a safe number – but that&rsquo;s just a different form of bad estimation.</p>
<p><figure>
  <a href="/wp-content/uploads/2017/06/TimeEstimates-300x250.png" target="_blank" rel="noopener noreferrer">

    
    
    
    
    

    
    











<noscript>
  <img class="rcf-image" src="/wp-content/uploads/2017/06/TimeEstimates-300x250.png" alt="Histogram of time estimates." loading="lazy" />
</noscript>

<img class="rcf-image lazyload show-if-js"
     data-srcset="/wp-content/uploads/2017/06/TimeEstimates-300x250.png 300w"
     data-src="/wp-content/uploads/2017/06/TimeEstimates-300x250.png"
     src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABrCAIAAAAw3x3dAAAaHUlEQVR4nORdeXujONLXyWHnmJ6e3n/3&#43;3&#43;y2X1mppP4AHTW&#43;1QJCLEBY8dO0vvW7qRtg4QoSXX8qiQpTxRjFEJwzoGId8QYgxhjBMYZfW//6Qg/A0D/vS8uhADAoumm9HtfhgifB22J1xoGN7y24X&#43;YlLN2t9s1xhL/eQgh&#43;CCkVEhSCOG9Dz6wlg/IWSkFo&#43;9YhGGRGCPH4oL6MiiltM4gBmstXuKCYR/ExGrOuZQyy3SWZQyYsSbVkB4ghFBK5XmeZZmUsu3k91EaAe&#43;/s2/JwtqW1K&#43;c99vt7vllE2MABt4574JUKiMWaK2CD957xgD7JgLyTishBGNMSsk5t9Z45wR1mnPOe5fneVmuovfVfmes41IIqRhjkargXGSZWq/X9/d3nPPdblfXdQgBAATRarV6fHyUUqZJefId2pk6wZR09aDUsMgBW6e4fDjxBzf0X48/nKxfMS6Y1CCk98jfGHkADpHhPwGAR4iAvwDzkUXgHDhNA5HqwgkhZORB0GelJEM&#43;SiE4S5NFBsbTVGmlVSolWjEkJFHf7tSpB3wf/XrwPgf3LBnIJ5/Ss3KqnoMbeum9vH4lpM7KdWECE41mwBmLJPSRMUpyIYBFzqLgXOWlzvKyyMpMaSU4ax8WA47sxM4k96VEMQIxOvcYOjXAWJJCjKaO0ESc8zzPkxJKzUpdkue5Uuq6CuCC2k4WOZ4W55LC0Skk4wxi4JxJpQQDF3xwnkWU9d4HiFEqVZRId3frVa60JI7SE1vF2&#43;nn4aA40M/DYduLlzzPp5Rw//kCBvUyZ34UfzopBsAgDdJWx6KUCJ6hOIrA8F/WTgvUosRvHK&#43;8406M7Qzo5crQHOqflIpRHUDivZVj83QZ9xfe8OnEOVcheIda1PoAjAFzOA8i8BDQXhEkEZJcMsby7Sb6plEo4bG3pFCoXcE5R9YO41yS5kbr1qHqZkJKLRUX3BqDGhrVcMiz7PHxsSzLXpeMtu&#43;4F8&#43;lAz0xesMn1o86AIL3pmqqbVU3JPqVRGPUee&#43;5kFpp6gMBMTbeNdV2J5lE&#43;x2fq7QuiyLPM&#43;esNcY6B8DvUEiVxph9VQGA1tmqLPNMN03TGGuxB/x6VRZEw9cY0kLDcSH7Rus/t5Il9Y/WM1&#43;/4hwEB8migIBVRM&#43;FkJxxSbYLj5JzLTmZnChsOECI&#43;H&#43;0i9Cm5NQ9EGL0zgNj6NehXY8CJ33USuG00DoyLjVeKIo8WTujZt/B7zN0lhQaZdM7WT9a//IWoghCScLRUtdKAkoVqZA1rbvkPfYKGiSMaZwbne3vnLEuhiTUmc4yYEnjtYM3L3KpZF03zloAyLIclS21MzkQeZ4fWM3DN7mW&#43;B4VEberf34qjBZHY9H7YKxt6oYJrpSOZMtr9IQ1Y&#43;jNOmtZMtK1KpVOrKyrpm4a6dDpzTKUVBCjJVHkvX94uNdaG&#43;t8CN47zllRFEKKvn2vsIcQ7EyOJA6eZO6MgB7WMMXBqfpHa7u4fpVQB01cRK2rlBQcYky/J/sHyNAB1oI8aKij&#43;4XGvlSoYJNhSRatIF&#43;CJJNUeZZBWaI7jT6B4&#43;G1TYCGFE4yjTpbnSUNZmTUjHgZdaqXF5/5cb6dM/WTIyYEjeGcDHm0QxPTe7AhyzSKGolsTs5RQn6yLCO7U7DIgvOcca0yYBwi9LaNVgryPMaw3&#43;29c8kNU0rFGJzFr3lePDw8rNYrJeW5kuGkBXLxzR9ZvwJAOwjNGGeThI5ptDJelEWeFwxYug4QhVXO&#43;bwopBQA0VkbQrTSMliVRc6FQGlmjGgMY&#43;xuvWLkNpDCsMYa7BspiqIAgLquvAvOh5zMISBjd2rmHgvu15nUFVkoK2agpKn6Rxszw9MDmq9fpU9JriRnDI2ZGAnqFForKSQJGeYdqlPyy0AIFB14J3guUIcrrbmUZOXjH&#43;9Q&#43;hd5nheof2MMjEALLnie5wmrsNYqpVvwZxqiGf3xAvEyf2kKbnq/IJqvX7EBHC&#43;FRHsmRzbhNSVjiGjvK63WMsbSexfR&#43;gyce6n03Z2y1gSP/7POZVl2f3&#43;f51nTmKQ4iqJYrVe9vk2AD2oO6qrkP&#43;ssk/K0S/wpdGtfGs1QFEEBTZ26rqVUK87zPFNKGWOrqo5xz4XIs3y1KvOi4IZVVV3XjVR6vV6XRQ4xNHW1r1xtzP39/XpVZloHHxprI0SpZIHySo7O5V5u/n8IvEyRSva&#43;Vtopx1uERqJOpuiK8x69BJQY6B9ENJd8bMMmdKuSyXySOK4FMBYorpBpvSpXnaI&#43;g78XaLOz6Nb1n0sqDUu0IaWUEvvDOwcQk2hOkH6e58h9At1QIpGFKvEXFPdS6UJi/2Q6k0LYEAXn&#43;aq8f7jP8yJZRMPXnrK157GHmfBIf8NJtl4cybodoQ5ImIF3PkYgF5iChynWGLyUClWuwjutdU3TxOhZUTBC930IpG69DDhvkjQXQmRo3mvOGfXZgQnBjhk1xJ8v8OnPgi6&#43;VDcoTmGsLMuQLxSP5cgi/M9x7snmSXiDkgp9Ahz1Agc8&#43;WJAvoK1Jr09uggUGAgh1nVNPnDLVgrBM&#43;xjzpJUip3&#43;l0KgH0jy6rMZcgU6y6FRaUC0wXIs1mZBpFEsOA/eB&#43;&#43;NNVHrhEcQ4M&#43;dc5rpnMLnVcVTOL7eWx&#43;DlMrv9/vdTqA1xVAbo52qAF0Kzzk5cZxZ5wJaWSzPs4eHx/v7hyzLEgx1UwbdWsGcRYoiheBDtNahRS9FMuRTaoIiyRMBXTMyJMF7H2JgsQ02lVopwhJSxMZ5hwpFixijtYbmEgsxCi50phgw54MQCbtgTdM4Hzg6z7EsV0CzjbGvoh4vprM6WCml1nfrCMwYA5RpkqYAWT46fU2hMiklRHRrgYAK0tkyL4rWrveeM54cLq2z1AExBs5F4moSQZT6gE4cZ1CWK&#43;cDY5BlWVmWPUCd9ET7h7HbT4mr0SUOmu&#43;IEkNIPULSAWCtdc5lWhP2IJN6TEFF/ppdhdT/mCpNWVltvlCf4NXxM9mlfZCSIpQpDamNwpMtm0IOwCmCr8SkIXuVkNYMqjqVe3Jcwxu2LgaoVWuxoHx/U5FzbrfbPT09ffv27f4BpfPUO4ym3CwXiAepHMj9ALX1e4NaRXF&#43;V6hVroW4Ajy5vPgULnLu407eT4Pu6K6EHOx2u7/&#43;&#43;ktr/f379wuyE85tK6kY5kNsXHip7PPeGOtzwfhdnnGmc/01JdE7W6WmLiQRVFWVpZDWe56xkNDw9XFv3LZ2L5V9qaw1toz&#43;3lYlj1zcqQytsg9oyUfSXAcM6dbtAEC5Xxn3c2teKls7bxwqJt1UTeO3grM8X1Pw53&#43;sCyY7INGHOY3AwPqwqd3T3uwaF1MqbwRw3oWmrowyLityof/XYLsTHfBhFCMYH3eN2zfO&#43;Yi2awrhA8QQjfO8dqpwQvDsq86CUUvkJH2JDiBvGYwLtfXWo2UqYYAdMXA&#43;&#43;saJympFCau/jmdwkr4E9pJYXFvf2BDiiNCLgAJqb/obvhCadkxnjQ7x6dBgQugaF3aNMz5lfI1QiDhFKutoinx8M0/TZZGlE/L0I6Y6gA/QWJQ/yP/R0Y0yijUubCtUEtPd9OvRCRF06/cESnQ0LuyNM45g2IkHJsRwZ9y2oUTij&#43;L/SSv8nZa66qqIw4lNbxsSOnRrQvOfgAfrR&#43;X/mzuNDfvGm1UsM&#43;DXSDB8f5pijxH10b2D7Lz5&#43;tugfNM0xpiEnaXeMMZUVeW9u90koMUHzIXYON8Q&#43;&#43;efBMBsRF1tA44WeQ3s&#43;iqBtgO&#43;n5X8ix3gnNttN0/PLylaEkMMhOw/P7/cFofAnk7WZ0DVetq8aeWVdSHEqKQ8N6l0rAlXS9SdSUKdKSVei3deT48bp0E6zBE7kHfHsm9eGh6VxeFfGb8nsR4nuN93SwuSeyxi/bgePtm2k8H969IiNFRrdX9/r7MsrRVNF1AkoVxqjuO0S5IPlrxYgFb9ov0zrX75QNBEYNaHCjV2WGVKyMnKZxpwo1Vjl1WrKANXFaXIKWWzv1BV1T/r1XCp4nEK5gXg&#43;OsIZczT8N81Hu2fxdGDQPZoY70vKa3x6BEzTz&#43;rtR9DLX8lJSe/uUCBxnPDEctvaOWP9TUFXmaG/wF1Xpu/L4OW4usgQ5e1QwzLf2SWIM0A9L/IpJkc/nD0FRhzHh2CvfFuynH7dUgtX1VznNQ3tHxHZdRUHiB0LpiPc87XRDNaWKK23nmdKQHTbZ9PRJzHL5egmyeX552sXy1s60zVB6n082Hr9hJZIyFeiOqkqL31wYW0qH&#43;YTTASlF4yyKby94dXZ&#43;o5N3Oyv18s3xvmYBeEqYIzYe4&#43;6QHlTwSXUh9mHjlNETsgNja40CZxHLTw3DUES7TdsZ81SqMB/an6rxYPOCMunyJdEVyS/ud3QYqVGRd2xpW51EqoU8kNZzV75tIUH6cmx8n6PyEekASIC9FHuBhYJocArdjKeOc/H5&#43;&#43;2H75nIBMANZx/1LWkQ6vWxTvson0JUiN&#43;u7dxhrxuMCkYbPYZkgBSNIEl/OMgDxwpAasDyFKcejJvGnMzG4F88vwRhcxTK0BPrk2&#43;Lj&#43;Fo4OIa2qi112NBAOYYbgxKhtMFRNBysXp3gXafBeqn3fUECnzNfWrwulxHjSUJ95d3KN9cJF2DNhkuPfT9ZPHUA7oWx3e9M0MaQNTaJz7uVlc4CGzmuYJRovpb8F&#43;vvOHkhV1TbsGvdQZrmGdjnn9NOnflwO41ymtGfqVykmHkKwxqQlFTGgceict86OSqH3UJI8kaTQ&#43;33Y12C9C&#43;uoJb8wQPCJmGhrhgohUgo0JekjpbxE0zRXb1wkV/YqShM1AeEZlfEPZaDdRL4GMLSYUkQseu85Y&#43;WqzLvNIpumeX5&#43;fnl5vmIHJIcpAFxFBLE2WE8OQeNql&#43;Vafh1sbiEJAPDe7Xe77XbjnEsLY/I811ofo6HvIehcsBAhXM9o7KM6lfGWsLmbmqMnw03nvhn6ARQTrqv93jt/O1iUJwQCfeCzMaCZu7u0Ir9rXJOCxbekq8cbaBFvhED741Lv3WoCQwdk&#43;nYGXI1TkYGl0ILxlMfxeR7ZJYlZrRVEG45d3eZ5QyT9PXXAe1zg0Zohgg/RxaRafiWfWKRVcMmkOxubP4ewm5P8OV8BnBxU0BpXbU7BL9QDaWclJtJe5jeDVAh&#43;YGn4X8UDGHkEA4K4Y/iYJSVXItGP/UiLGmF6fL7vpaBHIG7EmtTBlkBWgJtnVV6retHuFRECLRKei3G/xyiCDoO7aW55JB3jQkwplTf1B65lIopkxgEDqbSivQn6GXzdMfTWQr9yJ6QOpi3eKdD264igtF0h00rTBBC0UagFAGOM9/4q0jSNff8OBHRhMegmgY&#43;gBfslcImUGaeLsoxVXVcV0BbQIURrzXa7JTT0vbZprx79RRDQWQV6VR8A5tIlDh5xaofnixMjTtbfdUCe7/fVZrPZ7bYQKTnX&#43;c1mY&#43;17s6N7yeBvqYGHFIHUgBSKzqhZmG6z8OoMK2d2PZipHztAKVWuyrWxtMdDJMSGCeFQJUxv0rCY4I3/dT6dhTHDQBUrMilO1/82UHVukOOd9be5oavVWkqVhH66zyA174ejgZJw/Y3tn&#43;MnughZBJX22V9c9oIsirP4c3xzu2dwlmVKvYkP13VdluXoOSLLU7g665MCADfGKd88F4VedJGryOXXXtT6umnzMA09bSFzkJi&#43;cJvzN91DEq31vy7Ofzh/5qTELxOiFDznXzpMoxYmNCQaTQ&#43;dy&#43;hDJ4OFFiO7kAsXxBkBO567AFaAEmeYQ&#43;&#43;hy9YHvBnjJ1MTj9PtTj4yMvAQr5IDcRb12F8Lz31Vx&#43;y8o6Iu0FFJAcTD0cEXypWLxy3qHoa2kBXJHLo1NvHu9QG3IOiSR7r02UtquJiG8NzNY5WX0g3XByRMKbRnSDLas68v&#43;xHMICnEbIg2pJNwEuxy&#43;EaJPmt9wBvLZ7mlcpDHOPwwrCTlgF43AHkWJSfc&#43;GhJGcx4paNJfwdfZ8LuJ/e3mqpfHaQwzuCg84sADsYCdFnQ78Hg3k9AVoCL0QauaPdewV53Tp5ZczGaynjydMmDqpbU3yZmHfReWj5/kBi68KndqycEIvo&#43;BeKzTPEOi7V0Dgun0xZH11Ac0MesD3hdoOG9JwiaVqHH2DQNbVXgL8Mv20UA3RqYo1YstYLeT68LcgIoEQU/Wtp6DVo4OY6p7YC0OcTz09O&#43;2ltjXQjOuZ8/n9IGEmc3hyZSpwDY2H7pH&#43;4WkE8gPK3JEnTW0w1cs6kDbWbo1QqinZ&#43;9aYyl8wad8877gy1U&#43;s9TSfftnW0OegydD/SJM6BvEq2jQXNI6lYQLS8&#43;/75vHnRmMFF1D2CZ1nd3d0rKtHKLti22gbbvWN7QrhFtaPAT1e8BpahciCA4U5JLAoguo3OP9J6n3goSWZ4/CLFer9OFpmm22812u03H0y5HYiOpXxu7JWBfpQtatWR8zGTU3cEqZ/XCvOq&#43;TKb1MwAF4/BsZToIVYuJZSdTBOw1/hW&#43;2MqtdlVTZMZHnbQxGzvM42Pp1QoaYm3D/dHPqw9aCAzlz9cZ/ImgW&#43;EdwNBBN5kUqQ8&#43;sRPUknj0QurT31yAU9vqfaprBmBDTGZAJjltefNpnaCWA9lT6/&#43;6SdOmv1EoKn7crnpnUCdd085bjDJhQeSSTnmli1MRp4XHBhw4BMcnJx5Xct4xpnPE29Uvrjvu&#43;bOl6yS1RxThNG0nasGEHFN2Sxzm0fuHX&#43;fLnrFVwUkrCHr5c3r0f7Qf8IaAAafteiPrG5szoQRPcbslzD6Jhi0hzvl5AZkpSrh/4j6BP8D5whdZWv816LDXU66qSfoAQFMqkRAX7k39LjN0IY0v&#43;m4dfWhCaELw4&#43;DPl6P0Km34nsXIQFMaixZCp7Opz2Tq8mSRIY13wAEyOgNn94a/CaH20YZe/fKpIFh68cHfwbBsv/c9CENOvSrRN4EdeG0Uewt8tGV4Fw6CQfFXd4fyiBh48BwobhMzKZQQFMgE0c3khXw9y25Mh/qPVJHOdHa0aKk96NB7doSftMcdkVXXUOCJdu&#43;h123hlnZFquBt3kukJK10dJx3IZ0Sl7ZIYF0eI5OcgcBmtFd9DPQBRKBl/BxE4ACC0&#43;nFOOM4E8Hz4LyXHGJ3Ih09Gj9RipynZUz42lIwwQmZYBEvsvg6brnkTAmeOkAL/rorHW8P1FqSpTG0DEcnRQsJjs6AdHrMbrer68pau9ls/vvf/&#43;Z53leaAksp4EeYM/I9IT9t/g&#43;dGiY6uygCCDqvEF&#43;VfknlrQ2bvanSZtzto/E/KdAmAQbRurraOVdHa01jGiaMiz5GJURGYELa9gaNOSlMqX2dF7nq0ikh4T909h9&#43;TxYaY6CFkJQ26tFXhNRU1nlqnLCXdN6i4tgByUDCXxjeKfpjL9kbjf36sZsxw9E67AMpZVEU6/U6y7LxDnDONXWdgOg///zz77//FkKkIUqLaNCCjt3KLAJ/2rncz5D2bKY0A2hTxHbxB&#43;ftOjo6MKluvBnsGZ1&#43;T28baQPr3JlVcFAUrigdcDKxUFAoWpIdCF8DOp8y02JV6ExLKcVrVA6AE9c442mBOL4/sThADPSCKPDHUmDTId&#43;C&#43;N5LZU4jSaYyb6fFW&#43;a34i1lBB7sLpbn&#43;Y8fP/7973///vvv6lh1pBOGy7L88ccPxvh//vPn09NTio6FEIxFihGU1lmWCXXYhdB6NG0TvPdNY7x3QogsyzKdkdvDkxECIcoAYiCRY4jeOwLDHY5Npa2WHBzYKBjXAIo8DEFSA&#43;UQna5onbUx1IJnWVbkudJqIAQ6j4QSVdKHEHzTNNa6lJZJhzZOrkrnhNVba&#43;mk8KCkynN8FVrI3nJ8WLTfg9jSSfohUJGiyLKErfGyLIuiSBuh8D7eMvRv8ZWMsc5X1f75&#43;Xm/3ydl0DTNy8vLdrsNMd7d3X/79ltZlP0WJUd2J479uq6fnp53&#43;72U8oEoz7PBs972XQTn7H6/e9ls9/sqy/Lvv//&#43;cH&#43;ntGItKAtvLXVIx7a&#43;vLxU&#43;30EWK9X3779vlqVw7xK3m7D/Br5qKrq58&#43;fu91OCHF///Dt229FUfRFelECXYc577abzc&#43;fT8baPM8fHh4eX19kxOLGDjNms9lsXl6wSFF8wxe5V3QMtlLq8fHxx48fd3d3bQccu8jQbWrfnXLYcfP5efP8HCI8PDx8//4dX3U6xhdCqPbVP//8s91upVK/ERVF3p7yPHjbPunAmma73fzEPquKovzXv/71&#43;PCgtRoI1S7vtBWJcb/fJ26GEO/v7/7444/1ep3G2tuXaguFGHe73d9//b3ZbqQQj7/99v3376nPRtwrKumcfX5&#43;&#43;fuvv42xeZH3LzLl6&#43;JgretnImtMUa6&#43;//HH4&#43;OjpqnZnmKewOa0Zf0EA98YVck0SluooPtelKtVmWqZKp5m7n63N8YIJVdlOZVx3T4Lxb43TVPVjbVWU4yIxuZ4/CSNEnzEfk8zmuV5lpTbcauGSLsxZoetaoQQZblarVZaq6kXaXf4r&#43;vdfh98UFqV3YvMZAQ52m6maZoQgtbZ6m5dFIU86uPxfaSm2hE7Sqr85HnxqUh/qqckmk9y6p&#43;SkKz&#43;KVNFEnfQSiZKx7yONmyIkR20asmL9Gki7bn7Qs6c89o3LB0oPmzVwZ0nZsAxg46hwXPR7IMA3nxK2nz9SULSPlMe&#43;5aYkoRskrZLctZmnnKQ6HdQIsmnk&#43;NpBpVr0dBzY/lLQL7&#43;zqlqZ&#43;Kow3ee790kTJ6fnquq6vbXYUrr9Xq9Wq/19Aql0UEw/7gx9h22Z3jzwbtP7eus0tg5fuF5bO8y4GnU5L2gnsNqydxy1nnhOAGaKCvaePTk8B&#43;Fmo8R/GOeLAnBw0Tu10iEYL/fH&#43;zNdPyAGaExM0kPNnycqXN0a8iDO4852FvMdV1ba1vkhzOlNFn2WT&#43;w5ut/Z1rDaJ7E8vr/LwAA//&#43;lAV0gTveDkQAAAABJRU5ErkJggg=="
     data-sizes="auto"
     width="300" alt="Histogram of time estimates."
     loading="lazy" />


</a>

  
  
</figure>This graph from the original version helped convince PMs that estimates weren&rsquo;t promises.</p>
<p>I had a good amount of experience providing estimates, and had read a lot on the topic. I knew there were teams that did better and I wanted to help our team improve.</p>
<p>The original tool was loosely inspired by one <a href="https://www.joelonsoftware.com/2007/10/26/evidence-based-scheduling/">Joel Spolsky described ten years earlier</a>. He has several important ideas on his process regardless of your project methodology. But his idea of using Monte Carlo simulations had stuck with me since that article had been new. After failing to find a tool that included it, I wrote my own.</p>
<h2 id="are-the-project-estimates-any-good">Are the Project Estimates Any Good?</h2>
<p>Fundamentally the simulations are only as good as the estimates provided. For any project I have been able to compare my simulated project estimates to final hours my work fell within one standard deviation of the median.</p>
<p>The confidence measure helps more than I expected. Originally, I added the measure of confidence because I needed something to determine how often the simulator should assume people are just plain wrong – and by how much. While I could have hard coded a solution I did not know how to pick good values. I knew that my confidence varies by the task. I also knew the less confident I am the more I am likely to be wildly off. So decide to make confidence an estimator provided variable, and use that to pick the size of overruns.</p>
<p>For every 10% you reduce the confidence, the simulation will allow the upper bound of the estimate to increase by the size or the entered upper bound. On a task you estimate at 7-10 hours, a 90% confident estimate will allow overruns up to 20 hours (just in the 10% of times that aren&rsquo;t in the 7-10 range), and 30 hours for an 80% estimate.</p>
<p>That extra box also immediately helped me feel comfortable with my estimates. Knowing that the simulator would offset <a href="https://en.wikipedia.org/wiki/Optimism_bias">optimism bias</a> for me I could stop trying to do that myself. My estimates can use tighter ranges trusting the software to offset expected bias.</p>
<h3 id="a-value-of-the-graphs-in-project-estimates">A Value of the Graphs in Project Estimates</h3>
<p>The graph has turned out to be the most important feature. Initially I included it because I wanted to play with D3 and have something more impressive than numbers to show. What I discovered was a reminder of the importance of data visualizations – even simple ones.</p>
<p>As I said before I created this tool when working with project managers who simplified all estimate ranges to a single number and held everyone to that number. The first time I presented numbers from the simulator those project managers picked the median and complained I made it too hard. The median <em>was</em> better than what we had before, but not enough to treat as a promise.</p>
<p>When I started presenting the graph those same people immediately started to change how they talked about the project. By visualizing the impact of uncertainty over several tasks they could see that the project might run far over my estimate – or far under. The more uncertainty, the longer the tail on the graph.</p>
<p>Suddenly they were comfortable talking about risks from overruns, finding ways to help clients understand the possible risks, and being understanding when a task proved harder than expected.</p>
<p>The graphs tell the story, and empowers the team to have an honest and productive about project estimates.</p>
<p><a href="/estimates/">Estimate your own project timeline.</a></p>
]]></content:encoded> </item> <item>
      <title>Time estimation: making up numbers as we go along.</title>
      <link>https://spinningcode.org/2017/06/time-estimation-making-up-numbers-as-we-go-along/</link>
      <pubDate>
        Mon, 05 Jun 2017 00:40:01 +0000
      </pubDate> <guid
        isPermaLink="false">https://spinningcode.org/?p=316</guid>  <description>I wrote a simple tool to create project estimates that simulates how long a list of tasks might take.</description> <content:encoded><![CDATA[<p>Any experienced developer, and anyone who has worked with developers, knows that we’re terrible at estimating project times.  There are mountains of blog posts <a href="https://www.sitepoint.com/how-to-estimate-time-for-a-project/">telling developers how to do estimates</a> (spoiler alert, they are wrong), and <a href="https://www.applicoinc.com/blog/software-estimates-suck/">at least as many</a> <a href="https://coding.abel.nu/2012/06/programmer-time-translation-table/">telling project managers not to rely</a> <a href="https://dzone.com/articles/4-biggest-reasons-why-software-0">on the bad estimates from developers</a>. Most of the honest advice doesn’t actually help you develop a number it <a href="https://softwareengineering.stackexchange.com/a/716">helps you develop strategies to make a slightly better guess</a>.</p>
<p>Any time I start to work with a new project manager on time estimates I try to make sure they understand any estimate is – at best – an educated guess, not a promise. I’ve learned to give ranges to imply inaccuracy and round up to offset <a href="https://en.wikipedia.org/wiki/Planning_fallacy">my bias as a developer to underestimate</a> (I recently noticed I’m frequently doing that too well and badly overestimating but that&rsquo;s another story). However, that still led to greater faith in the estimates than they deserve.</p>
<p>A few months ago I was asked about this topic by a program manager I really enjoy working with and who was trying to work with me to find a better solution for our projects together. One of the articles I sent her was an old one from <a href="http://www.joelonsoftware.com/items/2007/10/26.html">Joel Spolsky written in 2007</a>. Re-reading the article I again drawn to his discussion of using <a href="https://en.wikipedia.org/wiki/Monte_Carlo_method">Monte Carlo simulations</a> to help come up with estimates about project duration. While he argues it helps increase accuracy, I mostly think it helps emphasis their lack of accuracy.</p>
<p>And since I’m a developer I wrote a simple tool to <a href="/estimates">create project estimates</a> that simulates how long a list of tasks might take ( <a href="https://github.com/acrosman/simple-project-estimates">code on GitHub</a> and pull requests are welcome). It’s nothing fancy, just a simple JavaScript tool that allows you to enter some tasks and estimates (or upload a CSV file) and run the simulation as many number of times you’d like.</p>
<p>Currently the purpose of it is more to encourage people to understand risk levels and ranges than to provide a figure to hang your hat on. Since estimates are bad, the tool is inherently garbage in garbage out. But I’m finding helpful in explaining to PMs about the fuzziness of the estimates. By showing a range of outcomes – including some that are very high (it assumes that your high-end estimate could be as low as ⅓ the total time needed on a task) – and providing a simple visualization of the data, it helps make it clear that estimates can be wrong, and added up error can blow a budget.</p>






<figure class="figure-center">
  
  <a href="/wp-content/uploads/2017/06/TimeEstimates.png" target="_blank" rel="noopener noreferrer">
    
    

    











<noscript>
  <img class="rcf-image" src="/wp-content/uploads/2017/06/TimeEstimates.png" alt="Histogram of time estimates." loading="lazy" />
</noscript>

<img class="rcf-image lazyload show-if-js"
     data-srcset="/wp-content/uploads/2017/06/TimeEstimates_hu_f22f2980752673d5.png 680w, /wp-content/uploads/2017/06/TimeEstimates_hu_f8784d97e702d22d.png 850w, /wp-content/uploads/2017/06/TimeEstimates_hu_9268ae8b3d7fbf90.png 1020w, /wp-content/uploads/2017/06/TimeEstimates_hu_194b51c1223c4e74.png 1360w, /wp-content/uploads/2017/06/TimeEstimates.png 1584w"
     data-src="/wp-content/uploads/2017/06/TimeEstimates.png"
     src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABrCAIAAAAw3x3dAAAVw0lEQVR4nOx9WX8TSa93rb3YjsPMMFzM9/9Sz&#43;1zc877Gwh4aXfXJr0/Se3GhCSQYMd2OBoGHKdXqST9tVSVyzmXUhBRMyGiQqW0MsYoJkREAPpKKzlGvp8&#43;0Cl7QiattTGGT0Sl1XeH0al8fb0/4&#43;sV5NcTHd7oTZJLKXXbLsZoDL0wABYAa4zzzhirtSokoMJiIV4Y4q3Rhj8ybwoUABB&#43;ZaLimQBKTpmYS0chkGjlIsZa45yvKq9QxRRlBAgZY5xzFZNhOjeLTkskgM12u9lsEACVKoX4aZ2tqtpX3mhN7M&#43;lIEChA6zRzjnLJBJKMaaUjKEvIlPdtG3bQslhGHLOSmvcD3WlaOxba9u2vVkstNFd1w3DgIgiBudc0zTL5dJa&#43;7bHvpDT2mrjUfsEsQAgakBdisaCkNFohaAKGtYMxYZIOxrEoyZoZijrAn1hnXXgjKWvFPIAtoa4zmZNoxYBHKqQyKOUIlZLRv3vYHyEnHbetfMqI4ZgyXwrAFCojDXaWhq8GrRGa71vbEV64ZrKVs6OXFcKgNRGhMIDGcSMIELJGXjUy9hnKYwm3jnnvddaV1WVc570Y/qVtfbczHkNcmzVrVIayY4rHppsiDArID9JHwGMNVU1m83apmlbEoC4ZKUObMvhgJXPk3c9&#43;EB/6b3GKKWqqsIDIU1j/9APv2FyI8hBUKOblbcnTgGDH&#43;YuArAPQJxgkVYwcpl&#43;A3vbMloPPpdpj57oIPLEyB7bVJU/5O8hEHrzTD8kByXlOMQYcyGGAoJCJMMh5pj0Qyk0peR&#43;GLTRJYbojSUJ4R5NqpQSIrJbJuNjjWHoVGSYG2u10jmlXAgkpZydc7e3t/PZbLIzvxXTD8kh5Bz7OGxDTDSKGZtnsjvonHfWiqctOaehpKHbsYslV8ERg3OurmtCnDkx0tR1XTd1FWMcQiDr5lxdVdYR3KKDcgoh&#43;srXdT1r23O//vnJaaWcUd4oYLTCtkhpy6EY&#43;eBiCbY7Z2wp7EfJtbIxYiL0Yg254gK5FMJI4ADG36eS6ACtLQmTpEkwybGXdU79rqP&#43;kEgAWtC9mG8GM2I5jNExJq2VtdoaV3kvwBERJX4Wa661cWRJkI09Q1BjZvNZVde7XR9jBISqqtq22fsM1IYUxfyfAMQJl5zDEMhisL0WR&#43;opEuZoNpcUEwBYawkeVt47D4Axppyz5tHNAlAMR1POFE/d3Cwq73eqTzFa8hNYVZVzbrqxCHIKoc/KhHOSM9b6yldVRTGYGf9TShG7OSWgdWIMpEaQziYESrHGIEvLjoPekjYwxGTUQ&#43;FVXdcI4JwFABZYQQRhvWQoLMUX3jn35lMOjxHZZeerqq44uP0KCgnScEwkQNMwl0ktmNs06J1lezXiTmdtthaVsgSCjMDKyntFXj5zuikxuqUrI2DKCVG1bbO4uZm1s99WDxwAGfSY2J4owjaMVbK1rm0aYRZhx5RQqZhTlXLbthL0xhCQgFAyei64PqVMAz0Vharh4U&#43;uOOeSg41RYGtd1UqroR9yoQC4rhuoQanfIu79nhwy8Bd7QoaDrX7Oha2I9iNbiTspZwqmLLCBcpJCyImOtNb4yqNqEVVMCYCiBWtMXde&#43;ruhICjIouDPsfp0llx5j8pX/TZJuj5FDYAvPuNGy4decvGQQagDQWO2cNzNbF9IMkkSMiGSUZrNZDBFwVBHn3OJmkVIahiHnFJOZL&#43;aLxWJv9MeMBUdqtsBcIjXvvXW/rwz2KCgMIUbvfN3UDIVcKdDv&#43;g7RWUPYpyJPDYhhILLWtrN5XVUllzQMGw672tmsbWqO3UxkOGSMOQQ/U7ZnrPww/bbWX8gJXnHOZQqpRmJTBJlTB5JjdpajKOewrg2jT2O00oorBxWBVI6zEFXmgK1pmnbW1nUt&#43;Ynvb/w7M/2QHKfavpZKhPX7ypRSGilsZU&#43;Qc4ICRhvCNpyvyykCRVWEjBzHukphSkkpPZvPl8ubhtz1b4ovf5KcZC5TSjFEpcbcG/sFzIUAEbEVFf8N7J4zIjhyFd6wk4gx5pTJsBNsJdRkrPEkD6&#43;5xPYz432Cs78bOc2Dt2kasvwUE3mtKZgqBXQiZ6vIXnONxXqCO8lQFEYxWs1VF3Ldg&#43;7HwgBHcFIc3u26FIO4dBItBRl0qUM3IIUAZ21VN1Xlf0N1cUr6INgTaKW5MAucAzUyhIErXiknzsQpozQoLR6CfWzN2qBIDziegFK00SGG9UpZaxRXlbnORfwFoBCBgjVtcskSYdd1/e7dH8be&#43;N/PIY8pSSglxYQqccEFrNFun7eUMn0MAciY6FJyyfSB03HFUEDgnWSbOYZQWnntCgDhUE7eCXj1vlhrAYrWplIKdAkxioFSSklV8tzcOAM57/18caO0iTFyX4RSUrk1mrMRZmzeUYpzakqSoGJFLNsuX3lnbds0yBaG80UWEFMkpdHGcB0MpYg/dUUI00UA3vt21tqxU0hJ9Vjh9PEtawXZB/asmVsipGyO4pmHYYgh1k3dtu0Ur0rJXhjFYNRKWkLymuNFyb4rgEJoinNz91D/vdBsTC7tb4GoCkMxGg8cPDur32ru2nGKjeheg1uM8ePHj//&#43;&#43;&#43;&#43;HDx9ubm7qur5XZxd6YnCOYddYaFbfF&#43;6/L8QrTkblgkPKIRVObGPr7bzx3r1NmOTuvb&#43;QlLo&#43;f/783//&#43;1zn34cOHFzQK3jvywRPvfUmGK8Mu5vUu7UIKqWiA28Y53VpTE0p4c&#43;Qe&#43;wUiDsOw2Wykbe0VHgVRpQybIX3pwqYn7ueUdYy&#43;V3OrKi8lu7cmg6cEIAAURt9wcgLEIZW7Tfi0GVIB7gQA3Q9Dl7rK1rNG3MQrPMlr0qUEPpxEgm5Id9vhyy6GVKSZF3NJQ&#43;i60A0pZoA3B1UvRwAY2f5shxxzmZROeh0H8gqxC4l/c&#43;5nPSpdhABQqUL2J&#43;8CgZ97TBbZbENix/DWlOAyBMDgp49liKVMPY3fHhDpgBwOlONt0EUIAFDFXHZBjM8DByAFgBgS9HQM4IMHXSedXwBc0eThn0p&#43;3L4AYkhl3aduSG/JGT8KQ1&#43;HOOuAu5gF&#43;DNfH2YtspZs&#43;lh721T72TnXT25q8IcD48vZ5vwKEQAqdrBD6kJK&#43;Qn&#43;07EFsI8kg5vWNxKXnfThXoWcZB2Goe/7QSqRCJBL2e12XdedOksMgDEVAT9PmxUc00TQDbmPedl6j/oNtPeSBuSU1qv1p7u7XMBbU7hCGUL8slrHmE4nALE/fST0mX4O3XyTp/Pq6tnPTnh6b61wnEw6TQ466QgT&#43;9OFTPbnYfhz7/gJj5YfKczVkFNKe&#43;&#43;Xt8uqqgsU5jmJYbfbfWY6Xf6LkGUu2yENsSitps7UJwhJCSgwlmjZXL8NctxYaGezedO0h3Pqqqqaz2fuZD1riCoD9iGTAHKprPkZSEwei8XGVgjs9edH3VSlOuxIkAnTJ20VQUXR75bsTxbf85MnckAA2yEv2&#43;Kt0VeORs8WiCGqVMbI9qHsww9O3IXUsetWV&#43;4KzigALACZ&#43;4KfAP8PEgAOSVIXcO1ZifMIgEG9KqC4wv9sFk6eIEqweJqHfB06kwAQC2KSvokXSGBfPR7izwYQF0tnEIAM/0z2B188fCU11IU8pHLVSnAODUDFw5&#43;U4MWM40nIsAtjFH29rvgsGkADv/zC8B&#43;LaIAhlZ6t0PW64q9zVw6HI&#43;xnLZ3ilpJWA&#43;kK/oU7IGIsJICYoK2uNSp2UxtWSkk6NaUbZbfbhRCm5tljkYxcsv7Pwf4PXwpVzmyFYp437kqjYsezgCGEsNlsuQcLSskp5b4fVuu1LINyxPvJQn5if37puoydUsEu5E0fl62vnL3G7KijN0HIOfV933Ud8R9KSmUIIQxB1nE77i2BMegvK8DoS0Iq24Gw0LzGayzRuCkX7Ss/w5mW1mjEfhg&#43;/jv//NkdUa/H&#43;IsEcL/J94UXZGc&#43;kCsuqQC3V1&#43;ZCGSOGFkha&#43;xiseBZpVYp1XXd//vf/5Vl3Y54vxH/jMXHI8hAlKALKeSq9tdnhcZ5wlyRHObzRV3XVeVlIsbx19BADsHYBB3LsElP48A9RbMKri47Ok564dnXA/BkvGnpt6Or80EEcMzLihLs9m1bx7z06clIGXJcfUnpk7aASwvir2QgHr4sK0Ef85Dg6jJDPAVsXAjxtM8&#43;tjXsMxDHvRMgQdIxu3fka5&#43;WDBeBeRoXLyn5/VLaxyJGLCoByoJzR7743rjxeo/XJAH2sWxyAGE/A/L4dJABnXKXR5eByjAqwRVJwIz2p4x0KiuEnMH/tQzoD&#43;4gSVYyRAjXIwEzZcRkkbjTLRYALIOTsX/sXUyjkl2NBIxYZ82LDlRVLQI4hY0WQZ&#43;UL5LpS4UkcS0S4HQ0t8LtZ68XQUQxxmNZJO5oGzXgdHzByQqB5JrwKsJiJwuZKKVCjKv1OpesFeZcdrt&#43;s9mmdIzmXBT4L5bhtCNTXH0qUBl9FQ3sTmvteb3&#43;uFqHEHbdFgFSzsMQ1ut1SvHXBQAKD&#43;MvVCccmRLrJcCMyNshXLoISADO&#43;/l8PoQYQzRGoeE1ZgB5HRrzi&#43;z6Jv56BbvM64KwEhhn8PKzo052rLi5ufHe51xGPCHNuXd3d3efzE/0zD5FkoDj/M/r&#43;MV9wgMKGKsvXQmcLFZSV9Xheh3SG9q2za/vIzLGqGOA/SoiECVgGThjT91k/4s0FuW1MYecnnZj&#43;MXhs&#43;&#43;A&#43;&#43;UC5DNvKng0FjBa1/ail6M7eVvK6ABed2qpdN5FlkF&#43;Hd/zUjqtACS9JxWYV7I/X29NeDRy/90lS&#43;DkGlAmD/zqwankqGOBVwJgL6ITa8BUBH51BsiEMlKCwk2ol5qaOKEA9hkIhNNngR57gIIqsQwutlJ2Wg0QD3zG5CQrAUaAfbHs4uiESxUIFOEY&#43;HQ3&#43;TEB91EHbpeQLSzP&#43;TTf0VcBHK4j&#43;XWxspded18CGwuQZ3zt0RAVjAYpML4wEYwCGNfvjlH6oksp3W43DEPhRW9fQmNmeFR8fdoU3A&#43;fhSfkFOCdM/GiRDDWAwBg6PvVeh1DSDmllPshfFmtYkovAzDA9amz4J8HSQqihmPjSl/QWrxuQmyFizDDMCTifw4hppR5n8/nT6IT94snrAA/72lQoaa4TLass1wouBAJuP0KxKau6&#43;Vy2dSNbCrT98Pnu7vVl5csVSDgJ1MEdDHwGxUoFQtY3vfAXowrGH2ACMA5B&#43;PEUey67n/&#43;Z&#43;Ge35zLq0ZjKiibNJ&#43;8BvbTJFMTQgFftIjhEkSwz4ZyTdhaK84SEWVXpBc03KMi1ie4xNhHIOmQBZLqS9i76ZvNHZX6ClVe9mz74BMvc2U9HL0xhEICqHjj9vPK4MiBmKRfEqdfLsb2fEP71hXYdyGb887qOKYApuBLEpBn1&#43;4nqCAGnuDdOFVZ486HS4&#43;qARx8xQKJ4f9lOLkHSAYKAmTQnKm2ytlzyeCYAgCF3B5Lf2t1xsj3pwjGfTr0&#43;KiWNxB/dSkcTQCC/Wn4s2qf27f9mMRHZcAhg1YaUHmjHefsXlMMRxAATlnfAmMN9hhP9gokUUrh4ICMp6HgoLLGG9mnUf47Lf2SAKSFSObdhQIhQ5L2f0TZOwbHFoXx5ykow6l5YUp04L6FV&#43;3LN2MMtz8Dv73vNx/2HXff4K57XXjfz0r4&#43;gQFkaL2oqLW2WFt0XHmmv&#43;ovTXV6hugfhx6WACycq4058pn2T7&#43;mzfjVwIuOYU8lr/5DxdgQGsDinScExJaNitUkqHTir4pJfMmZZlYUHQxln7im5aiipF/iOTvopFPAatNKWSwYfzaFKdLMTkbrdEarZh9hauh9NRAP4qR5B4cjfQj98vwJnZIbMYCxNyUdbRmjNSMdnrcalxWiT1IIt3/91my0fvNyB8QgITBfd/LOgW73e7Tp09934&#43;7KI3DESfQGUqJRfoe9iUwRKvJnioG3YVdgkTVUqPXShmtQsyrL8NmO5AAalc5w4vYkzxy5YI3mLPabPzQqxxLSkmbPpWUwTsTPW/fl3h&#43;tjG5dmXwsffOW8uM03psSdJaCdKXdRoV5&#43;PM/kdUymr6RvSAfiun79nk2C6Z/Sqqh2qhvu7m9QwZCOubpmnb1nv/sAAy1wY894yuVqv//Oc/4&#43;by3GYymhneJFLiXll11egxzEGF8qAsACicX&#43;JtqDQqDfyURvGWPbu47RMqrJ11VssKNIjorSH5QdFD8DmpuoamKUqHDAXQWrLUWmuK&#43;Dik8k7X3taVc&#43;Om9&#43;NWZRKNiwDG/nh&#43;Tt6ikZRVjflRo8gP069Zf8YNtfjgUR4ykVF&#43;tPt5vGqaYncokD0bJ9IHm&#43;9L2u39&#43;/f//PPPcrl82AQZa9u2/eeff7zz/378d71eyxzKXEoYhhgjKuV8Vde14Y38ycYf2FqxvHrMKWXZYHtsgKwq2bRS9q83GWYkRGVBG9SGBm0W6xdL1krVzntvtcmm9FppQ7YNNWpbtMzv8TzRPPcpltIZ5auqqWvv3bQnnFLfPJv8W3IZAr2IUrqq6RRuwtTfHMz/y49QSogxDAMAeOdqns9up6URvrNGNBBLjiHGGMhmWte2TVVVIom2bZumEQOjv8cs0&#43;o1vCPqbrVa9X0vFcq&#43;7z9//rzZbBDVzXL55x9/NG0zbnf4gCopgLLb0Sldt7XW3ixvb2&#43;XJLZxh0R1r2EHAUIMu67b9X3X7ay1f/3513J5Q9x5BBnKU63Xq&#43;22g1Lmi/mff/45a2fmsYVISQ/GF1mv11qb5XL5xx/vmubRF5Ft7dar1d3dXYipaZrb2&#43;lFHn4qRAwhrFer1XoVhtC07V/v39/c3DiWmfd&#43;uVzSc85mDwjgcP2mw3XsAaDb7e4&#43;fVqtVoD47vbd&#43;/fvZ7OntmyGAl3Xffr0abvdWGtv3717905k9ig3Qxi2m81m2223W&#43;&#43;rDx8&#43;3N7eyvIVj50iqyyvVuuc883y5u&#43;//17M5089Fb/Ip48fV6uV1ubdu3d//fVn&#43;/je0yKAz58/f/z4MYTYtO0f9B7v2qZ5LGDgXdj61ZfVly9fhmFo2vbvDx9ul7eyEvGUeyYd&#43;iFqP2yZjjF2XRfCgEq3TTufz55ezUOmOu3olGgsqV7btjzt4NHnzjmFIZDuxmitWyzmvNfxo9yUp9rtdsMQAKBpal7xonp6j8UY47brwjBobdq2mc2eehExCTumnIv3nt&#43;j&#43;cGLMJDpyfxm7/1isbj3IqP1elbYNHVLiC2TnTyfOH7aDQ4Bx&#43;1Zf9SqjNNyaaPvklN&#43;8Eiyz4HmxhPrrCx38YwXsT9IS4sMpt3Bf&#43;ZFYH8PciSPv/vzBHCoED8frp/uFBnL/a7PORtLslIsM97i2Nsn16N&#43;7lMdMuqIp7jnNu28IE1yulNkz927u7vdbuf2A7&#43;q6sXNYj5fGPOUeXzuU53oLRwAvIEN9SV4VAr5XUw&#43;3ZT/Y5MehuHUK9WfjkYT1PcpxhG5McirmaYdoi&#43;Z/n8AAAD//6VgtHcG7FVHAAAAAElFTkSuQmCC"
     data-sizes="auto"
     width="1584" alt="Histogram of time estimates."
     loading="lazy" />



  </a><figcaption>This is the output from a recent set of estimates I was asked for, hopefully it&rsquo;ll be good news</figcaption></figure>

<p>Please take some time to play around the tool and let me know what you think. It’s extremely rough at the moment, but if people find it useful I could polish some edges and add features.</p>
]]></content:encoded> </item> </channel>
</rss>
