Being a nineties kid, I distinctly remember my father, one of Yugoslavia’s programming pioneers, staring day and night at the screen of his Macintosh LC and mumbling into his beard a bunch of weird words that I couldn’t understand.
Today, I realize he was neither lunatic nor linguist, but merely a guy struggling to get his work done without the help of the internet, blogs, vlogs, or even books in his native language. Heck, there weren’t many people in the entire country whom he could talk to and exchange ideas about coding, problem solving, bug fixing, and, well – being stuck and procrastinating.
Thanks to the gods (and tech geniuses) we now have all of the above, which is why I decided to congregate tips and tricks from as many programmers and developers I could find in my immediate surroundings and across the internet, into a handy “How To” for all the coders out there stuck in an endless loop of problem solving, sleepless nights, and fighting the Instant Gratification Monkey.
1. Design Before You Implement
Through conversation with my friends, it turned out that it is a common beginner’s mistake to jump right into writing the code, without first mapping the nature of the problem and the logical paths for creating the solution.
“Due to the proliferation of web and mobile technologies, it has become much easier for developers to hack together a prototype without giving much thought into code design. While giving more emphasis on the design and structure may increase the time taken to write the code, it can save you a lot of time wasted on later refactoring and ’chasing’ the bugs,” explained one of them.
The best way to follow this tip is to keep a notebook and a pen nearby. Draw maps, outlines, flows, and schemes. Write down all comments and ideas that come to your mind during the process. Put them on the wall, then add or cross off whatever changes in the meantime. Do not constrain the creative process to only what can be typed on the screen, because not only will you miss out an entire spectrum of ideas and potential solutions, but there’s also a good chance you’ll waste even more time later in the process.
2. Do the Creative Work When You Are in the Zone
I like to think about developers as if they were writers or some sort of computer-taming artists. Just like any form of creation, the best product here is usually the one delivered from the state of flow that you’re in.
In positive psychology, being “in the flow” or “in the zone” means performing an activity while fully immersed in a feeling of energized focus, full involvement, and enjoyment. One of the fellow programmers described it like this:
“Flow has a big influence on your productivity as it allows you to give all your focus to the specific problem you are solving. Flow is a multiplier of your performance. It is fair to say that when you are programming and not in flow, you are wasting time.”
Unfortunately, it’s impossible to ALWAYS write code and be fully immersed in it. Yet, there are certain steps you can take to get you into the zone, so you’re well-prepared for problem-solving.
So, don’t start your day by checking emails. Don’t listen to music unless it’s absolutely necessary, or if that really is your thing. If you do want to listen to music, try finding something with as little lyrics as possible, because lyrics = distractions. If your peak productivity hours are in the morning, don’t waste them doing menial tasks. Instead, you can leave those for after lunch or at the end of your shift, when your focus is lower.
In the meantime, let your mind wander and leave enough time and energy for it to create magic.
3. Procrastinate When There Is Nothing Else You Can Do
At some point you’ll hit a deadend, and there’s no point in denying it. So, instead of kicking yourself for not being able to find a solution, and keeping up with the work even though you’re obviously not up to the task, procrastinate.
Take the time to relax, watch an episode of your TV show, take a quick walk, go to the gym. Do whatever suits you, and whatever will take your mind off the task for a little while. Once you’ve rested, sit back behind a computer and try to tackle the issue with a fresh perspective.
More often than not, the solution will present itself very quickly, and you’ll wonder how it’s even possible you got stuck on it. But, if you do start to misuse the procrastination method, start using one of the remote employee time tracking tools to stay on schedule.
Keep in mind that you shouldn’t be doing anything that’s not work during the procrastination periods. You should do the things that help you rest and refresh. If you can, take a power nap - that’s probably the best option.
4. Gamify Your Mind
Dealing with repetitive tasks, or with too much work can cause you to procrastinate. Which is why you should create a sort of competition for yourself. Invent some rules, or create goals that will make you feel like you’re playing a game.
For example, challenge yourself to complete your daily tasks in six hours. Make it a big deal! Reward yourself with a night of binge watching of the new season of that TV show you really like, and if you don’t reach the goal, don’t check your Instagram for 24 hours.
Invent whatever rules suit you, do what feels right.
5. Use the Right Tools
Coding is the craftsmanship of our millennia, so it should be obvious for all developers that using the tools you know well and which suit the job is a prerequisite for effective work. As someone on Quora said:
“Know your editor like the back of your hand. Don’t reinvent the wheel. Know all of the libraries available in the language(s) of your choice and how to use them. Force yourself to write an example with each library and keep those examples handy so you can review them whenever needed. Once you’re familiar enough with a library, a) you’re more likely to remember to use it when the opportunity strikes and b) you’re more likely to know how to use it and, therefore, resist the temptation to spin your own.”
However, be very careful when choosing the right tools and libraries for your project. Do not use a library that is quite recent and has not been tested much, as it can come back to bite you and become a source of issues that will be very difficult to debug afterwards.
It can be confusing to choose the perfect tool with so many of them on the market nowadays. Since I am not a programmer myself, I suggest that you check out the article with GitHub’s top 7 productivity tools for programmers, or going through recommendations on Quora and other websites.
Also, you want to move your ideas into code as fast as possible and avoid doing everything using a mouse pointer. Not only is it slower, but it can also distract you, as it gives your brain enough time to start thinking about something else. Therefore, learn the key bindings for the most important operations in your tools of choice.
In addition to this, it is worth mentioning that there are also tools which are not software-related, but provide enormous help when it comes to organizing, operating, and managing your performance and habits. Smartphone apps like memos, calendars, “pomodoro” timers, and to-do lists help you deal with tedious daily tasks and planning. And, if you work with clients, automated time-tracking tools will save you the hassle of manually tracking how much time you have spent on which task for which project.
Speaking about that, if you happen to use Visual Studio, WebStorm or PhpStorm, you might want to know that Workpuls automatically tracks tasks and projects that you are currently working on, with no need to click start/stop to do anything at all except for work. It saves your time, lets you focus on what is important, creates fancy reports, and gives some very neat insights about your biorhythm, peak hours, biggest time wasters, and everything else you have ever wondered about your computer behavior.
6. Automate, DRY, & KISS
Once you’ve mastered your set of tools and magic wands (at least for a while), automate.
Automate everything that you do repeatedly, including command lines, text manipulation, log mining, refactoring, building, deploying, and integrating. Repetitive jobs that can be automated should be some of the first things a developer eliminates from their daily task list. If you spend 30 minutes each day on something that can be automated, you can save around 10 hours a month or 120 hours a year, just by investing 4-5 hours in the beginning to automate it.
With this in mind, follow the DRY principle, which stands for “Don’t repeat yourself.”
It’s important that your code can be understood by you and other developers, even when it has been written a long time ago. There’s nothing worse than trying to maintain code that has been duplicated multiple times – it’s a huge waste of time and will undoubtedly create bugs. It’s also a waste of time for all the other developers who aren’t aware of the duplication and need to make changes in the future.
To wrap this all up, obey the cheesy KISS abbreviation, or “Keep it short and simple.”
The real enemy of being productive is your mind itself. The more “cognitive load” you place in your head, the less productive you become; therefore, complexity is the enemy.
Whenever possible, adopt simple, or dumb solutions: “You can optimize for execution speed. You can optimize for space. But the most precious thing you should optimize for is your own time. Optimize for readability, and understandability.”
7. Be Smart
You’re a developer, which means your time is expensive. Working “a lot” in this situation is not necessarily something to brag about, because if you deliver the same amount of output as somebody who spends less time on it, you’ll be on the losing end. You can go back and revise your steps if you're using a computer monitoring software which takes screenshots and keeps track of time you spent in different apps.
So, what do you do when you encounter a complicated, time consuming problem? Here are some answers from several experienced developers:
“To be honest, this happens so often I think I became able to mentally open StackOverflow within a millisecond. When I was younger, I used to spend hours or even nights and days trying to solve a certain problem, not because it was really that complex or indispensable, but because I’d set an artificial goal to myself to do it, or maybe because I’d wanted to impress someone. In any case, the damage of the time lost was often greater than the satisfaction of figuring it out myself, which is why I decided not to reinvent the wheel anymore unless absolutely necessary, and instead use other people’s solutions. However, remember to always check the ratings and reviews before you implement something borrowed online.”
“Win elsewhere. If I haven’t been able to tackle a problem head-on for awhile, it means that, psychologically, it’s making me deeply uncomfortable. It’s too hot to handle directly. So I switch to doing other, less overwhelming tasks. This way I build my ‘get-things-done’ muscle, because so far, I’ve just been building my ‘get-stuck’ muscle. Once I build this momentum, I switch to the postponed task.”
“If it is something of minor importance and/or urgency, I am not ashamed to delegate or outsource. The internet is full of smart kids who can do amazing things for a reasonable price, so why waste my time?”
8. Invest Time in Pair Programming and Code Reviews
You might be the smartest guy or gal in the room, with the best time-management and knowledge of all the key bindings in the world, and, still, there will always room for involving others. Everybody makes mistakes and we want to have at least a second pair of eyes to look over a solution before it goes to production. Therefore, invest in yourself and introduce pair programming, code reviews, or some other collective ownership practice to your development process.
One of the best types of code reviews is when you have a good programmer who is only loosely familiar with the project looking at the code. As you need to explain the details, you’ll learn your code better, and sometimes an outsider will see problems that you, as the insider, missed. Code reviews cost nothing but time, and often save much more than they take to conduct.
Finally, I’d like to show appreciation to all devs and programmers who have helped me conduct this article by sharing their experience, whether personally or on Quora. If you have made it this far, you either a) have something really important to do and consider this a convenient way to procrastinate without feeling guilt; or b) find this piece downright helpful and valuable. If the latter is the case, I invite you to spread the word by sharing it with anyone you think might be in need.
This article was written in October 2017, it was updated in November 2019.