When it comes to shaving, I’m very old-school: I prefer to use a traditional manual razor rather than an electric razor. I get better results, but it definitely requires me to pay more attention and take a bit more care.
Every now and then, when I’m running late to get out of the house, I end up having to shave in a hurry. After many painful lessons, I’ve learned that there are two ways to do this: a wrong way and a right way.
1) I can focus entirely on getting out of the house on time and blast full speed ahead through the task, shaving as fast as possible with the only goal being to meet the deadline. This doesn’t usually end well. For the easy parts where I don’t have to think at all, everything goes well and I breeze along, making progress at a rapid clip. The hard parts are a different story — those always come out nicked and cut and bleeding, ultimately causing me to spend even more time to stop the bleeding before I can leave the house and often making me even later.
2) Alternatively, I can still focus almost all my energy on getting out of the house, and I can still blast through the easy parts. However, when it comes to the hard parts, I’ve learned that if I back off just a tiny bit, going almost as fast as possible but spending a little bit of time thinking about how best to do the task, I manage to finish flawlessly, with no nicks or cuts or bleeding. Even though I spend slightly more time working on the task, the end result is much better, doesn’t require any fixing later, and I still meet my deadline.
Software development sometimes seems like a never ending series of “shave in a hurry” episodes. Deadlines are always aggressive or seemingly unrealistic, but that’s just the nature of the beast. Too often, especially early in our careers, we take the approach of focusing only on the deadline — frantically rushing through as fast as possible to get the job done, pounding away on the keyboard, taking no time to stop and think about what we’re doing. Meanwhile, we have a growing feeling that we are adding “technical debt” to be cleaned up later. Just like that too-rapid shave, our software ends up nicked and bloody, with code staring back at us from the glass asking “Why did you do this to me??”
And just like with shaving, there is a better way. We can still race to meet the deadline and yet slow down just enough to make sure we’re doing things the right way. It doesn’t need to be the best way, it doesn’t need to be perfect, it doesn’t need to be the absolute best architecture — we are under a tight deadline, after all. But we need to make sure that we are not delivering buggy code or a horrible design or an app with a fatal flaw — that we’re not making too many nicks and cuts that will need to be patched up later. Even when facing an overwhelming deadline, taking the time to think is more likely to help actually meet that deadline, and to deliver a quality system that won’t need a huge surge of effort right after delivery to fix bugs introduced in excessive haste.
Delivering quality software is indeed like shaving in a hurry: you can do it fast, but with some care and thoughtfulness, everything will come out looking great.