On paper, software and web development is a structured, orderly process.

But developing IRL? It's mostly chaos:

Technical decisions, new stacks, social notifications, shoulder taps, calls, meetings, family duty, GIFs... SLACK!

try{ Work(); } catch(ChaosOverloadException ex){ Logger.LogFatal("(╯°□°）╯︵ ┻━┻ ", ex); Tables.FlipAllOfThem(); }

No wonder maintaining developer productivity is an everyday struggle.

Believe me, I know: it's a major pain point in our dev team's day-to-day.

So I decided to try and do write something about it.

Hopefully that something—let's get fancy and call it a "Guide to Developer Productivity"—will help us and other devs strive towards healthy productivity.

This post will cover 5 dev productivity habits with relevant tools for developers to help you follow each one.

There's money, energy and maybe tears to be saved in what follows.

Shall we?

5 developer productivity habits + useful tools

Quick links

Unproductive development time is costly to 1) yourself and 2) your clients.

Stack up too much of it and it might jeopardize self-esteem, motivation, professional relationships and your own money.

So, how to fix?

1. Tailor your own, strict schedule (if possible)

The beauty of programming is you can do it pretty much anywhere, at any time. 9 to 5, on-premise schedules are becoming more obsolete by the day.

The other side of that coin? It's easy to slip into the "I can do this whenever/later" mindset. Installing positive constraints will help you structure and optimize your development time.

Before you go blocking random chunks of time in your Google Cal, pause for a sec, and ask yourself:

When CAN I work?

Me, for instance? I can't do night shifts. I can't work before 8 AM. I can't work during personal appointments. Already, this clears up my schedule and highlights potential work periods.

When am I the most productive?

For instance, I know that 1/2 day of solitary, focused coffee shop work time during weekends works wonders for me. I also know that past 8 PM, I just can't focus.

Where am I the most productive?

If, like most developers, you have the luxury to work from anywhere, this question is key. For evening crunches, I like my apartment w/ music on. Weekend stretches? Bustling coffee shops. But weekly mornings? The office is perfect.

Once you know when you can work, when you're the most productive, and where, then you can build a strict, custom schedule for yourself.

Keep in mind though, that everyone is different, and your peak hours may not be the same as a peer of yours. Some coders are early birds who can rise before the sun and get a stack of debugging done while most people are still reaching for their morning coffee. Other night owl-types can bang out code well into the night when everyone else has happily retired under the duvet.

And if you don't know? Well, experiment + iterate! There are some very easy to employ techniques to figure out what time of day your brain will be best equipped to churn out, review, and test code.

Another positive constraint to consider adding is filling the rest of your free time with activities you enjoy doing (sports, entertainment, personal projects, social outings, etc.). The notion of missing or canceling them will act as a motivator to be productive inside your set schedule.

1.1 Identify clear daily to-dos

Once you've got a determined period of work, associate realistic to-dos to it. I do this on a daily basis, since startup agility often means "sh*t happens". But you could very well do it on a weekly basis.

Starting the day by writing down what I want to get done and ending it by writing down what I actually did helps me adjust the realism of my daily to-dos. This way, you can progressively remove personal disappointment by better understanding your output ratio.

Productivity tools for schedule & to-dos

→ Google Calendar

→ Pivotal Tracker / Jira / Trello (depending on your project scope)

→ Todoist

→ Momentum Chrome extension

→ Toggl—special shoutout to their awesome blog.

→ Pomodoro apps

→ Post-its!

2. Write intelligible, easily testable code

Even simple sites/apps can seem like mammoth undertakings.

However, like any other project, development should be approached from a structured viewpoint: breaking the task down into smaller units is the way to go.

Keep in mind that your code will likely need, at some point, to be worked on or improved upon by a human being. So, whether for your future self or a peer, write code with a clear, easily decipherable structure. I solemnly swear that thorough testing will save you, your team, and your clients precious time later on.

Some pro tips from our team:

