Estimating project hours and budgets is one of the toughest challenges in software development. Use the Fermi Method to improve your estimations.
Physicist Enrico Fermi was one of the most brilliant minds of the 20th century. He won the Nobel prize in physics, held several patents and was best known for developing the first nuclear reactor. During career, he became well known for his ability to make fast, excellent approximate calculations with little or no concrete data. In one well-known example, when the first atomic bomb was detonated during the Manhattan Project, Fermi dropped a few scraps of paper as the shock wave from the detonation passed. After some coarse calculation, Fermi estimated the power of the blast from the motion of the scraps as they fell.
His estimation strategy spawned what we now call Fermi problems or estimates. These problems normally involve making justified estimations about an amount and their variance or minimum or maximum. These problems have been used in employee interviews (how effective they are is question for another day) to better identify a candidate’s ability to break down seemingly large unknown problems and create a reasonable estimate. Here’s an example of some common Fermi problems:
- How many plastic flamingos still exist in the United States?
- What is the total number of shots taken in one NBA season?
- How many hot dogs are bought at all the Major League Baseball games for one season?
- What is the average lifetime of a pencil?
- How many musical notes are played on your favorite radio station in a given year?
- How much popcorn is popped at the movie theater on an average Saturday?
- What is the probability that you have a doppelganger?
- How many hours of tv will you watch in your lifetime?
- How much gasoline does a typical automobile use during its lifetime?
- If everyone in our city donated one day’s wages to a good cause, how much money could be raised?
As you can see, most of these questions are abstract and unknowable but Fermi type problems rely on estimation, dimensional analysis, approximation, but most importantly, approaching the unknown from a knowable place. For example, taking a look at a question like how many hours will you watch tv in your lifetime, might look like a daunting and unknowable number. But we can approach it from a knowable place and come up with an estimate by asking a couple of key “knowable questions. For example, if I’m trying to figure out, “How many hours of tv will you watch in your life?”. Here are a couple of the questions you might ask to get you to a solid estimate;
- What is the average lifespan of your gender based on where you live? (We know the average life expectancy of a male in the US is 78.4...based on US census data)
- What tv shows do you watch frequently on a weekly basis - Daily Show (430 minutes), Dragon ball Super ( 130 minutes), GPS (1*1 hour) = 3.5 hours a week.
- How does this extrapolate to other parts of my life? (I probably watched 3.5 hours of tv now, including netflix, amazon prime, etc but I probably have decreased my tv watching as I’ve gotten older. I probably watched 15-20 hours a week when I was a child (4-17- thinking of my favorite tv shows and daily schedule) and 10-15 when I was a young adult. (18-29)
- Do I think my time watching tv will increase or decrease? - Most likely increase. I’m pretty busy now so I’ll probably get to the point where its back to 6-8 hours per week. In the long term, I think i’ll have more free time and also will have kids that will want to watch tv with me.
Once we’ve got a majority of the inputs, (duration of life, baseline on tv show hours) now we can start estimating amount of time per year and then develop an estimate.
- 0-3 ( Not really sure but let's just say I spent 30 hours a week watching television) - 4 years * 52 weeks * 30 hours = 6,240 hours
- 4-17 (20 hours a week) - 14 years * 52 weeks * 20 hours = 14,560 hours
- 18-29 (15 hours a week) - 12 years * 52 weeks * 15 hours = 9,360 hours
- 30-40 (8 hours a week) - 11 years * 52 weeks * 8 hours = 8,580 hours
- 41-50 (6 hours a week) - 10 years * 52 weeks * 6 hours= 3,120 hours
- 51-60 (15 hours a week) - 10 years * 52 weeks * 15 hours = 7,800 hours
- 61- 78 (10 hours a week) - 18 years * 52 weeks * 10 hours = 9,360 hours
I will spend an estimated 59,020 hours, or about 7 years watching television during my lifetime.
With Fermi problems, it’s less about the primary questions and more about the questions you can ask to identify certainty and fundamental assumptions that affect estimations. For example, three major assumptions I made to come up with 59,020 hours are:
- The rate of tv watching is consistent on a day to day.
- Tv watching is connected to the amount of free time I think I’ll have in a given week.
- I’ll live to be the average age (78.4 years)
There are other ways to go about approaching this question. You could take a subtractive approach and identify the minimum and maximum time you can have to watch tv. IE, if a sleep 6-8 hours for the rest of my life, spend 8 hours working, 1 hour exercising, 1 hour eating, how much time do I have to watch tv a day? What are some other pressures that can affect how much tv time I have? To get more granular, what does my weekend look like? What do I normally do on vacation. There are questions that could bring you to a more approximate estimate, but the time spent on the estimate should be proportional to the need for accuracy.
The Fermi method has practical applications, it can be helpful in day to day estimating in work and play. From a project management perspective, the Fermi method can be really helpful when developing out approximate hour for client / internal estimates on upcoming features or projects. Most importantly, start with what you know. How many people will interface with the project? Based on previous projects, how long do your processes like discovery, check-ins, QA, and etc. normally take? While each project is different in its own way, asking these questions help expose what you know and areas where you’re making assumptions. Over time, you can evaluate how well your assumptions play out after each project.
At kohactive, we use a tool called WBS (Work Breakdown Structure) for project/feature estimations. It allows us to identify and document some of our known knowns and identify our key assumptions. Over time, we can evaluate how accurate our work breakdown structures are for each project we estimate and try to improve over time.