Overcooked and software development

Part 1 of 2 — How a video game helps explain tech debt

Colton Shields
Weave Lab
13 min readFeb 1, 2020

--

This 2 part series will be covering:

  1. how to communicate what “deliberate tech debt” is with our non-tech coworkers (this article)
  2. discuss common team problems

I’ll be using a parable of 3 fictional coworkers, Ron, Larry and David, playing Overcooked as a way to illustrate our 2 objectives.

“Surely you can’t be serious?” In order to convince you I am serious (and don’t call me Shirley!), we need to understand the game of Overcooked. Wikipedia explains the game better than I can. If you already know how to play, please skip ahead.

Players in Overcooked take on the role of chefs in a kitchen, preparing meals via preparation of ingredients, cooking, serving, and cleaning up all while under a time limit to complete as many dishes as possible. During a round, the players are presented with an order which must be completed within a short time window. The chefs work together to complete that meal in time. Most often, multiple orders of different types or varieties of meals will be presented in a queue, thus requiring the chefs to work together to effectively complete the orders. Completing each order correctly earns coins, with bonuses for speed, while orders that are improperly served do not earn any points but only waste time. The goal is to collect as many coins as possible within the time limit. The players are ranked on a 3-star system based on how many coins they got.

How a well organized team delivers food in overcooked

Players control a number of chefs in kitchens filled with various obstacles and hazards to rapidly prepare meals to specific orders under a time limit

Now that we know the basics of Overcooked, let’s walk through a round with our 3 coworkers. For simplicity sake the characters name will also be Ron, Larry and David.

The parable of Ron, Larry and David

It starts out pretty easy, a simple order that this team of 3 should be able to crank out: a salad, consisting of chopped lettuce and chopped tomato. Ron grabs the lettuce, and Larry grabs the tomato. They race to the 1 cutting board in the kitchen. Larry wins, so Ron waits while Larry cuts the tomato. Meanwhile, David has read a subreddit about Overcooked that says sprinting can help save BOAT LOADS of time, and he is trying to figure out how to sprint effectively.

Ron finally gets his turn to use the cutting board, cuts his lettuce, and now he and Larry are looking for a plate to put their salad ingredients on. They ask David, since he hasn’t done anything yet, to bring them a plate. David excitedly accepts, wanting to show off his newly learned time saving skill. He sprints to the plates, and runs too far past them. “This is fine,” David says, “I’ll just sprint back to the plates and it will take the same amount of time as if I had just walked to the them.” He sprints back and, of course, he over shoots the plates again. Ron and Larry are getting impatient but they bite their lips because this is the first order, and they are a team. David finally gives up on his new skill and walks to the plates. Ron and Larry plate the lettuce and tomato, and David reluctantly walks the salad out to the customer.

Whew! They did it. They got the plate delivered in time with everything the customer wanted. Coins earned for delivering the salad in a timely manner and leaving a customer delighted. BOOM.

Ron and Larry are hesitant of the future, but feel good about the coins they earned and think with each feature they will get better. David is pissed that his sprinting did not save time, and in fact, wasted it. He is more determined than ever to get sprinting to work to his advantage.

Now the game cranks up and 4 more orders come in. 3 burgers with different ingredients and a lettuce/tomato salad. Ideally they complete the orders first in first out (FIFO), but the salad was so easy last time that Ron is thinking he can do it all by himself. He is still a little bugged from the first order. He had to wait to use the cutting board, and for David to grab the plate. He thinks he can do the salad while cooking the burger.

Since there are only 2 stoves, Ron and Larry each grab a burger and start cooking. Larry, an experienced burger-cooker, stands by his burger while Ron goes to grab the lettuce for his hero salad. David tasks himself with getting all the plates and putting all the non-cooked items on them. He has already grabbed a plate and put a bun and cheese on it at this point. While Ron is walking his lettuce to the cutting board, David accidentally sprints into him. Apparently David is still trying to figure out the sprinting feature. Ron falls to the ground and drops his lettuce. David keeps on going since he can’t waste any time walking, let alone to stop and help Ron.

Ron, now pissed he got steam-rolled by David and his stupid “time saving skill”, thinks David should pick up the dirty lettuce while he picks a new head of lettuce for his hero salad. By the time Ron starts cutting his hero lettuce, Larry has already plated his perfectly cooked burger using the bun and cheese David prepped earlier. David sprints it out to the customer. BOOM, another order successfully created and delivered. Coins earned, customer delighted.

