I'm one of those people who never brag about multitasking. I can't. I see people who do it all the time and I see those who say "actually no one can, there is research that blah blah blah" simply because they can't do it themselves. Despite this I try. When I'm working, there are multiple windows floating, multiple sessions of my IDE, certainly the illusion of the pro multitasker.
Well, in reality I am just very efficient at distracting myself. The moment someone walks to me and asks a question, my scheme falls apart. It takes a few minutes to remember which of the windows are relevant, hardly ever figuring out what I am to do with it. I can't even listen to music with lyrics while working.
After a lot of trial and error, I found a way to make use of the full potential of this "feature" of my brain. I can't work on 2 things in parallel but I can work on things sequentially.
This is what a CPU does. It doesn't work on multiple things at the same time, it divides the unrelated work, prioritize it and tackle one issue at a time going round robin based on priority until all the work is complete.
If the computer worked on a single task at a time each action will make the system unresponsive until the task is completed. It might even be faster at that task but the overall work will take much longer to complete. So the computer is doing the optimum thing by taking this divide and conquer approach.
Applying this concept
Working as a full stack developer, I had to handle several different aspect of a website. Sometimes my work would include:
- PSD to HTML
- PHP feature implementation
- Cron services setup
- Building functional Test
- Database Schema
- Caching solution
- Server setup
I know how to do it but at some point I get frustrated doing the same repetitive task. In the long run I become exhausted and my output rate goes down. Even though it is easy, doing boring stuff for an extended period is not good for your morale. It stops you from doing any further work.
However, these tasks can be broken into smaller chunks that can be tackled independently in no particular order. The part that takes the most time is organizing the project. Making a schematic could be a good idea. For me it works best if I have it in writing on a notebook.
The first step, organizing, might take some time to complete, but it will pay off in the end. Here is a quick summary of what goes on my notebook for this kind of project:
PSD to html can be separated into modules: header, footer, content section, each individual widget.
In PHP I always favored writing how my code is supposed to work before actually writing the code implementation. Placeholders can already be put in place by tying it directly to the HTML widget names.
Cron jobs functions can be named a head of time, kinda like how interfaces work. A file can be created in plain English with the scheduled time and function name.
Blue print for the functional test can be written.
By using Database Design tools you can quickly create the list of fields or tables that need to be created or modified.
A quick statement on how the caching service is supposed to work.
Finally, the list of applications needed for the server, and the config files to modify.
I usually spend an hour writing things on my notebook. When complete, I transfer it to a spreadsheet or text editor, it doesn't really matter as long as I can check them off when I am done with each task.
Boredom driven development.
At this point all the tasks are organized and detailed. I add a priority level just like the CPU does. It is important to have something I can show to the managers (or client) when they ask for feedback, usually people like to see a page that loads on the browser, so I give the PSD to HTML a high priority even if it doesn't entirely work.
In my work flow, if I get to a point where I am getting tired of writing CSS, I can easily leave it alone and work on another section. I can jump into the server setup, installing all the tools I need and create server configurations.
When I am done, or bored, I jump to another section. At this rate I am working at full speed, moving from task to task without ever having any serious downtime.
I am multitasking, in some way without really working on two different things at the same time. In this example, I am doing somewhat related tasks, but nothing stops you on working on unrelated projects the same way.
Implementing it everywhere
As an independent developer, I have the chance to work on things that have nothing to do with programming. Sometimes, all I do is the PSD versions of website without ever needing to write any HTML. This too can become tedious work but because I allow myself to work on other stuff, the moment I feel unproductive, I can switch the subject entirely and find myself writing an unfinished blog post.
This only works if I have a quantified amount of work to do. Like I said, organizing is the most important part. Taking time to analyze the big picture of all the things you have to complete can help you multitask, by doing one thing at a time of course.
When you jump from project to project without having a set goal, you will end up with many open projects that will never see the light of day. Take time to organize and apply boredom driven development to tackle your projects.
You now know my secret to multitasking. Do you have a trick to efficiently handle your project? Feel free to share below.