Why Software Development

is Exactly Like Washing Dishes

I’ve been washing dishes a lot lately.

I have a family of six human beings, five of which are constantly eating off of dishes. The youngest, six months as of this writing, usually eats straight from the package.

This morning I woke to a sink full of dirty dishes, and a stack of rinsed but not cleaned dishes next to the sink. Fortunately the dishwasher had been emptied and was ready to start accepting dishes into its wire belly.

I began the process by sorting through the dishes in the sink, stacking them into like pieces beside the sink. Now I have a stack of unclean, but sorted dishes. Each dish must be rinsed and wiped or scrubbed, taking a different amount of time to pre-clean before I can place it in the dishwasher.

I know I can’t fit all of the dishes into the dishwasher, so I prioritize which ones my family may need first. I put those in, working down the priority list. I make sure there are a few of each kind of dish to cover the majority of needs.

Once the dishwasher is full I have to run it. I can’t fit any more into the dishwasher until the cycle is complete and I store the dishes into their homes sat in cupboards and drawers.

I still have a small, sorted stack of dishes that didn’t fit in the dishwasher. I pre-clean each one taking into consideration their priority for the next load of dishes.

I wipe up the mess of water and soap I’ve made.

Tomorrow I’ll have another load of dishes in the sink, some returned because they weren’t cleaned properly, some are newly dirty, others are new dishes that must be cleaned before we use them for the first time.

It’s a cycle.