Running your own business as an independent consultant can be stressful. There's always more that you should be doing. Besides working directly for your clients, you should also be improving your skills, pursuing new business, blogging and reading blogs (especially on TechRepublic), and taking care of business matters. It's easy to schedule 100% of your time for each of these areas. I may not be a math wizard, but that adds up to a big pile of stress.
On Zen Habits' list of 17 ways to create a peaceful, relaxed workday, #1 is "Do less" -- and #9 is "Cut back on your commitments." Sage advice, but how do you do it? You need to get all those things done, don't you? Well, maybe not.
I find that there's a sweet spot between the extremes of (a) having so much work piled up that I end up doing none of it, and (b) not having enough work to pay the bills. In that optimal middle zone, I spend the whole day doing work that's challenging and interesting, and I reach the end of the day with a real sense of accomplishment -- even if I'm not completely finished with the tasks I began. I'd be happy to tell you that's how most of my days go, but I'd be lying. I usually end the day by saying "It's 6 P.M. already? How did I work all day and get so little done?"
So how do you achieve that perfect balance? Surprisingly, the problem is not the amount of work you have on your plate -- it's the expectations that you've attached to it. We software developers, especially the good ones, are notoriously optimistic about how long it takes to complete a project. The bigger the project, the worse our estimate is likely to be. But in a business like mine it's all the little projects that stack up and sour my sense of accomplishment, because I'm so tempted to discount them completely. "Oh, that won't take long, I'll squeeze it in somewhere," I'm likely to mutter to myself -- not realizing that the majority of things on my to-do list are little things like this that I agreed to "squeeze in" while the big projects make very little progress and seem to hang around for ages. As Reg says, "If they happen frequently, they aren’t exceptions: The way you handle them is your business as usual."
Step one, then, is to change "business as usual." Nothing gets magically accomplished without taking any of your time, so you're deceiving your client and yourself if you say that it will. Treat each project, however small, as something that takes up space on the calendar. You may be able to split time with another project, but you must recognize that this will extend both projects. Even if you have periods of time when you're waiting for something to complete (a full build, for instance), shifting your focus from one project to another wastes a lot of time. "Squeezing in" something else just inflates your overall schedule.
Step two: Don't give estimates. I'm serious on this one. Just say no. It takes as long as it takes. If your client cannot function without an estimate, make sure it's outrageously padded. Chances are, even that won't be enough. Remember Hofstadter's Rule:
Everything takes longer than you expect, even when you take Hofstadter's rule into account.
If your client says, "But we need it by <insert rabid-pit-bull-aggressive date here>," don't say "OK" or "I'll try" or anything else to create a false expectation. I only see two possible answers here: "No," or "What parts of this project can be left for a follow-on release?" Asking for additional bodies probably won't help.
Step three: If your work day is nine hours long, don't expect to put in nine billable hours every day. Seven on a good day. Mode: six. Mean: five. Don't beat yourself up when you don't do more than that -- but your scheduling and your rate need to take it into account.
Step four: Try to create wide periods of time to get into the zone and stay in it, so you can actually complete something. During these periods, you must completely eliminate interruptions. Don't answer the phone. Don't read e-mail. Don't chat. You don't have to be actively designing, coding or debugging all this time, though. Sometimes you may need to just sit and stare out the window to think through a problem -- but don't get distracted with something else.
Step five: Now that you have a reasonable expectation of how much you can get done in a day, you're ready to decide which things get done today. If you can check those off, you've accomplished enough. If you finish those early and get something else done, too, then you can sign off for the day, elated.
Chip Camden has been programming since 1978, and he's still not done. An independent consultant since 1991, Chip specializes in software development tools, languages, and migration to new technology. Besides writing for TechRepublic's IT Consultant blog, he also contributes to [Geeks Are Sexy] Technology News and his two personal blogs, Chip's Quips and Chip's Tips for Developers.