Consider doing Test Driven Development (TDD) —it saves time! Writing tests for your code first forces you to think about edge cases to test, thus uncovering unexpected issues right away.

Use component mocking and fake data . This is used in unit testing in general, but crucial to TDD, since implementations of UUT (Unit Under Test) dependencies likely do not exist yet.

Focus on very few code components at a time. It'll make each of them more robust/maintainable. Plus, it'll force you to organize interacting units logically and craft single responsibility components. Result? More maintainable projects!

Productivity tools for testable code

→ Continuous testing tools or extensions (like NCrunch for .NET for instance)

→ Continuous integration solutions (like Travis CI, AppVeyor, Jenkins)

→ JavaScript test frameworks (like Mocha, Chai, Jest)

→ Our favorite for JS E2E testing: Cypress.io!

These are tools every programmer should have and, eventually, master. :)

3. Kill (okay... "reduce") distractions

Slack & chat

Let's begin with the elephant in the room: Slack.

This might not be news to most, but Slack isn't helping your productivity, amigos!

Derrick Reimer, Drip co-founder and author of the linked manifesto above, puts it best:

The problem is that today’s chat tools are amplifying the troublesome parts of human nature, rather than minimizing them.

We are impatient.

We feel anxiety for “unread” badges.

We are addicted to push notifications

We think things are more urgent than they really are.

We care about our team’s perceptions and don’t want to look like we’re slacking off.

Again, how to fix? There is no silver bullet here. But here are a few tips:

Use Do Not Disturb mode on Slack for periods of deep focus.

Always use DMs for 1-1 conversations.

Encourage peers to 1) strictly stay on topic in dedicated channels, 2) limit their keystrokes 3) use @ mentions for people actively concerned by discussion.

Use asynchronous communications WHENEVER possible (comments/notes in project management tools or support tools). Intercom is great for that!

Email & social media

Checking email constantly is nocive to productivity. Similarly to chat, it creates a false sense of urgency and reciprocity.

So, going back to your strict schedule: simply lock 2-3 reasonable chunks of time in a week for email. Over time, this will teach correspondents that you're not a 24/7 support center. Their expectations will adjust to a more healthy async communications rhythm. You can do the same with chat, BTW!

Keeping social notifications at bay is rather straightforward:

Create a different session in Chrome for work where you're signed out of all social platforms.

Turn your mobile off, or on silent with only critical calls/numbers allowed (Do Not Disturb settings on Android/iOS). If possible, put it physically out of reach.

Consider using site blockers [see below].

Productivity tools to avoid distractions

→ Missive app—an elegant hybrid between email, chat, and support.

→ StayFocusd Chrome extension

→ WasteNoTime browser extension

→ RescueTime time management app

4. Don't be afraid to ask for help

The whole open source ethos is about collaboration and transparency. Working in a silo won't cut it, and will cost you precious time.

Plus, chances are, no matter what difficulty you're having, someone else has already encountered and fixed it. Granted, that doesn't mean you should just mindlessly copy-n-paste code, but taking time to research, analyze, and appropriately incorporate a solution someone else has already developed can pay off big time.

Productivity tools for dev collaboration

→ Google

→ StackOverflow

→ GitHub issues

→ Slack

→ Comments function in project management tools

→ Tool-specific technical support & documentation

5. Take care of your mental health

Overtime, missed deadlines, in-production bugs, angry clients, arguments... this stuff takes a toll.

Not to mention world news, personal issues, and conspiracy theories.

Jokes aside, to me, that's honestly the most important habit of them all. I've been through some rough patches last year, and it became clear that once mental health breaks down, nothing good can come out, professionally or personally. And yes, that KILLS productivity.

It's so easy to dismiss these issues as they're not always physically visible. But keeping that brain of yours healthy is a must.

The following will benefit your life holistically, not just your developer life. :)

Life hygiene

Get plenty of exercise

