Your manager comes to you and says “Hey, Joe. Let’s talk. I need to get a new system developed to keep track of our help desk calls. It needs to have a slick user-interface that is easy to navigate, it needs to be fast, and also we need integration with SAP.” You ponder what the system architecture might be like. He continues. “So how long do you think this will take?”
Of course, your first instinct is to tell your manager that you’ll get back to him later with a rough estimate, but he is in a hurry and persistent. You cave in and tell him, “I think it would take 6 weeks.”
“Hrm, 6 weeks? I really need it in 5 weeks, no later.”
Your manager is already negotiating your rough estimate. Be afraid. You start to figure out how you can accomplish all of this in 5 weeks and you are realizing that you really needed eight weeks, not six. Let me put this story on pause while I tell you another story…
Bob is the new night manager at FatBurger. One night a man walks in and requests a double Fat-burger with cheese, a large order of Fat Fries, and a chocolate shake. He pulls out the change in his pocket and Bob finds out that he only has $1.20. The entire meal costs $7.50.
What would you do in this situation? Turn away your only customer in the 11:00pm hour? Offer something that he can afford? Give it to him for $1.20 this time only?
Bob, being a proud night manager, wants to satisfy his customer. He cannot give away the food cheaply because then the guy will return again, expecting another discount. So Bob decides to get creative. He goes around back and finds a dead squirrel on the pavement. He scrapes it up with a shovel and brings it inside, grills it up and gives it to the man.
In this story, Bob sacrified quality to give the gentleman what he wanted for only $1.20.
Stop me if this scenario sounds familiar.
Back at your desk, you are realizing that you are about to deliver to your manager a squirrel-burger. He wants X features, but you can’t deliver them on time. The first thing you are going to throw out are automated tests. Then you’ll stop refactoring. Pretty soon you are just heads-down coding like you did in high school and you are making a huge mess.
Two things are likely to happen. The system will buckle under its own weight because the code reaks of dead squirrels. The other thing that is likely to happen is that your system becomes useful, and now management has another request.
“Hey Joe. The new system rocks! I just got off the phone with marketing and they want to start selling this to our larger clients.”
Now you’re in a pickle. You have a spaghetti-mess of a system and now you need to extend it and polish it for redistribution.
This sad state of affairs is all too common. Your manager might want a double Fat burger with cheese in 5–weeks, but what he’s getting is a squirrel burger. Don’t deliver squirrel burgers. Be careful with off-the-cuff estimates that end up turning into negotiations. Joe should have negotiated features instead of quality to meet his 5–week deadline. Estimates should include time for automated tests and refactoring because it is part of your daily coding activity and it helps maintain quality.
I first heard the term “squirrel burgers” and the above story from Mark Pushinsky.