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.
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)
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)
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 notificationsWe 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.
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!
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.
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 practicehas 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.
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.
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!
About the author
François Lanthier Nadeau CEO, Snipcart
Francois has worked in SaaS & digital marketing for over 7 years. He’s been published on Indie Hackers, The Startup, freeCodeCamp, Baremetrics, Wishpond, and Growth.org—among others. He’s spoken at 13+ startup and web development conferences in Canada, U.S.A., and Europe. He's been a vocal bootstrapping and Jamstack proponent for years.