In reference to Joel's 'smart and gets things done' idea...

How do I improve my 'gets things done' ability?

I'm not super smart, but working on being smarter than I am.
Attending user groups, reading blogs and books, asking and answering on forums etc.

But I'm having trouble with the 'get things done' part.

I'm OK at overcoming 'institutional inertia', as Joel put it, but not very good at getting things done on a smaller scale.
I want to improve my day-to-day productivity.

What have you found helps you to 'gets things done'?

ps - And I know 'just doing them' is the obvious answer.

+1  A: 

The fact that you care about improving means you're already half way there.

I think that, fundamentally, it comes down to genuinely caring about what you do, and really wanting the best result. Once you have that, you will naturally become one of these people who learns as much as they possibly can about their craft and applies it to the best order possible.

One thing I'd also suggest is not going to Google (or StackOverflow!) with every problem you have, at least not as a first stop; really try and figure out problems by yourself first. Some of the best coding I've done is when I've been isolated from the network and really had to think out the solution for myself.

Steve M
+50  A: 

Some things to consider:

Christian Hagelid
breaks* ..........
Spencer Ruport
Get some good *strong* coffee to keep you going
+50  A: 

Stop reading stack overflow :-)

Orion Edwards
I'd argue that reading stack overflow increases my "get things done" ability...
I would add an addendum: stop reading and start doing. Way too many programmers read blogs with a fanatacism that is just ridiculous. Learn your own way of doing; stop asking useless questions, engage your mind, sit in front of your computer, and work things out for yourself!
Noon Silk
+11  A: 

The irony is that it's wanting to learn that is distracting me from getting more work done.

I'll be writing code or solving a problem and will get distracted by some interesting article or code example I've bumped into while trying to find the answer to my original problem.

David HAust
I'm positive that this actually helps in the long run. Each time you will be able to perform better and finish your activities easier.It would be worse that you had to learn the basics when you need them, like most developers that don't have the habit of constant self-learning.
Sergio Acosta
+4  A: 

From the sound of it you're on the right track. Just be patient. The world of software development is large and is constantly changing; you're never going to know it all. Once you come to grips with that, the process is much easier and less stressful. Just keep doing what you're doing. Reading blogs, reading books, listening to podcasts, going to user group meetings, etc.

Remember though, nobody ever died wishing they had more time to write more code. So be careful not to overwhelm yourself with programming to the detriment of everything else in your life.

Kevin Pang
+15  A: 

Don't get bogged down in details that don't matter and don't avoid the ones that do (and, of course, be able to tell the difference). This is all easier said that done.

I try to follow these rules:

  • Before sinking a large chunk of time into something, think about whether it is worth it - sometimes quick-and-dirty is okay
  • If it something is worth investing time in, think about what it will likely be used for in the future - design so that those updates/changes will be easy
  • Develop some "go to" tools. I use Excel for a bunch of stuff that others might use scripts for, but because I know it fairly well I can complete things quickly.
  • Try the "5 minute rule": if you have a task you don't want to do, allow yourself to quit after 5 minutes if you don't procrastinate starting it. Most of the time you'll just get it done.
+5  A: 

Religious to-do list.
Don't fool yourself.

Aidan Ryan
+3  A: 

I seem to have the same problem a lot of the time. Of course over the years I've traced my problem to being in a cubicle that is easily accessed by people who want to ask me unrelated computer questions. So, the first thing I would do is the following:

  • Make sure you have a quiet coding environment.

Joel himself mentions the importance of a quiet working place in this article.

+2  A: 

I like that question. I've known plenty of guys who are really smart but can't get things done. Being a programmer involves having constant access to a great entertainment tool -- the internet -- and your boss, on a day-to-day basis, can't tell the difference.

For me, I find that procrastination can snowball when I have a small amount of work to do (something was just delivered, clients on vacation, etc.). You can go home from work on days like this and not feel very good about your productivity.

However, when I have a lot to do, I really crank things out.

So, for those slow times, I've tried to force myself to do things that just seem good. . .write LaTeX documents that describe how to use the code, write tests for my code, go back and find a better way to do things.

These things keep you engaged with your own work, and they're more apt to lead you back to what you should be doing which the 'net never does.

I love to-do lists, too. Write them at the end of the day to give a reminder when you get in in the morning. If you start the day productively, the inertia works that way, too.

+1  A: 

For me the biggest help is to eliminate distractions/interruptions. Don't check e-mail, close any extra browser windows, ignore the phone, close the office door, etc. That type of stuff. I work at home so keeping the kids out of my hair is a big plus. My productivity drops off when school gets out :-). I find I have a hard time getting started when I know that I'm going to have some sort of interruption. Setting aside a large block of "Do not Disturb" time is a big help.

The other thing that tends to bog me down are just small irritations. Anything you can do to eliminate even the minor hassles in your work environment gives a boost. I find that when I know there is something I have to do that involves even minor inconveniences I always tend to procrastinate doing those items instead of others.

+2  A: 

A todo list is your best bet. Preferably on something tangible, like a whiteboard. I've found the things work wonders for my own productivity.

