Below you’ll find a copy of the original email from Nicholas Zakas, sent to the mailing list. Unfortunately the original link seems to be dead. Hope you might find it interesting as I did.
If you were to ask me what soft skill should software engineers focus on before all others, my answer would be time management. I’ve seen so many good developers struggle at various points in their career through nothing more than time mismanagement. Time is the one non-renewable resource we all share, so managing it properly is key to not just professional success, but also personal success.
To start, most software estimates are wrong, and typically very wrong. We tend to assume the best case scenario (no interruptions, no requirement changes, etc.), underestimate the complexity, underestimate the amount of work, and overestimate our abilities. This can frequently lead to a time crunch, and therefore, a lot of stress. We all do this, which is why it helps to remind yourself to overcorrect your estimates. In general, people are happy when things come in early and angry when they come in late. How do you become better at estimates?
The truth is you will never become better estimates, and once you accept that, you can adjust accordingly. Estimate as you would normally and then multiply that number by two. For short tasks (a day or two), that gives you a pretty good estimate. For anything four days or longer, it’s a good idea to round up to the nearest week; anything two months or longer, round up to the nearest month. Note that you haven’t really become better at your estimate by doing this, you’re just correcting for the fact that your initial estimate was wrong. In all likelihood, this adjusted estimate is also wrong, but hopefully it’s closer to reality.
The other area where developers struggle is deciding what they work on each day. I’ve seen people get distracted by side projects, playing foosball, or other things besides what they should be getting done. Don’t get me wrong, I’m a big believer in taking some time away from work during the day to refresh, but not at the expense of your actual tasks. I once worked with someone who didn’t get any of their tasks done in a given week because they were too busy helping other people with their problems. While very nice, that sort of behavior isn’t a good long-term strategy.
The solution? Every day, put two things on your “to do” list that you must absolutely get done. Make each small enough that there’s a good chance you will get them done (break larger tasks into a series of smaller ones), and prioritize them so you know what to work on first. If you finish both, then the rest of the day you are free to do whatever you want. Or, you can take a break after you finish one and know that you’re halfway to your goal. This is an approach I take whether I’m at work or away: two things I want to accomplish that day.
Effective time management isn’t hard, it just takes some practice. Keep practicing!