The balance between doing and improving – evaluating yak-shaving
Posted: - Modified: | emacs, learning… I came to realize that many Emacs users seem to spend a great deal of time learning about Emacs, tweaking it, and writing new extensions, rather than getting non-Emacs-related work done. Sometimes it feels as though heavy Emacs users actually get less done overall, if you consider only non-Emacs-related tasks. My question is, is it possible to get work done in Emacs, without most of that work being Emacs-related?
It got me thinking about skills or tools that can be used to improve themselves, and the balance between using and improving tools.
Not all skills or tools can be used to improve themselves. I'm learning how to sew, but that doesn't lead to making my sewing machine better (aside from fiddling with the dials).
Here are some skills that can be used reflexively:
- Philosophy asks questions about good questions to ask
- Learning about learning helps you learn more effectively
- Woodworkers and machinists have a tradition of making their own tools
- 3D printers can print parts for their own models
- You can program tools to help you program better: testing, version control, project management, etc.
Although making your own tools takes time, here are some advantages of doing so instead of buying them off the shelf:
- You understand the internals better, and you can appreciate the subtleties
- You can customize it to fit the way you work
- You can create different variants for greater flexibility. Mass customization can't anticipate or cost-effectively provide all the different types of things people may want.
- As your skills and needs increase, you can create better and better tools for yourself.
Many programmers spend time deliberately improving their toolkits; if they don't, they stagnate. At the basic level, people try programs or frameworks that other people have created. The next level might be scripting things to work together. A third level might be writing customizations or extensions, and a fourth level might be creating entirely new tools or frameworks. Beginner programmers might start at the first level of reusing other people's code, but wizardly performance often involves a mix of the other levels.
So the question is: How can we balance doing things and improving things?
No one can answer this for you.
Me, I tend to avoid hard deadlines and I do things faster than people expect them to be done, so I have plenty of leeway to improve my tools – which helps me be even more effective, so it's a virtuous cycle.
You'll need to find your own balance. You might get urgent stuff out of the way first, and then figure out how to balance smaller requests with investing in capabilities.
Here's something I put together to help you figure out where you might be in terms of balance. Alternatively, if you're thinking about whether to pick up a skill or tool that can be used to improve itself, you can use this to evaluate what you read from people sharing their experiences with the tool. Can they find a good balance for themselves, or are they frustrated by the challenges of getting something to work?
- "I have what I need in order to work." This is the basic scenario. People focus on doing things instead of improving things.
- "I can keep pushing, but performance is dropping, so I should invest time in maintenance." It's like the way a knife or a saw dulls over time. When you notice diminishing returns, it might be good to invest some time in maintenance. It's not an urgent need, but it can pay off.
- "I'd better take care of this now before it becomes a problem." This is like maintaining a car or taking care of your health. A little time now can avoid big problems later.
- "Grr, it's broken. I have to fix it before I can work." If you let things go for too long, or if you're working with something finicky, you'll be forced into maintenance mode. For example, some 3D printers require a lot of fiddling. Watch out for this scenario.
- "It's fine the way it is, but I know I can make it better." The way you're currently doing things is okay, but you know (from your experience or from what you've read of other people) that you can invest a little time to work more effectively. You might even know the return on investment. It's easy to decide whether you should just go ahead with the status quo or invest the time in improving.
- "It's fine the way it is, but I think I can make it better." The way you're currently doing things is okay, but you have some ideas that might make it even better. If you think those ideas might be worth it, it might be good to give yourself a time limit for exploring those ideas so that you don't get distracted. Alternatively, you can save it for a slower time.
- "I'm waiting or stuck, so I might as well work on tools." Maybe you're waiting for feedback from someone else. Maybe you're waiting for programs to compile or tests to pass. Why not spend a little time exploring how to make your tools a little better?
- "I'm doing this for fun/learning." Tool improvement can become more enjoyable than some of the other ways you used to like spending time. For example, you might find yourself wanting to watch a screencast or try out a tweak instead of watching TV or browsing random sites on the Internet. You don't have to completely replace other activities, you just have to shift a little time from things that have less value to you.
- "I can't write about my actual work, but I can write about this." If you're wondering about yak-shaving propensity based on the blog posts you're reading, consider: do people write about their improvements instead of the work that they're doing because their work is confidential or hard to explain? Maybe they think blog posts about improvements are more interesting. Maybe they're writing about improvements in the process of figuring things out (which in an excellent process, by the way). All these things can skew your perception of how much time people spend doing things versus improving things, and how much they accomplish within that time.
In terms of Emacs, these things mostly apply to me:
- "I'm doing this for fun/learning" – Emacs tickles my brain, and the community is wonderful.
- "I can't write about my actual work, but I can write about this" – I suppose I could write more about the other stuff I'm interested in (sewing? cooking?), so there's that. However, the consulting stuff is covered by agreements, and that's a small fraction of my life anyway.
I assume other geeks are rational, especially if they have a lot of experience with it and other tools. Therefore, if people spend time tweaking (while avoiding the consequences of low performance), I assume it's because they see the value of doing so (whether the pay-off is certain or not). On the surface, an effective person's behaviour might resemble an ineffective person's behaviour – six hours sharpening the saw for two hours of work, or six hours procrastinating and two hours of cramming? But if you look at:
- if they get stuff done
- whether other people are happy with their performance, or if they generally appear successful in their endeavours
- how happy they are about the process
then you can get a better idea of whether it's working for them.
As you think about your own balance or read other people's blogs, can you identify what scenarios you and other people might resonate with? Am I missing any that I should add to the list? Please comment below!