+8  A: 

I just had a eureka moment today regarding this. I had a very productive day and finished a milestone an hour before I would normally go home. In that final hour I knew I wouldn't be able to get rolling on my next action so I simply got up and went home!

What I guess I'm trying to say is that being productive should be rewarding. I didn't feel bad about ditching work early because I knew some of that saved time would be spent being productive in means more appropriate for an hours worth of time (like tidying the house).

Another tip I strongly believe in is turning off all things that notify you. I rarely check my e-mail and never have MSN going. In the office I wear headphones as a way to make the office noise not distract me.

Productivity is a tough problem and I'm struggling with it, but identifying what hurts/boosts your productivity is a good step in controlling it.

Scott Muc
+2  A: 

I struggle the same. One major distraction was checking my favorite sites every hour or so (like digg.com) with that said if you use FireFox I suggest installing a productivity helper such as LeechBlock which basically gives you a certain amount of time that you set OR restricts a page totally. It's a odd way to kick yourself in the butt but it works if you are compulsive.

+2  A: 

I use MyLife Organized to manage my to-do list. I believe the most important thing when creating to-do lists is not to worry about coming up with the complete list. The most important thing is to identify what is the next step for any given task. As you go through the day complete the next steps that you can and refine your to-do list. Every thing will have the next step and a tool like MLO will organize that next step into your current to-do list.

Software like MyLife Organized let's you easily outline your tasks. It can be as simple as a to-do list or it can grow into a project. You can outline your ideas and easily re-arrange them. I use it to write PDL before I write any code.

It also can run off a USB thumb drive.

+7  A: 
  • Read the "Getting Things Done" book.
  • Jeff had a neat idea -- always have one deliverable finished every day, no matter how small.
Mark Harrison
+5  A: 

Work in fixed time-box iterations. Pick a time period (2 weeks is a good choice) and figure out everything you're going to do in that time. Organize your tasks such that you have something to show at the end of the iteration (that is something you can show to a customer, not just your buddy in the next office).

The trick here is that you need to start learning how to estimate. Break down your larger items into a few categories: 1h, 2h, 4h, 8h, 16h. Anything bigger than this should be broken down further.

Write up the plan and commit to it. Send it to your boss, send it to your customer, send it to your wife. Just make sure that you are accountable for making it happen. At the end of the iteration review "what went right", "what went wrong" and then do it again.

Mike Baker
+7  A: 

Get plenty of sleep. I've been having a few late nights this week and now I am suffering.

+1  A: 

Try to visit http://www.lifehacker.com they are the #1 fanboys of the GTD stuff.

+1  A: 

The problem with most time management strategies is that they focus on getting more done when in fact you should be focussing on getting the right things done. If all you are doing is creating to-do lists and ticking things off there is a danger you will get lots of things done without ever being truly productive.

Personally, I got a lot out of reading Stephen Covey's First Things First, although you could argue that it is just a long rehashed version of one of his seven habits. What this has allowed me to do is become more productive by doing less, which is a great position to be in!

John Channing
+1  A: 

For an easier way than GTD you might try ZenToDone. For the software I use self hosted Tracks (since no one in my company is interested in GTD).

Marcin Gil

Print out David Seah's Emergent Task Timer sheet. It'll keep you focused and give you a record of what you're up to. Sam Hasler also finds it useful.

In a similar vein: set Merlin Mann's Is this really what you want to be doing right now? as your home page.

Garth T Kidd
+1  A: 

Freakishly, some of the best advice on the subject comes from Major Charles Emerson Winchester: "I do one thing at a time. I do it very well. Then I move on." Before you start your day, decide what ONE THING you are going to accomplish and stick to it. I've found that if I have nothing in mind it's really easy to fritter time away on things that aren't important and aren't all that productive. Conversely, if my TODO list is too long I'm very likely to throw up my hands and do nothing.

At the end of the day every day I update my weekly status report with what I did. Then I write down 2-4 things I plan to do the next day, one of which is the dominant task. For instance, my plan for tomorrow is to clean up the logging on my API tests. The fallback tasks in case something blocks me from the main task are: configure my new laptop, migrate my code from machine A to machine B and fix my get_predicates.pl utility. If I complete the dominant task anything else I do is gravy and earns me bonus points. If I can't do the dominant task for whatever reason I already have a backup plan.

Keep your list small, current and active. Accomplish something every day. When in doubt, go simple.

+2  A: 

I think an anecdote would be most useful here.

This summer, I was a mentor for x264 under Google Summer of Code. We had four projects and four students total. One student, who I considered the most promising and who did the best job on the qualification tasks, literally disappeared without warning on the first week. The worst part is that he was assigned to the task I considered the most important.

I complained about this for quite a while. Who was he to pick up and leave after receiving the initial stipend? But despite this, I looked at the project and didn't do it. Because despite it being the most important of any project on my TODO list, and despite the fact that it probably wasn't that difficult, I just had subconsciously convinced myself that I didn't want to do it.

