A lesson drawn from SevenHabitsOfHighlyEffectivePeople
Suppose you came upon someone in the woods working to saw down a tree. They are exhausted from working for hours. You suggest they take a break to sharpen the saw. They might reply, "I don't have time to sharpen the saw, I'm busy sawing!"
A neat quote in ExtremeProgrammingApplied
- If I had eight hours to chop down a tree, I'd spend six sharpening my axe. -- AbrahamLincoln
Or, as phrased in QuotesOnProgramDevelopment
Unrelated but good
- Foreman: What'cha doin', Louie?
- Louie: I'm sawin' these planks, boss... got a bunch of 'em to do!
- Foreman: Ummmmm, yeah... Louie, I can't tell for sure from this angle but it looks like your saw's kinda dull.
- Louie: Eyes of a hawk, boss... I seen better edges on butter-knives!
- Foreman: Ummmm, yeah... so tell me, Louie, if you don't mind my askin'... why don'cha sharpen the saw, then?
- Louie: Oh, I can't do that now, boss... I'm too busy cuttin' these planks!
- Louis: I've cut this dang board three times an' it's still too short!
In "Seven Habits", SharpenTheSaw
(the seventh habit) is meta-advice for practising the other six. Sure, you read the book. But if you don't practise, you won't perfect.
This problem is unfamiliar to me. But it reminds me of an opposite problem. Spending 15 minutes programming to get a 5-minute-task completed in milliseconds!
What about the fourth time you need to do that task? A heuristic that Works For Me(TM): the second time you have to do something, automate it. This is supported by the ZeroOneInfinity
heuristic, I suppose. A similar heuristic would be ThreeStrikesAndYouAutomate
Reminds me of Everything that happens once can never happen again. But everything that happens twice will surely happen a third time.
. -- PeteKirkham
I do this all the time - because those 15 minutes are fun (and I learn something), and those 5 minutes would've been boring. The 15 minutes
. I mean, when do you know that SharpenTheSaw
is going to pay off?
Of course, the story of Louis, part 2.
At 8 AM sharp, the foreman delivers another load of planks to Louis, and instruct him to saw them. "And remember what I told you yesterday, Louis. SharpenTheSaw
"Right, boss!" And Louis picks up his saw, heads over to the grindstone, and proceeds to start sharpening it.
Lunch hour comes, Louis doesn't join the crew for lunch. Foreman figures he's puttin' in extra hours.
4 PM comes around, foreman goes to check on Louis. The pile of planks is still there, uncut. Louis is still at the grindstone, sharpening his saw, which by now has been whittled away to a nub.
"Whatcha doing, Louis?"
"Sharpening my saw, Boss, jest as you asked. I figger that if I sharpen it for 'nother half an hour, it'll be so good and sharp that I can cut through those planks like butter, an' get the whole pile o' wood done in the last half hour 'fore quittin' time."
The (obvious) moral: Spending all your time sharpening and no time cutting is just as bad as spending all your time cutting and not sharpening. If not worse - on the first day, poor Louis at least got some
of the wood cut.
In the original context, this is probably less common than not 'sharpening' at all. Some people may spend so much time "improving" that they never do any meaningful work, but I think it's far more common that people get so caught up in "getting things done" that they never take the time to become able to get them done better, faster, and more efficiently.
Louis was exhibiting MaliciousCompliance.
And whoever wrote the above anecdote has neither sharpened an actual handsaw nor seen it done; grindstone, indeed! It's done with a pair of files and a specialized bending-pliers called a saw set.
And if you mess up the filing or the bending, you can end up with a saw that's permanently ruined! It takes some time, care, and effort to sharpen each individual tooth of a saw, and it takes a set of carefully made tools.
Sometimes, the reason you need to saw the trees so badly in the first place is to make a toolshed to keep the tools in so they don't rust, so that you can saw enough wood to make the charcoal to smelt the metal to make the tools that sharpen the saw; all because you foolishly told the boss your saw was too dull! :-)
"It takes some time, care, and effort to sharpen each individual tooth of a saw, and it takes a set of carefully made tools."
Hmm. I don't know about that last clause though the first part of the sentence is accurate enough. I've sharpened a hand saw before with nothing but a plain mill file (used on edge) and a pair of pliers. Took the saw from barely functioning to slicing through wood like a saw should.
I've struggled with this, and have a method now that works well for me: make some meaningful forward progress each day on one or more of my tasks as they relate to modifying our codebase. This is essentially what I'm paid to do, so that's the "business value" that you can measure if you want to measure my approach against alternatives.
At the start of the day, I start on the path of getting some real improvement in place. I started keeping a simple journal in text files where I document everything I do, and any thought or idea that crosses my mind. By typing it in the journal, the mind stays clear to keep driving forward. (The journal is primarily for the times that I'm not in "flow".)
At a convenient stopping point, such as getting a set of tests passing, I read back over my journal and identify that thing causing the most pain, which I would most like to automate. First it was building my working branch against the latest working nightly, so that I could have a cronjob do that for me early each morning before I arrive. Once that was in place other areas of pain came to the fore. Now the pain is keeping my eclipse workspace up-to-date with the project, so I'm keen on having my nightly cronjob autogenerate a new eclipse project for me each morning based on that morning's build. Ideally I want to open the editor in the morning and have everything already built, tested and running, and be able to make a quick code change on the project and immediately see the results of that change in the system. When I have that, I'll consider my saw sharp :)
The daily reset is an important part of this. I could spend weeks honing any one of my scripts, but if I've written one good enough that it is no longer a problem, this system helps me stay honest and invest the time elsewhere. And if I'm not sure if something is good enough yet, I'll know tomorrow morning if it worked or not. Code has to be run regularly or it will rot.
"This problem is unfamiliar to me. But it reminds me of an opposite problem. Spending 15 minutes programming to get a 5-minute-task completed in milliseconds!"
That's the "It ain't broke, don't fix it" attitude that directly conflicts with the first habit, Be Proactive. Otherwise, you will address the issue after it is a critical problem; this is incompetent.
The counter-argument is the YouArentGonnaNeedIt pattern; which approach is most appropriate is a judgement call, and ItDepends on the situation.
One benefit to spending those 15 minutes automating the 5-minute task is that the task is now documented, in the code if nothing else. Every place I have worked has had its share of undocumented 5-minute tasks; 15 minutes spent documenting them would be time well spent.
I think SharpenTheSaw
makes for great marketing-speak but is more easily said than done. It may feel good to embrace the idea of "work smarter, not harder", but what if the problem is that we don't know *how* to work smarter? I'd be happy to read HowToSharpenYourSaw
wrote about this, as a recursive problem of Zeno's paradox, on his blog http://blogs.sun.com/jag/entry/sharpen_the_axe_the_dark
. He actually made reference to this WardsWiki