Before you can have a productive day you first need to make a plan for tomorrow and then get a good night’s sleep. The next steps are to 1) wake up early, 2) enter the flow state as quickly as possible, and 3) stay in the flow state.
1) Waking up early
Jocko Willink refers to waking up early as being up before the enemy. In the case of developing software, “the enemy” is every distraction that will rob you of productivity throughout the day. Writing a high volume of high quality software requires that you have no distractions whatsoever. Trying to get a stretch of time with no distractions is impossible once your start working with other people, so you need to wake up earlier than them, and get started working earlier than they do.
Most software teams don’t really get going until around 10am, as our industry is full of late risers (as opposed to, say, the restaurant industry or construction industry). It’s fairly rare to find a software team whose first status meeting is 9am sharp, and generally people don’t start scheduling meetings until around 9:30am. Depending on your commute, starting work around 5:30am gives you a 3 hour edge on everyone else – 3 hours of focused, undisturbed time for you to get work done. Those 3 hours are far more potent than the 3 hours from 9am – 12pm, or 1pm – 4pm, which is where most people try to cram in their productivity. What you do in those 3 hours is focus on what you need to get done. This is your personal time, and you are therefore not obligated to be available to your employer. Therefore, you do not have to be online, available for chat or email, and should target being inaccessible to your team as long as possible.
If you are worried about giving the company more hours than they are paying for, remember this: whomever you work for is just your temporary employer. In this industry, you should be switching jobs every few years to avoid becoming stale and stagnant in your knowledge, skills, and experience. As a result, you need to invest in your career, as jobs will come and go. Getting up early and working for 3 more hours than your colleagues is about investing in yourself and your career – the benefit for your current employer is incidental.
2) Enter the flow state as quickly as possible
Entering the flows state is a crucial skill for writing software, and should be your #1 priority whenever you are writing software. The heightened state of concentration and awareness acts as a force multiplier for the 3 hours you carved off for yourself at the start of your day. While in the flow state, you will easily outperform other developers who never enter the flow state – which is most developers who attempt to be productive during the high distraction hours.
The first challenge with the flow state is entering the flow state. This is the ritual I follow:
- I wake up, usually around 5am
- I re-hydrate (you lose water while you sleep, and dehydration has similar symptoms to fatigue)
- I make a cup of coffee, dialing the strength based on how tired I feel (not tired: Lungo; very tired: French Press)
- While drinking coffee, I start light therapy, using a specialized lamp.
- I spend about 30 minutes waking up, which is usually catching up on the news or learning something new on YouTube.
- After about 30 minutes I grab my laptop and get seated in the big, comfy chair in my living room.
- I start coding.
My tests for if I am in the flow state are follows:
- Am I thinking about anything other than the work I’m currently doing?
- Am I tempted to distract myself with things that are not work related?
- Are things currently distracting me from working?
- How fast am I identifying and resolving problems I encounter?
- How sharp is my memory and recall?
- How effectively am I moving from task-to-task?
- Am I enjoying myself?
- Am I conscious of the passage of time?
By around 6am I’m in the flow state, and usually exit around 9am depending on if I’ve hit a natural stopping point for the work I’m doing. When I’ve had a serious deadline, I’ve pushed that to 2pm (~9 hours in flow state), but that’s very rare, and the pressure has to be pretty intense to demand that level of focus for that long. To date, I can’t recall being in the flow state for longer than that, as my brain just ceases to function efficiently and a pretty nasty headache starts to set in.
3) Stay in the flow state
Considering how difficult it is to stay in the flow state, it would be a great pity if I were to be knocked out of it, and have to spend time re-entering it. The way I maintain the flow state is as follows:
- Email and chat applications are closed.
- Every type of social-media website is closed with browser notifications turned off.
- My phone is either powered-down or in another room such that I can’t hear notifications.
- My wife knows to pretty much ignore that I exist.
- I do not listen to music (there are certain types of work where I allow myself to listen to music, but it’s the exception, not the rule).
- There are no clocks to remind me of what time it is.
- I know my IDE very well, and don’t bounce between multiple applications to get my work done.
- I don’t run the code I write, as I find any compile/build times distracting. Instead I rely on my IDE to tell me to catch code errors.
- I save all of my integration testing until the very end, as it is particularly difficult to maintain the flow state while you are constantly encountering bugs that need to be diagnosed and fixed.
You will need to develop your own rituals and best practices through trial-and-error, as everyone’s situation is different. I would say it took a few years before I mastered my ability to enter and maintain the flow state, so don’t get frustrated as you get started.
I would like to close with an observation I have made of my co-workers who are addicted to social media. Social media addiction is incompatible with the job of being a software developer, and you must break this addiction if you want to be productive. There are many resources on how to break social media addiction, but here is an exercise I might suggest: go backpacking.
Backpacking (going on a multi-day hike with only what you carry on your back) disconnects you from electronic devices (provided you cannot get a signal on your phone) and connects you with the real world – a far healthier form of connection. Before you ask, no – you are not allowed to take along a camera so that you can post photos of your trip on social media when you return. Preferably, you leave your phone in the car.
Depending on your area of the world, you may be able to find a backpacking club with relative ease. If you’ve never backpacked before, you’ll want to take an introductory course, or learn the necessary skills on your own before going on a trip. Initially, do not try it on your own, as you can get yourself into real trouble and may have to be rescued.
If you can’t follow the advice in this article because you are too addicted to social media to allow yourself to enter the flow state, or are too exhausted after being online late into the night to wake up early, then give backpacking a try. If that doesn’t work, then consider seeking professional help. Your mind is your livelihood, and you need to keep it in tip-top condition to reach your full potential. For things are as disheartening as meeting someone bright and full of potential early in their career, only to see them squander their career’s formative years by playing on a phone when they should be working.