I wonder who of you can work on several projects the same day, dedicating only a short piece of time for each one. Or if you are able to work in the same hour, on two o开发者_JS百科r three or more projects at the same time. I have so many things to do, that I am starting to wonder how could I do this? I thought about using several workspaces, and switching between then, etc. What other approaches do you use?
Just do it.
Have small tasks; do them, move on. Organise by priority.
It's that simple; forget gimmicks, forget misc tools and other timewasters. I find the simplest way the most effective.
You're spreading yourself too thin, trying to do too many things and in the end not really making any progress. This can make others frustrated by your apparent lack of progress. It's more efficient to focus on one thing at a time, but you still want to make progress on multiple projects. When you switch gears, there is a certain amount of changeover time. The most efficient way to work on multiple projects is to use the existing breaks in your day as the changeover points.
For example, we'll pretend that you have three breaks in a day: morning, lunch, and afternoon. This gives 4 blocks of approximately 2 hours each. In each of those blocks, make one project your primary focus.
Divide your projects in tasks that as small as possible. This helps you track progress and also gives a greater sense of accomplishment. Make notes at the task level and the project level to help yourself remember what you did/discovered.
There has been quite a lot of research on the subject of task scheduling. Since this is Stackoverflow and not a business website i'll compare it with operating system kernels ;)
You have multiple tasks to be executed and the goal is of course to be efficient. Efficiancy can be measured as high throughput or as low latency.
When you switch between tasks there will be a costly penalty called context switching. That is, you'll have to switch documents, applications, log-in to systems etc. and it will take time to get into the zone.
Given multiple tasks of different size. If you arrange them randomly as a sequence (batch) you will have the smallest amount of context switching and therefor a high overall throughput. If you additionaly prioritize them by size, from small to large you will, also reduce latency. Since the customer with the smallest projects will be delivered first you'll have more projects delived at a point in time than in the random approach above. The problem is of course what to do with the large projects when new smaller ones arrive. This can be solved by applying some sort of timestamp. If some projects are more important than others you will have to priortize them accordingly.
If this still won't give you satisfactory latency you'll have to multitask. It will decrease throughput due to costly context switches but you'll be able to satisfy your customers by showing them that you're making progress on their projects. The important part is to choose how time slots are to be allocated. Per hour, per day, per week? The smaller the time slot the more context switches you'll get.
Tasks can in turn be divided into two different types, CPU and I/O bound tasks. I/O bound can be seen as tasks that requires input from a device/someone else while CPU bound only requires your time/brainpower. Arrange your week so that you initiate the I/O bound tasks sooner rather than later. While you wait for them to return, you'll focus on the CPU bound tasks.
To summarize. You split each project into smaller deliveries that are just small enough to satisfy your customers demand for progress. On monday morning you plan your week and start with all tasks that need action by someone else (approvals etc.). Send those e-mails and make those phone calls. When that's done you'll focus on the parts requiring your concentration.
Or, you could just hire more people :)
The challange is keeping track of where you are in each project, and what you still need to do. I use the Windows sticky notes to remind myself of immediate tasks, and keep a journal each day of what I am doing, what I have finished, what I need to resolve, how it was resolved, and more. That way, I can search back and quickly refresh where I was on the previous task.
I've been in the same situation for the last few weeks: I already had three projects of my own, and recently another developer quit and I had to take one of his projects too. At first it seemed I didn't make any progress because I tried to do too many things at once.
Then I understood that I absolutely have to prioritize. I discussed with my boss which project is the most important and concentrated on it entirely. I don't even allow myself to do a quick bugfix on the other projects (testers probably hate me now), because even though it only takes five minutes to fix that bug, you lose concentration and won't regain it for about half an hour.
I must say this really helps - I've done much more useful work last week than I had done in two weeks before that. Oh, and switch off the damn phone if you happen to sit near one. Good luck.
Allow yourself time to work on each project and do not get bogged down in the details. Sometimes it's okay to write sloppy code. If it compiles and works as expected, ship it. You can come back and refactor smaller pieces later. Keep your customers and your boss in the loop.
精彩评论