The first step is to admit you have a problem. In such, I will not be offering any solutions in this post.
Boarding a flight is a deadline that I don’t want to miss. In fact, I’ve never missed an airplane in my entire life.
I like to leave home very early and arrive to the airport way ahead of time, unlike other people who are happy to make the airplane and hundreds of passengers wait for them. I believe that my stress is born out of the fear that the plane will take off without me. I am afraid of those annoyances that may follow.
Software development deadlines are just like catching a flight. I use an identical approach for being “on time” for both, inspired by the legendary Swiss precision. I divide the problem in two equal chunks. To catch a flight I must get to the airport and then go through check-in and security. To deliver a software component I must design and then implement it. The flying analogy is a bit easier – let’s say I have two hours to get to the airport and it’s 7AM - I have to arrive to the JFK at 8 and the flight boards at 9. Continuing the recursion, the cab must cross the Midtown tunnel at 7:30. Going through security must happen at 8:30. It takes 15 minutes for a cab to get to the tunnel, so I have 7 and a half minutes to walk out of the house and 7 and a half minutes to catch a cab. 3 minutes and 45 seconds to get a coffee and 3 minutes and 45 seconds to get dressed. If the coffee takes longer than its allocated time, I begin to stress. I have to constantly unwind the stack and re-divide and conquer the new available time. By the time I am in a cab, I am sweating.
There’re two kinds of deadlines: those that we set for ourselves and those that others set for us. I believe most software deadlines are self-inflicted and unnecessary. While some will claim deadlines help you focus, they just stress me out.