Ron looks up from cutting his lettuce only to see that his burger is about to start on fire. He leaves his half cut lettuce on the only cutting board to grab the burger before it ignites, but he hasn’t mastered the sprinting feature yet so he gets there too late.

Ron’s burger ignites 🔥. He finds the fire extinguisher rather quickly 🤞 (luckily it’s where David said it would be) and puts the fire out. Since he is running behind on the burger order and his hero salad, he drops the fire extinguisher instead of putting it back where David said it belonged.

Ron grabs a new burger and starts over. Luckily he didn’t waste too much time since the extinguisher was where it was supposed to be. Larry grabs another burger and starts cooking the last order, while David grabs more ingredients to cut. However, both plates are dirty from the first 2 orders. He finds the dirty plates and as he starts to wash them figures that they will need both plates eventually so he plans on washing both. Larry’s burger is almost done and needs a plate, so David washes the first plate and 1/4 of the second plate. He rushes a plate to Larry so the burger won’t burn. He then snags a tomato and cheese and sprints to the cutting board, only to see that there is a half cut lettuce on it! David is annoyed about the lettuce but remembers the 3rd order needs a lettuce too. He cuts the rest of the ingredients as well as the half cut lettuce, and uses it not knowing that it was for Ron’s hero salad 😬. David sprints it out and BOOM, coins earned another customer delighted.

At this point Larry and David are feeling great about life since they have finished two of the four orders on time and haven’t started any fires like Ron.

Ron was so determined to not let his burger burn this time that he didn’t see David use his hero lettuce. He goes to find a plate and can’t find one, only to find out its in the sink 1/4 cleaned. Ron grumbles “who washes 1/4 of a dish?” as he cleans the plate the rest of the way and starts back to his burger.

As this point the third order is almost over time, and they will lose coins for not getting it out in a timely manner. Ron is now feeling the pressure. On his way to the cutting board he grabs some cheese and a tomato and thinks, “At least I won’t have to fetch or cut lettuce.” He arrives at the cutting board only to see there is no lettuce. The customer is asking for the order and he still has to cut cheese, tomato, and now go find lettuce and cut it. He thinks about asking for help from Larry or David, but remembers how determined he was about doing all this himself so ignores the thought and cuts away.

He gets all the ingredients cut and plated, and by this point the customer is yelling that they are going to walk out of the restaurant if they don’t get the burger. Ron feels extremely pressured and gives up on his hero complex. He asks David, who has mostly mastered the skill of sprinting, to deliver the burger quickly. Lest you forgot there has been a fire extinguisher and a head of lettuce being kicked around the whole time on the floor. David sprints to pick up the plated burger and on his way to deliver the burger sprints into the head of lettuce. This delay of almost slipping and dropping the burger was just long enough that the customer walks out of the restaurant. Coins lost and customer NPS is at an all time low. Plus, the world’s most long-awaited burger is no longer needed 😑.

David places the burger on the counter and spins around screaming about the D A M N lettuce only to find out that Ron thinks it’s David’s fault for not cleaning up the lettuce in the first place. Larry lets Ron and David go at it while he quietly chops lettuce and a tomato, washes a plate and delivers Ron’s hero salad before the time runs out. More coins earned, another customer delighted although no one is excited about it anymore and the kitchen probably looks something like this:

WOW, what a ride! So many ways this parable can be used to illustrate a dev team, but as I promised earlier the purpose of the parable was two-fold.

  1. Object lesson for non techies to understand tech debt
  2. Illuminate obvious issues within our teams (coming soon)

Object Lesson

Some of the items from Ron, Larry and David’s parable that pop out as obvious tech debt issues:

  • Stuff left on the floor
  • Not putting things where they belong
  • Getting behind on chores (i.e. cleaning dishes)
  • Multitasking

Stuff on the floor

David likes to call this the D A M N lettuce. This is common stuff that gets left out of the software development lifecycle because we don’t have time. One of the first items to get left out is testing. Unit tests and integration tests alike get left on the floor figuratively speaking when we rush features out the door. The short term win of getting a feature out quickly feels good, but then the next time we run to get something out the door those missed tests slow us down and sometimes prevent us from delivering the final product at all.

Not putting things where they belong