According to some medical authorities, not exercising is as deleterious to your health as smoking tobacco. And physical exercise benefits abound:

Enhanced capacity to learn

Improved memory retention

Heightened creativity

Extended cerebral stamina

Eat well & drink water all the time (seriously, do it)

As with exercise, most working adults rarely eat well either and this too has a drastic effect on productivity. Fattening, carb-laden, and processed foods of all types can severely stunt how much work you churn out.

Remember that structured schedule with daily to-dos? Why not put time for meal planning, cooking and eating in there, heh?

As for drinking water, well, it 1) flushes out toxins, 2) relieves headaches & fatigue, 3) boosts your energy & immune system. Do it!

Sleep well

"I'll sleep when I'm dead" is a sucker's motto.

My designer friend Tony from Osmo puts it best in this FB post summarizing an amazing podcast episode:

Key take aways:

Lack of sleep is heavily linked to Alzheimer disease, and other nasty society-wide health problems such as ADHD, cancer, obesity, weight gain, etc.

Being awake causes small amounts of brain damage that lead to Alzheimer. This damage is healed during sleep.

7 hours of sleep is the absolute minimum. One night of fewer than 7 hours leads to brain damage in 99% of the population.

People like Elon Musk who claim they can get by with less than 7 hours of sleep are delusional, hurting themselves and increasing their health risk.

Your body doesn't "store" sleep the way it stores energy/calories. For example, you can't "prepare" for a weekend of short sleep by sleeping more during the week.

Similarly, naps relieve the symptoms of lack of sleep, but they don't repair the damage.

For men, lack of sleep ages you by ten years regarding testosterone level.

Strive for overall balance

All work and no play makes Jack a dull boy... and also a stressed, neurotic, unhappy ~~boy~~ developer.

Workaholism is a genuine condition. In fact, people who exhibit workaholic-esque symptoms, while highly valued by their companies, will very often lose close friends. Their family life can deteriorate, and even the work that they used to enjoy becomes sorrowful.

So go out, have drinks & dinner, walk, hit the movies, and see people you love. Quality relationships are pretty much at the top of the human happiness checklist!

Dealing with anxiety & frustration

Life hygiene habits mentioned above will help you manage your emotions better. But I also want to leave you with three important ideas here:

Meditation

Forget the chakras and yoga chants and gurus.

Meditation as a secular practice has been proven by neuroscience to reduce stress/anxiety levels and improve focus, creativity, compassion, and memory.

I've been meditating almost daily for two years now. It helped me so much that I've become that annoying guy who always recommends it to everyone he meets.

Breathing is a powerful, omnipresent tool—use it!

I'll link to helpful tools to get started further down.

Check out this solid, science-backed primer on mindfulness meditation.

Growth mindset

This is a tricky one, but it boils down to taming your ego.

Your brain grows by learning from mistakes, not reveling in success. Starting from that fact, embracing errors and failures with humility will compound into personal and professional growth.

Stoicism

Stoicism as a philosophy is centuries old, but couldn't be more relevant today. It helps you learn to accept the things you can't change, and practice gratefulness for what is, be it good or bad.

I could write a whole post on this, but I'll cut it short and link to Ryan Holiday's The Obstacle is the Way. Bunch of useful resources on Stoicism on Tim Ferris' blog too.

Productivity tools for mental health

→ Headspace meditation app (can't recommend it enough)

→ Calm stress management app

→ Fitbit Ionic heatlh & sleep insights (wearable)

Closing thoughts

So, dev friends, allow me to leave you with a recap. To optimize productivity, you should definitely:

Tailor and stick to a personalized, strict schedule

Write code that is both tested and easily testable

Leverage tools to reduce interruptive distractions (chat, email, social)

Ask for developer help as often as needed

Nurture habits that'll keep your brain healthy!

I hope this guide helps you strive towards healthy developer productivity. :)

Happy coding!

If you've enjoyed this post, please take a second to share it on Twitter. Got comments, questions? Hit the section below!