TL;DR I love my job, I love my career, I love solving hard problems, and I love crafting great software. Just not as much as a I love my daughter.
When I was younger, i was one of the developers who would get to work early, code all day, leave the office after everybody else, and then get back online and code at night. It didn’t matter what I was coding on, I just wanted to be coding. Then a funny thing happened. My wife and I had a baby.
When I found out that Jen was pregnant I was ecstatic. Not only because getting to that point was a difficult process, but because I have always known that I wanted children. I wanted to be a father. No, I wanted to be a great father. I made a promise to myself and my unborn child that I would, at the very least, be a father who was present, and around, and available.
At this point you may be thinking “How is that going to work? The caffeine-fueled, crunch-time, death march prone careers of developers don’t exactly jive with being home for dinner.” This is true. For me this came down to priorities and a simple realization: If you screw up at your job you can always get another one, but if you screw up your family, especially your relationship with your children, it will stay with you and stay screwed up forever.
So I made the choice that I would be home to spend time with my daughter everyday, even if it was going to adversely affect my career. So I get to the office around 6:30-6:45am every day, I put in about 9 solid hours of work, and I take off to head home around 4pm. The hours between 4:30 and 7:30pm are sacred. They belong to my daughter. The hardest part about this is that I work with a lot of people on the west coast (who, as a function of culture tend to start their days later) and its very natural for them to schedule meetings at 2pm or 3pm PST. This directly conflicts with the time I have set aside for playing with my daughter, so I try to reschedule or decline most of these meetings. Of course, I try to be pragmatic and if something incredibly important comes up on the job I will be here, no matter what the time. The bar is pretty high though, and the reason for that goes back to my earlier realization. Once my daughter is in bed I am free to spend time with my wife, code on something else, or work if its necessary. Calling into an 8pm or 9pm meeting with west-coast teams is not unheard of.
At first I had a lot of guilt about leaving my comrades behind to suffer during hard times. That was reinforced during my performance appraisal when one of the pieces of feedback I got through our peer review process was that as a team leader, it would be nice if i was around when the team had to stay late. But if you look at the breakdown of my time, I spend 9+ hours working each day, and only 3 with my daughter. If that’s unfair to anyone, its unfair to my daughter.
By doing this I’ve actually discovered that I can be more productive when I get away from the code for a while. I drive home, play with my daughter, eat dinner, bathe her, read her books, and put her to bed. All this time my brain is still spinning. My subconscious is still tossing problems around and searching for solutions. There is plenty of research that shows the benefits of taking breaks from hard problems if you want to solve them. Plus, few things keep you on your toes like playing with a precocious two year old.
Sure, I don’t pump out the same sheer volume of code that I used to partly because these days I spend more time mentoring, but also because the lines of code I do write are better.)
Another ancillary benefit I discovered is that I don’t feel as burned out. Death marches and late nights take a lot out of you. As a result you . Nowadays I come into the office energized with my thoughts organized and ready to put in solid hours at work. When you work crazy hours you yo-yo between 20 hour days and 8 hour days that really only have a few hours of productivity (or none at all!) Decision making suffers when you are overtired, and you fall behind on everything else outside of your job that needs to get done. To make matters worse, this trend is self-amplifying. You go crazy trying to finish one project because the demands were unreasonable or it was poorly scheduled or estimated (or other legitimate stuff came up, but schedule didn’t budge) and so you necessarily go easy at the beginning of the next cycle or project because you are burned out. This causes you to fall behind and dooms you to another round of late nights and misery.
Even if you don’t have a great reason like I did, kick the death marches to the curb. You may even find that prioritizing a few hours to spend on some worthy pursuit outside of work will make you even better at your job. While you’re at it, pick up a copy of Rework from the guys at 37signals. It covers a lot of this stuff.
Update 9/15/2011 8:20pm
Some great discussion on my post on Hacker News too: http://news.ycombinator.com/item?id=3001783