Let’s talk about the fire extinguisher. It was used very early into the round and then left to just roll around on the floor. I can imagine a scenario (maybe from my past 😬) where Ron is sick of running into the extinguisher, so he kicks it to the corner of the room or under the counter somewhere. I don’t think it’s because Ron is a lazy or a bad team member. It’s because when he runs into the extinguisher his arms are already full of ingredients. In order to solve the problem correctly he’d have to stop his current task, find a place to put the food and go pick up the extinguisher. Now, that’s only half of the task. The rest is to determine where to put the extinguisher so David doesn’t yell the next time he goes looking for it. But, the converstation they had a during sprint planning about where to put the extinguisher was never documented. So Ron would have to stop David from doing his work and ask where the dang thing goes.

It takes experience and a real backbone for a developer to know when to tell product/business,

Yes, yes, I know picking up this fire extinguisher is not directly helping put a burger on a plate, but someone is going to get tripped up on this and IT WILL cause issues in the future.

We cannot expect developers to always know when to push back. Some are not experienced enough, others too burned out, and some don’t have any political capital to spend just to fix some tech debt. Putting all of the burden of the developer to push back can lead to more tech debt (i.e. more stuff left on the kitchen floor).

Getting behind on chores — cleaning dishes

Have you ever tried to do a simple task and find yourself doing something totally different 2 hours later because everything you touched needed to be worked on just a little bit. And now your git commit has 95 files 😵. Its not a big deal if you have to clean 1/4 of a dish, but it adds up if thats the 6th extra task you have had to do to get your simple task of plating a burger. THIS IS TECH DEBT.

First time I saw this I cried of laughter, literal tears down my cheeks

This is your chance to have an object lesson with your non techie coworkers. Have them rush to cook a burger and then make sure they have to go cut the tomato, but before they can get the tomato they have to move all the extra ingredients that are left on the lid of the box of tomatoes. Then make sure the cutting board is full of half cut ingredients that are definitely not tomatoes. And once they get all the ingredients make sure there are no clean plates left. At this point you can pause the game and say, see all those seemingly simple extra steps you had to take to get the burger out? Those are short cuts someone in the kitchen took, that later affected how fast you could deliver your burger.

Sometimes you have to drop everything and work on something else. BUT once that something else is done, there NEEDS to be time to go back and figuratively clean up the kitchen. Put ingredients away, throw stuff away that is half cut, pick stuff up off the floor etc... Having a well thought out process for chores, i.e. solving bugs, writing regression tests, investing in CI/CD and refactoring and deleting unused code will greatly improve a team’s speed to deliver features.

Multitasking

Our wanna-be super hero, Ron, loved to multitask. Ron was arguably the worst teammate in our fictitious story. He helped get the first plate out, but after that just slowed everyone else down, and was the reason the third order was never delivered. There are two parties to blame for this wanna-be hero behavior. One is obviously Ron. He needs to know his limits and recognize that over committing not only affects him, but his coworkers as well. The second is the team as a whole. There needs to be a process or a leader who recognizes when someone is trying to be a hero and help them realize being a hero is bad for the individual and for the team. Software development teams are not the place for heroes. Heroes may save the day today, but will lead to bad processes, and bad software.

Another part of multitasking that keeps teams from moving fast is that they are constantly interrupted by tech debt stuff, aka lettuce on the floor. They have to make a conscious decision to say NO and not pick it up because it’s not their current task. Or, they do pick up the lettuce and then forget what their original task was once they find the garbage for the lettuce that was rolling on the floor. Having processes that shield team members from multitasking will greatly increase a team’s effectiveness. Some options are

  • dedicated sprints — devs are expected to say ‘no’ to anything that is not in their sprint. The only stuff that can blow up a sprint is the whole kitchen being on fire.
  • a rotating role — a person is assigned to take care of all the multi tasking items as their first priority. Those items can include replicating bugs, determining impact of bugs, creating issues for real bugs, going to meetings, interfacing with other teams, etc.. The person can always be assigned a smaller task that they can work on if no multitasking needs to be done, but their first priority is to shield the other team members from being distracted.

THE END

Next time you are trying to explain tech debt to your non tech coworkers go play overcooked together, and listen to them scream in frustration. Once they do, you’ll know they understand “tech debt”.

Clean your dishes, pick up those fire extinguishers and thanks for staying!

P.S. this is a great game to test the strength of your relationship with anyone. Forces you to collaborate and communicate.

P.S.S. Part 2 is here!

--

--