Today I brought up a load of laundry. When doing chores, I practice keeping WIP (work in progress) to a minimum. Finish each thing, then do another one. This is good training for code.
For instance, on the way up the stairs with the basket, I saw a tumbleweed of cat hair. I didn’t pick it up. Right now I’m doing laundry.
I put the basket on the bed, pulled out a pair of pants, folded it, and then stopped.
Do I put the pants on the bed and fold the rest? Or do I put the pants away right now, then start the next piece of clothing?
It depends which one thing I’m doing: folding this load of laundry? or putting a piece of clothing in its place?
It’s like in software development. Do we slice work by functionality or by layer?
Feature slicing, where we do all components (front end, back end, database, etc) of one small change and release that before moving on: this is like folding the pants and putting them away before picking up another item.
Layered work, where we first make the whole database schema, then develop the back end, then create the front end: this is like folding all the clothes and then putting them all away.
Pants on the bed are WIP. When clothes are on the bed, the cat sits on them and I can’t put them away. Then when I want to nap, my bed still has clothes on it. WIP is liability, not value. I can’t access my bed, and no one has clean pants.
Yet, folding the laundry and then putting it away is more efficient. I might fold three pairs of pants, and then put them away all at once. Four towels, one trip to the bathroom closet. The process as a whole is faster and smoother (excluding the cats).
Is layered work more efficient in software? NO. It always takes far longer, with worse results. A lot of rework happens, and then we settle for something that isn’t super slick.
Why is laundry different?
Because I’ve folded and put away this same pair of pants many times before. On the same shelf. Household chores are rarely a discovery process.
If I hadn’t done this before, then I might fold all of Evelyn’s pants in fourths. That is standard practice, and my pants fit nicely in my cabinet that way. When I go to put Evelyn’s pants away, I’d find that her shelf is deeper. It’s just right for pants folded in thirds. Folded in fourths, they don’t all fit; I run out of height.
Now it’s time for rework: fold all her pants again, in thirds this time.
With feature slicing, I would fold one pair of pants in fourths, put it on the shelf, notice that it doesn’t fit well, refold it in thirds, and find that it fits perfectly. Every subsequent pair of her pants, I’d fold in thirds to begin with.
Completing a thin feature slice brings learning back to all future feature slices.
For repetitive chores, we can choose efficiency. For new work, such as all software development, aim for learning. That will make us fast.