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.

Wrap Up

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.


Workpuls Teramind ActivTrak Hubstaff DeskTime Time Doctor RescueTime Kickidler Veriato Work Examiner
OVERVIEW
Price $6/user/month $6/user/month $7.20/user/month $7/user/month $7/user/month $9.99/user/month $6/user/month $9.99/user/month $150/licence/year $60/licence (lifetime)
Free trial 7 days 7 days No 14 days 14 days 14 days 30 days 7 days Yes 30 days
Ease of use Very easy Difficult Very easy Easy Easy Very easy Very easy Very easy Very difficult Easy
TRACKING METHODS
Unlimited (tracker working 24/7)
Fixed (defined working hours)
Automatic (when computer is connected to a specified network)
Manual (start/stop)
Project based (track time only on projects)
GENERAL MONITORING FEATURES
Stealth mode
App and website usage
Real-time monitoring
Offline time tracking
Attendance
Activity levels
Keylogger
Geolocation
Remote desktop control
Website/activity blocking
SCREENSHOTS AND RECORDING
Screenshots
Screenshots on demand
Screen recording
PRODUCTIVITY FEATURES
Productivity trends
Websites and apps labeling
Category labeling
Productivity alerts
ADVANCED SECURITY FEATURES
User behavior analytics
Data loss prevention
Advanced file and web monitoring
REPORTING
Productivity reports
Team reports
Timelines
Email reports
Access management
PLATFORMS
Web
Mac desktop app
Windows desktop app
Linux desktop app
Mobile app iOS, Android iOS, Android iOS, Android iOS, Android iOS, Android Android
Browser extension Chrome Chrome Chrome
Other Citrix, VMware Chrome OS
OTHER
Support Phone, email, online Phone, email, online Phone, email, online Email, online Phone, email, online, in-person Online Phone, email, online Email, online, Viber, Whatsapp Phone, email, online, support ticket Phone, email, online
Knowledge base
Video tutorials
Integrations comming soon
API
Deployment cloud, on-premise cloud, on-premise, AWS, Azure cloud cloud cloud cloud cloud on-premise cloud, on-premise on-premise
Kronos Humanity Timeclockplus Tsheets Wheniwork Deputy Replicon Jibble EbilityTimeTracker OnTheClock
OVERVIEW
Price (per month)Available upon requestFrom $2 per userAvailable upon requestFrom $6.40 per user + $16Free for up to 75 usersFrom $2.50 per userBasic plan: $30 for 5 users + $5 per additional userFrom $1.50 per employeeFrom $4 per user + $8From $2.20 per user
Free trial30 days14 daysYes14 days14 days14 days30 days
Ease of useDifficultEasyDifficultVery easyEasyEasyDifficultVery easyEasyEasy
FEATURES
Timecard management
Scheduling
Shift Trading
Timesheets
Break time management
Real-time tracking
PTO Management
Payroll
Invoicing
Client billing
GPS tracking
Clock out reminders
Alerts
Manual time
PUNCH-IN METHODS
Web app
Mobile app
Time clock device
Time clock kiosk
Facial recognition
Fingerprint scanning
Geofencing
Group punch-in
REPORTING
Visual reports
Email reports
Time rounding
MANAGEMENT
Permissions
Manager approvals
Add time for others
Integrations
PLATFORMS
Web
Android app
iOS app
Mac desktop app
Windows desktop app
Linux desktop app
OTHER
SupportPhone and onlinePhone and onlinePhone, chat and onlinePhone and chatEmail and onlineChat and phonePhone, email, chat and onlinePhone and onlinePhone, email, chat and onlinePhone and online
Knowledge base
Video tutorials
Community forum
API
Workpuls Hubstaff Toggl TimeDoctor Harvest TimeCamp Timely Everhour Tick TMetric
OVERVIEW
Price (per month) $6 per user $5.83 per user $9 per user $9.99 per user $10.80 per user $5.25 per user $99 for 5 users $7 per user $19 for 10 projects $5 per user
Free trial 7 days 14 days 30 days 14 days 30 days Yes 14 days 14 days 30 days 30 days
Ease of use Very easy Difficult Difficult Very easy Easy Very easy Easy Difficult Very easy Difficult
TIME TRACKING METHODS
Manual
Start/stop buttons
Automatic time mapping
IN-DEPTH TASK AND PROJECT ANALYSIS
Screenshots
App and website usage
Activity levels coming soon
Real-time tracking
TASK AND PROJECT MANAGEMENT
Project adding
Project templates
Project status
Task assignment
Task priorities
Budgeting coming soon
Mark billable/non-billable hours
Payroll calculation
Invoicing
ALERTS
Idle time reminders
Deadline alerts coming soon
Budget alerts coming soon
REPORTING
Client login
Productivity analysis
Email reports coming soon
PLATFORMS
Web
Mac desktop app
Windows desktop app
Linux desktop app coming soon
iOS app Beta
Android app
Browser extension Chrome Chrome, Firefox Chrome Chrome Chrome, Firefox Chrome Chrome, Firefox, Opera, Edge
OTHER
Support Phone and online Email and online Email and online Online Online, email and phone Email, online and support ticket Email and chat Email and chat Email Chat
Knowledge base
Video tutorials
Integrations coming soon
API
On-premise hosting

Ready to Take Full Control Of Your Workplace?

Try the simplest solution today…

Try Now For Free