Last night, I spent 2 hours working on a new technique for crocheting a hat. The technique creates a stitch that looks like it was knitted. I had only practiced this technique once, but I set out to create a hat anyways.
It was going to be a fun project! A new stitch technique, with a new crochet hook… and a new hat that I would be able to wear, and enjoy more!
All The Effort. All The Problems.
After two hours, I found myself with this:
I don’t know if this picture shows it well enough, but this is a mess.
The beginning is too loose. The middle is nice and even, but the edges are all kinds of janky… and the end of it? Well, I tried to “fix” it by re-adjusting how loose the stitches were. That was a mistake in itself.
So what do I do in this situation?
As a some-what crafty person, I know the right answer: unravel it and start over.
As a software developer, I find we often fall prey to the “sunk cost” mentality. Typically this doesn’t come from the developers – at least, not at first. More often, I’ve found that management hits this first.
They see the work that has been done. They know the time and effort that has gone into it. They also know the problems that the software and system currently have, and will continue to have with the existing design.
All that time and effort makes the management team unwilling to unravel the mess, however. They see the existing effort and code as the way it must be, because they have already spent so much money (through your efforts) putting this mess together.
It’s easy for developers to fall into this mentality, as well. I think for the most part, developers see the mess and want to clean it up. But after years of being told that they are not allowed to clean it up, they start to see their own work as a sunk cost as well. They have already spent their time and effort on this pile of junk, and now they have to live with it.
Unravel Your Work …
In my crochet effort, I almost immediately knew that I was going to have problems. It only took me about 15 minutes to see that I had made this patch of cloth too wide. But I thought I could deal with that later – being too wide was a problem, but wasn’t one that required me to undo things.
I had a bad feeling about it, though… I didn’t like it. But I pushed on, thinking I should just get it finished and not worry about it.
Then, about 1.5 hours into the work, I noticed that the beginning of it was much more loose than the end. Rather than stopping, I continued on. I thought I would be able to adjust the work from where I was and have it work out in the end (albeit, with a small section of “tight” stitches in the middle).
It wasn’t until the 2 hour mark, after I had gone to do something else for a few minutes and then come back, that I saw just how bad the situation was.
The crafty-side of the brain that wants things to be closer to perfect than not, finally kicked in. I recognized that I had fallen victim to my own sunk-cost mentality.
I immediately unravelled the entire thing.
Small Fixes A Worth Their Weight
Not all problems require an immediate unravel, or a catastrophic “select-all”, “delete” solution.
Many design errors can be fixed. Software is “soft” while we are working on it. It is a malleable substance that we form and shape and work until it looks correct. Sometimes we let the shape harden more than we should, by ignoring the early warning signs of problems. Sometimes it does take a fair amount of effort to fix the problems, or to even find a solution to the problem.
Not all problems are catastrophic.
Don’t Be Afraid
But when we see a major flaw in the over-all design, and we ignore it… when you know that the shape of this code is too wide… and when you see that you’ve over-corrected and made the middle section too narrow and tight… when you try to re-adjust, moving forward, and you find yourself trying not to look at that other part that you know is full of problems…
Don’t be afraid to unravel your work.
But do it as early as possible, while the modeling clay is still soft and malleable.