I really like this quote with Nobel Prize winning physicist Richard Feynman. He is describing a scientific mindset that applies to software development just as well as physics:
Stakeholders, business people, and other normal people mistake building software with things like manufacturing or building. When I had my roof replaced recently, the contractor measured the roof, determined the materials to be used, allowed a margin of error for possible dry rot, and came up with a bid that was within $300 of the estimate (he was under), and he finished when he said he would. Perfect. He was dealing with known quantities and he is a professional. Why the heck are software estimates and roadmaps so terrible when lots of other professions clearly have estimating worked out?
The difference with software is that we do not start with a known system. All modern systems of any complexity and age tend to be big, or even huge. Millions of lines of code might be involved. Depending on the size of the company, thousands of developers might be making changes to little pieces of it every hour of the day. Millions of customers use the systems that were created by thousands of people, many of whom are no longer with the company. I am not describing any one company - I am describing every large company that I have ever worked or interviewed with. If we want to compare roofs to code imagine that you have to make an estimate to re-roof a house, but you have never seen it before. And it is the size of the moon. And it is made of all different stuff that is of different ages and condition. And there are millions of people under the roof. And there are thousands of people building and tearing down different parts of the roof the whole time that you are supposed to be roofing it. And it is raining. And snowing. And Sunny. And Hailing. And there might be an earthquake tomorrow. And several parts of the roof are definitely on fire. Now, please give me an estimate that is precise - I need to know exactly what day you will finish and how much it will cost - and you need to tell me now. No right now. In this meeting. Go.
You may think that I am exaggerating, but that is what it is like every day. Why do we do it? Well, as Mr. Feynman says, we are not afraid of not knowing. We love a mystery and finding things out. It is the biggest puzzle ever, and just like playing horseshoes in a lightening storm with farm dogs running around you (I have done this, too), you just never know what crazy thing will happen. How will we make it work? How long will it take? Secretly, we have no idea, but we really want to find out. This sort of acceptance of uncertainty is maddening to business people who want to announce release dates. The best a good estimator can really do is just watch his or her team go through a few release cycles and pad all of their estimates. If they usually take twice as long as they estimate, then double them. What kind of process is that? Did Edison know how long it would take to invent the lightbulb? No. He famously went through dozens of prototypes, and he was just trying to put current through some wires. We are way, way past that, now. So if you are a normal person and you have the misfortune of having to ask software developers how long it will take to build your feature, just remember not to be afraid of not knowing.
Stakeholders, business people, and other normal people mistake building software with things like manufacturing or building. When I had my roof replaced recently, the contractor measured the roof, determined the materials to be used, allowed a margin of error for possible dry rot, and came up with a bid that was within $300 of the estimate (he was under), and he finished when he said he would. Perfect. He was dealing with known quantities and he is a professional. Why the heck are software estimates and roadmaps so terrible when lots of other professions clearly have estimating worked out?
The difference with software is that we do not start with a known system. All modern systems of any complexity and age tend to be big, or even huge. Millions of lines of code might be involved. Depending on the size of the company, thousands of developers might be making changes to little pieces of it every hour of the day. Millions of customers use the systems that were created by thousands of people, many of whom are no longer with the company. I am not describing any one company - I am describing every large company that I have ever worked or interviewed with. If we want to compare roofs to code imagine that you have to make an estimate to re-roof a house, but you have never seen it before. And it is the size of the moon. And it is made of all different stuff that is of different ages and condition. And there are millions of people under the roof. And there are thousands of people building and tearing down different parts of the roof the whole time that you are supposed to be roofing it. And it is raining. And snowing. And Sunny. And Hailing. And there might be an earthquake tomorrow. And several parts of the roof are definitely on fire. Now, please give me an estimate that is precise - I need to know exactly what day you will finish and how much it will cost - and you need to tell me now. No right now. In this meeting. Go.
You may think that I am exaggerating, but that is what it is like every day. Why do we do it? Well, as Mr. Feynman says, we are not afraid of not knowing. We love a mystery and finding things out. It is the biggest puzzle ever, and just like playing horseshoes in a lightening storm with farm dogs running around you (I have done this, too), you just never know what crazy thing will happen. How will we make it work? How long will it take? Secretly, we have no idea, but we really want to find out. This sort of acceptance of uncertainty is maddening to business people who want to announce release dates. The best a good estimator can really do is just watch his or her team go through a few release cycles and pad all of their estimates. If they usually take twice as long as they estimate, then double them. What kind of process is that? Did Edison know how long it would take to invent the lightbulb? No. He famously went through dozens of prototypes, and he was just trying to put current through some wires. We are way, way past that, now. So if you are a normal person and you have the misfortune of having to ask software developers how long it will take to build your feature, just remember not to be afraid of not knowing.
Comments