One day, about halfway through August, when I had few other obligations at work (and yes, I was working on x264 for a job), I woke up and told myself that I was going to do this project. I talked with the main developer, discussed a dynamic programming solution to the problem, and conversed until I fully understood the concept. I talked to a coworker and mapped it out on a whiteboard. I wrote an extremely simple Java prototype that used arbitrary costs for each possible solution path and tested the dynamic programming solution against the exhaustive exponential-time search. The output matched perfectly.

Then I copied the Java code and converted it to C. It matched perfectly, after some debugging.

Then I finally wrote a function to pass actual costs to the path-finding function, rather than arbitrary values.

And then it worked.

It had taken a week of hard work, but I had done it, despite having convinced myself repeatedly that I was never going to do this project. How did it happen? I think the solution is that eventually you have to get up, tell yourself that you are going to do something. Do every step of the process as if it was the only step; coming up with a plan isn't too hard, so just do that now. Oh, you have a plan done? Now you can write a prototype, converting pseudocode into Java isn't very hard. Oh, the Java's done and working? Come on, you can port that to C, that's trivial. Oh, the C's done? Well all you have to do is write an interface to the already-existing cost function! Of course you can do that.

And by telling myself that, I managed to actually do it. Somehow.

Dark Shikari
+6  A: 

To get things done, it is essential to have 'done-able' items on your todo list.

As in:

Todo #1: do the widget-interface technical design

==> BAD: with drafts, reviews, approvals etc, this task just too macro-level to be a good todo list item. How do you know when this can be crossed off?

Todo #1: get the first draft widget-interface technical design out to peter and mary for review

==> GOOD. the end goal is very clear. makes it easy to forget worrying about what needs to be done or how, and just get on with it

This is one of the biggest traps I see people falling into (and try to avoid myself). You need items on your todo list that leave no doubt about what 'done' means.

So when reviewing my todo list:

  1. I apply the sanity test for each item: "is it done-able?"

  2. If not, then the item gets refactored until it is.


You could try Riddlin.

+1  A: 

Become an expert at one thing. Dont try to become an expert at more than one thing. Learn the other things that are related but dont try to be an expert at those other related things.

Know everything about that one thing and be the person who everyone needs and wants to come to for advice and suggestion. Bend over backward to learn that one thing and help people accomplish what they need to do with that one thing. What is that one thing? You need to determine that yourself. It could be a database or spreadsheet or coding a particular language or maybe an IDE or XML or report writing..... Whatever it is, become the de-facto expert.

You'll know you're "there" when your boss worries that you'll leave with your knowledge and go elsewhere and/or when your boss holds a meeting worried that if you "got hit by a bus" who else can fill your shoes. :)

Optimal Solutions
+1  A: 

The main principle of being productive as a programmer is establishing and retaining your sense of being in the flow ( http://en.wikipedia.org/wiki/Flow_(psychology) ).

The main factors contributing to flow are doing one thing at a time, in your natural pacing, with frequent events indicating progress/success.

Factors disrupting flow are, well, disruptions. Interruptions, multitasking, including internet addictions etc.


Get fired a couple of times for "not getting things done".

+1  A: 

Recognise that you won't get all your code right first time.

Sometimes you don't need perfect design and a perfect test plan. Sometimes (and you learn this with experience) a quick, nasty and bad looking solution from a design point of view turns out to be a pretty good use of your time.

I've lost count of the number of times I have strived for perfection that simply wasn't needed or that wasn't appropriate... and I've wasted 2-3 times as was needed.

A simple TODO list helps as well. Start each day with a fresh piece of paper, divide it into a number of sections: work stuff, home stuff etc. Make sure you get your home stuff done - that can just eat away at you all day.


Don't work for the government ... seriously :)

+1  A: 

I like The Cult of Done Manifesto:

  1. There are three states of being. Not knowing, action and completion.
  2. Accept that everything is a draft. It helps to get it done.
  3. There is no editing stage.
  4. Pretending you know what you're doing is almost the same as knowing what you are doing, so just accept that you know what you're doing even if you don't and do it.
  5. Banish procrastination. If you wait more than a week to get an idea done, abandon it.
  6. The point of being done is not to finish but to get other things done.
  7. Once you're done you can throw it away.
  8. Laugh at perfection. It's boring and keeps you from being done.
  9. People without dirty hands are wrong. Doing something makes you right.
  10. Failure counts as done. So do mistakes.
  11. Destruction is a variant of done.
  12. If you have an idea and publish it on the internet, that counts as a ghost of done.
  13. Done is the engine of more.

There are even some nice motivational posters: the manifesto, a graphical representation.

Point 6, "The point of being done is not to finish but to get other things done." - in a way changed the way I think. Made me more aware of how important it is to get things out of the way - so that I can work on other (potentially more interesting) things. Sometimes the greatest motivation for doing something is to be able to do other things later.

+1  A: 

I can't recommend David Allen's Getting Things Done enough. At the very least, adapt it to fit in with what feels natural to you. If you feel comfortable using just paper and pencil, do that. If being able to see it all listed in a a program that allows you to set up projects and tasks helps things clear for you, go for it!

The trick is not to spend so much time tinkering with your system that the process controls you instead of you controlling the process.