Time Management for Programmers
Tags: productivity, timemanagement, programming
Published: 2021-08-20 16:12:58

You have too much work and it's impossible to get it all done in 40, 60 or even 80 hours per week.

This is often the case for successful, talented software developers.  Your time is valuable so how do you schedule your time to increase your productivity?

This article is not about coding tips like writing macros and using coding standards.  I have a [Coding Standards](https://youtu.be/3mlWO01OWIo) video about that.  This is about prioritizing tasks and optimizing how you schedule your time.

This article is also available in video form:
{% youtube nMZA7Emr5z4 %}

##  First Step - Make a List
Write down all your current tasks.   You're not writing a functional or technical here.  Just one-liner descriptions of each to-do item.  If the item doesn't need to be done this week it should not even be on the list.  If you're worried you'll forget it, then put it in a separate list for "To Do Later" but have that in a separate document.  The whole process of making your list and prioritizing it should not take more than 20 minutes.  If the task list is really long it could take up to an hour but then you'll be in a much better place for the whole week.

Once you have your full list (and you'll be adding to this during the day), then you want to move the tasks into three categories.

* Tasks where people are waiting on me before they can continue
* Tasks you can delegate
* Everything else

In most cases you want to take care of the first two categories first.  That way other people can be productive and working on the project while you are being productive.  

If you are part of a team and other staff cannot do their job until you finish yours... this really should be your top priority.  You don't want to finish a month-long task and then the company has to wait another 2 weeks for someone to do their part because they couldn't start until you delivered a module.  Work on the module they need first so they can be productive while you finish your other tasks.

##  Tasks You Can Delegate
These can be little easy things that are tedious and time consuming.  Like updating the company Wiki regarding the project you are working on.  Creating test data sets.  Writing an API integration.  Or tasks that just make your life easier - like setting up a development server, setting up the social media accounts which will later be needed once the project is completed.  Picking the icons and graphics to be used by the user interface.

Do you have a technical problem that you can submit to a forum or to the company providing an API you are working on?  Don't let your OCD lure you into wasting hours because you don't want to let this puzzle get the best of you.

**Note:** if you are not overloaded with work you should reach-out to some high-level techs you know and offer your services.  Offer to create test data, provide unit testing, write the user documentation, or build the OOP API integration they need.  Even choosing all the icons to use for the app can save them an hour or two.

##  Quit Unnecessary Tasks
One way to be more productive is to stop wasting time on things you can avoid.

Notify your manager that you are overloaded and in order to meet deadlines you will need to reduce the number of mandatory meetings you go to.

In your personal life, order groceries online and let them deliver.  This can save you hours every week.  I could go on but basically if you are overloaded with work also look to see if there are non-work activities that are taking up a lot of your time which you can delegate, quit or find alternatives to.  If you are earning good money consider hiring someone to do these tasks.  Don't waste your time mowing the lawn when you can hire someone to do that.

##  Now to Prioritize Everything Else

Now to sub-categorize the remaining tasks based on **Mental Acuity Requirement**
- complex
- easy
- no challenge

###  Complex Tasks
These include programming and anything else that you find mentally challenging.  When coding even a single character could cause a crash or problem that takes literally hours to debug; put a colon in where there should be a semi-colon and you have a big problem in most languages.  Coding is not the only "complex" task.  If you make a bad design decision it could have a long-term negative impact on the project so database design and similar activities should be in the  "Complex" category.

###  Easy Tasks
What is easy for one person may be complex for others.  Like designing and creating SQL table definitions.  The relational DB design regarding how it will integrate with the rest of the database may be complex, but the creating of the SQL scripts to make the tables after the conceptual design is outlined may be "Easy".   Similar with writing functionals or help documentation.  Generally things you have done hundreds of times before and a single-character being off won't crash the program should be considered **Easy** tasks for you.

Put the ones that are time-sensitive as highest priority for this category.  For example:
- Registering for an API
- Registering for a developer account from Apple
- Applying to join a group or anything that has an application process
- Submitting a bug to a third-party tool you use

Do these things first so you can be productive while waiting for responses.

###  No Challenge Tasks
These tasks must be done and sometimes are very time-consuming but just aren't mentally challenging.  Like picking icons for your user interface and navigation.  Or creating test data.  Do not squander your best mental acuity hours working on these menial tasks!

Now hopefully you can delegate some of these tasks to someone else.  

If not then postpone them to end of day when you are not at your best.  Sometimes these can even be done as multi-tasking projects.  For example this week I was on an obligatory 4 hour Zoom meeting where my interaction was only required 20% of the time.  During the other 80% of the time I multi-tasked and created new thumbnails for YouTube videos.

##  In The Zone
Most people do not take into consideration that every human has peak and off-peak times for their mental acuity.  Figure out when you are at your brightest during the day.  When you can get "in the zone" and really focus.

As an example, when a programmer is "in the zone" they can accomplish a task in 10 minutes.  That same task can easily take 40 minutes if distracted, they make a typo, or they didn't think far enough ahead to realize a design flaw.  If that happens 3 times in a day, then what could have been completed in 30 minutes now took 2 hours.  Your goal is to get "in the zone" and do the most complex tasks during that time.

When you really want to focus and get "in the zone" remove all distractions.  No email, put your phone in airplane mode, close your door or have some visual indicator to let people know not to bother you.  Only work on the Complex tasks while you are in the zone.  Don't squander these peak productivity times.

##  Summary
With all this in mind, you should schedule your complex mental tasks for when you are at your peak mental ability each day.  Schedule your tasks in the Easy Mental Tasks category for the rest of the day.  Don't schedule the "No Mental Requirement" tasks at all.  These tasks you do when eating lunch, multi-tasking during a Zoom meeting, or on your laptop while unwinding and watching Netflix.

Also, if you want to increase productivity do not multi-task while working on complex or even "easy" mental tasks.  You may think it doesn't have a big impact on your effectiveness but having a video on in the background is going to slow you down.  Put on music instead.