Developer Tea

Estimating Sandwiches: Why the Gut Doesn't Work, and How Small Is Better

Episode Summary

This episode is all about estimation, and how important it is to focus on estimating small things, and understand the implications of scale on your estimations. This episode is sponsored by Digital Ocean, cloud SSD hosting that you can deploy in just 55 seconds. Use the code "DeveloperTea" to get $10 off today at http://digitalocean.com - plans start at just $5/month!

Episode Notes

This episode is all about estimation, and how important it is to focus on estimating small things, and understand the implications of scale on your estimations.

This episode is sponsored by Digital Ocean, cloud SSD hosting that you can deploy in just 55 seconds. Use the code "DeveloperTea" to get $10 off today at http://digitalocean.com - plans start at just $5/month!

Episode Transcription

Veloprotee, my name is Jonathan Cutrell and today I'm talking to you about estimation and sandwiches. So what do sandwiches have to do with estimation? I bet you that's what you're asking me right now as you're listening to this episode and I can tell you that on their own they have nothing to do with estimation but I want to make this an interactive episode take out a sheet of paper and I'll wait for you here or you can just press pause that way we don't have to have an awkward silence. Once you have that sheet of paper out I want you to write down a number for me write down how long you think it would take you to make 100 sandwiches. Now just use your gut. Okay so once you have that written down I want you to think through this with me a little bit deeper so how long would it take you to make one sandwich? Well we could imagine that it would take maybe three to five minutes for one sandwich. Now what process did you use to estimate how long it would take you to make 100 sandwiches? If you for example think the way that I think then you probably estimated that making 100 sandwiches would take you 100 times one sandwich. So in the scenario of three minutes per sandwich you're looking at 300 minutes that is five hours. That may seem like a lot but if it takes you five minutes per sandwich then you're looking at more like a full work day to make 100 sandwiches. Now a lot of people when I ask them this question they think they can make these sandwiches in one or two hours. Now that seems kind of ludicrous doesn't it? It seems like that is absolutely crazy but we think this way because we think about a single sandwich and we think about how easy it seems to make a single sandwich so 100 sandwiches is also easy and then we use our gut which is not very good at estimating to estimate how long will it take to make 100 sandwiches? Now this isn't a very scientific approach is it? If we were to instead sit down and break it down write down the amount of time that it takes to do each step then we might we come up with a close to correct amount of time that it would take us to make 100 sandwiches. Part of the reason for this is because we've all made a sandwich before most likely unless you live in a place where sandwiches are not a regular meal I for one live in a place where I have a sandwich at least once or twice a week. So I've made a lot of sandwiches so I know how long it takes to make one. This is not necessarily true for the work that we do on a day-to-day basis so when we're using our gut just to estimate something that we already know how to do like make a sandwich if we're that wrong about estimating sandwiches well how wrong are we about using our gut to estimate software projects that consist of things that we've never built before and maybe that nobody has ever built before. It's very difficult to estimate very difficult to estimate gets even more difficult when you try to use your gut to estimate. So the moral of the story the whole point of this episode is to never use your gut for estimation. Now there's also a few other things that we can talk about with this scenario of 100 sandwiches the 100 sandwich scenario gives us an idea of how scale might slow us down in our day-to-day operations. For example I might make one sandwich using a small loaf of bread and a small jar of mayonnaise but when I'm making 100 sandwiches I need multiple loaves of bread and I need multiple jars of mayonnaise this means that I have to open multiple jars of mayonnaise and I have a lot of counter space and I have to travel longer distances in order to get all of the ingredients to the places where they need to go and unless I've set up some sort of conveyor belt line that I make my sandwiches on then I'm likely to take longer per sandwich to make 100 sandwiches than I would to make one sandwich. However I'm much more likely to make each sandwich faster on an average if I'm only making five sandwiches and the reason for that is because the support that I need to make five sandwiches is about the same as the support that I need to make one sandwich. I hope I haven't lost you by talking about sandwiches so much hopefully you aren't leaving the show to go make one right now but the same principles are true when it comes to software. When we are building at scale it is very easy to need a larger infrastructure it becomes more of a management problem when we need a larger infrastructure to scale now ultimately that scale is important in order to support the job that we have so if you have a thousand users then your scale is different than if you have one or five or 100 users and what you do with your code what you do with your software will change to support the new scale that you're working at and if you think about the same way that you change when you're making sandwiches you have to have new infrastructure you have to have new processes and you might take a little more overhead on in order to change things you might have to take on the overhead of walking a little bit further to get that extra loaf of bread you have similar overhead issues when you start scaling an application of course it is it is worth your time to optimize those things that's why it's important to look into scaling if you think that scaling is getting ready to be a problem for your particular application so be prepared for that scale to occur but remember that estimation is affected by all of these things and that's what this episode is about is estimation so how do we get better at it how can we estimate better I have one tip for you today on how to estimate better but first I'm going to take a quick sponsor break and then we'll be right back to the show. Today's episode of Developer Tea is sponsored by Digital Ocean Digital Ocean is simple cloud hosting built for Developer They're dedicated offering the most intuitive and easy way to spin up a cloud server and in just 55 seconds you can deploy a solid state drive cloud server plan start at only five dollars per month for 512 megabytes of RAM a 20 gigabyte solid state drive once CPU and a full terabyte of transfer in addition to offering simple and affordable SSD cloud hosting digital ocean is dedicated to building out a strong community and supports open source software they offer a vast collection of hosting tutorials and invite Developer To submit articles and they pay $50 per published piece. Deploy your SSD cloud server with Digital Ocean a day by going to digital ocean.com now Digital Ocean has been kind enough to provide Developer Tealisteners a discount of $10 when you use the code Developer Teaso go to digital ocean.com and use the code Developer Teato get $10 off today and you'll get up and running with your own SSD cloud server in just 55 seconds that's digital ocean.com now let's get back to the show I'm going to give you one very simple guideline for estimating better and that is estimate smaller things. Estimate smaller things don't try to estimate the big project or multiple things only estimate the things that you have a high amount of confidence that your estimation is relatively correct. When you estimate smaller things there's a less room for error there's less room for you to make a mistake and that is fundamentally the important part of estimation is trying to limit the number of places where you might make mistakes in the estimation process. Thank you so much for listening to Developer TeaI hope you enjoyed this episode go make a sandwich today and think about estimation teach others around you how to estimate small things. Make sure you subscribe to Developer Teain whatever app that you listen to podcasts in that is the best way to make sure you don't miss future episodes of Developer Teanow I'm going to ask you for a big favor please go and leave a review in iTunes that is the best way to help other developers just like you find Developer Teathanks so much for listening and until next time enjoy your tea.