Smart People Quit, They Don't Give Up - A Software Development Story
In his 2007 book “The Dip” Seth Godin writes that “Smart people quit all the time..” what they don’t do is give up on a strategy. The idea is that while you pursue a worthy goal (strategy), you need to remain flexible in your approach (tactics).
Though the book is primarily targeted at entrepreneurs, it contains a lot of wisdom about the journey from mediocrity to excellence. The Dip is a perfect metaphor for everything from your career to individual problems you may tackle.
To explain the dip in this context think about the hardest problem you’ve had to solve in your career. How long did it take? Did you have the inevitable “I’m never going to solve this” moment of dread? Did you abandon the effort, or did you double down and see it to completion? How did you feel when you finally solved it.
That’s the dip, as it applies to development. Everyone goes through it. Junior developers, senior developers, full stack, it doesn’t matter. EVERYONE ENCOUNTERS THE DIP!
Though everyone encounters the dip, they do not handle it the same. Inexperienced developers may give up to quickly, others may conduct a hasty StackOverflow search and go with the first, best option. Smart developers walk away. They quit.
I don’t mean that they quit their jobs. They may not even quit the code they are writing. Instead they abandon the immediate tactic that is blocking progress.
Development is knowledge work and as such doesn’t play by the same rules and sales or founding a start-up. In the latter you’ll often find the “buckle down” or “grind it out” mentality. While it can be useful for banging out repeatable tasks or powering through the inevitable rejection of potential clients, it is absolutely destructive to knowledge work.
Cognitively you only have so many “good” hours a day. Maybe you a morning person, or perhaps you are a night owl. Regardless you only have so much “gas in the tank” when it comes to problem solving. Press beyond the threshold, start running on fumes and every hour you spend grinding it out is a wasted hour of partial productivity. You will make mistakes, often mistakes that will actually set you back rather than move you closer to your goal.
That is why knowing when to quit is important. But how do you know? For everyday development you can utilize pomodoro timers, or pace along with your favorite 40-50 minute podcast. While that will work most of the time it does not apply to the dip.
The dip is deep, the dip is long. You know you are in the dip one of two ways. You will either be filled with existential dread or find yourself so fixated on the problem that you hit multiple resets on the timer.
It may feel like flow, but it is not. It’s you hammering on a problem until you are so mentally exhausted that you can’t recover. Pack your stuff and go home, you are done for the day.
In a culture that idolizes grit and grind it can be hard to talk yourself out of overfocusing on a problem. While you will never get this day, or any day, back you can make the most of the day you have. You do this by working less and accomplishing more. You achieve more by maximizing usage of your good cognitive hours.
To do this you need to quit, or rather have the discipline to quit. You need to get up from your keyboard, walk away, do something or think about something else. Sometimes the answer will come quickly, other times you might need to sleep on it. Either way the answer or a new tactic will come to you. Try it. This might be the one that sticks.
You also need to have the discipline to guard your productive hours. If you are at your peak in the morning don’t schedule a bunch of meetings or calls. Guard your time, work in small chunks of time and take breaks. Then when you feel your productivity begins to wane, walk away. Most of all don’t spend your precious mental hours hammering on a problem just because.
Recognizing the dip and avoiding it is a skill that must be learned and practiced. In my opinion it will make you a better developer and more importantly help you avoid career burn out. It will also make you a happier coder, and hopefully provide more satisfaction in your daily life.