Have you ever felt the conflict of what you knew was the “right thing” to do, but were faced with a reality that was diametrically opposed to that standard? During a team teleconference today at work, my project manager reluctantly told the client, “I guess we’ll start into development, even though the designs aren’t done.” The reason for this apparent breach of best practice was that our project deadlines were so short that we had to get started or we would never finish on time. Something inside me rose up in conflict; these kind of decisions usually seem like “taking a shortcut” that ends up being the longer road. Most software development methodology assumes that you shouldn’t build something until the design is complete. This is all based on managing the risk that you might build the wrong thing, especially if the design is incomplete or unclear.
Rigidity vs Flexibility
However, those tight deadlines are real. If we don’t deliver this software project on time, not only will our project fail, the client will be faced with serious financial, organizational, and political problems. That’s the reality we face. Yet the risk is that we could delay the project even more by “taking a wrong turn” due to a misunderstood design, or worse, completely wreck the entire project by delivering the wrong thing. The standards and best practices dictate that we stop everything in order to get clarity. But reality interjects that it will be impossible to meet the goal if we don’t start now. In either case, it seems there’s no good answer.
What do you do in these situations? Having been taught by my management that “the standard is the shortcut”, my tendency is to hold rigidly to the best practice. But perhaps there are cases that call for flexibility, especially in times of trouble. We can see an analogous picture in nature – palm trees are designed to bend in the high winds of a hurricane. Standing firm and rigid would only result in them snapping in two. And perhaps that kind of flexibility is what is needed here. Alongside that flexibility is the need for creativity – to approach the situation with an entirely new perspective.
One way to do this is to get regular rest, and to step away from the work for a while. I’ve been following the recommendation from Cal Newport’s excellent book, Deep Work, where he suggest “shutting down” from work every night in order to rest and recharge. It’s been a great experience. Although I don’t (yet) have any specific examples of my brain “solving problems” in my sleep or while I’m at home, I’ve found it enables greater rest at home with my family, plus I feel like each day is truly a “fresh start”.
Perhaps the more important way I face this kind of situation is with my faith. I believe in a God who is in control of everything (Isaiah 45:7), a God who has infinite wisdom for every situation (Daniel 2:20-21) – including software development problems, and who has my good in mind (Jeremiah 29:11). My God can do miracles, even in my projects at the office. And I’m looking forward to seeing how He works this situation out, in a way that will help me trust Him more, while bringing Him the most glory and praise.