Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am an above average programmer (I take interest in the development of languages, frameworks and technology in general and have a good grasp of systems), but I constantly find my self not being able to deliver things (on time). This does not affect my day to day work as it has good control process (bite sized tasks with shame driven development) But it definitely hurts me in my personal projects.

Some of the reasons that I think are at play. -I make things more complicated than they need to be. Often a lot more than I admit to my self. -I am not very good at making the tasks smaller at times. -I wander off into obscure corners when I encounter them instead of keeping a laser focus.

The result is often that I don't deliver. Now I may know at the back of my head that what I need to do, but I would appreciate your strategy on how to be the guy who "delivers".

share|improve this question
    
Oh well, in personal projects it's kinda normal. (unless you're betting too much on them) If those where client projects, that would be sign of deep trouble instead. –  ZJR Mar 17 '12 at 0:44
    
Do you have any commitments in your personal projects or are they just hobby projects for fun? –  user1249 Mar 17 '12 at 3:35
    
Write the core of the project and then find others to finish it. –  Job Mar 17 '12 at 17:15
    
commented#2 Well I would really like to finish them, but my job is not on the line. I guess the minimal self discipline I have is because I get paid for what I do (which is sad cause I thought that I had passion) –  geoaxis Mar 19 '12 at 12:17

8 Answers 8

A couple of observations:

  1. Apply the processes that are working to your personal projects.
  2. Are you self-motivated, or externally-motivated? Become self-motivated. Self-motivation is required to advance to leadership positions.

According to Seth Godin, the way you ship on time and on budget is this: when you run out of time or you run out of money, you ship. That's it.

He also says that people tend to gold-plate things; they develop the itch to fix just one more bug, or add just one more feature. They do this, not because they really need that new feature or fix to ship, but because they are afraid of scrutiny; so long as the product doesn't ship, they can avoid criticism.

People gain a reputation as being valuable because they know how to get things done, not just because they have good ideas. They have the ability to finish. It's not about a strategy. It's about a mindset. Use that mindset to surround yourself with the tools you need (both mental and physical) to make yourself as productive as possible.

All that said, there is one technique that I do advocate, and that is short bursts of high-level productivity. Give yourself 20 or 30 minute periods where you decide you are going to be as productive as possible during that brief burst. Set a timer. When that timer ends, take a 5 minute break. Stretch, walk around. Empty your mind. Do not think about work during that time.

Lather, rinse, repeat.

share|improve this answer
    
+1 nice conference, indeed. I liked the: "you get a lot of free time out of it" part. –  ZJR Mar 17 '12 at 5:00
1  
I also liked the fact that Godin correctly credited that "when you run out of money or time you ship" to the 37 signals guys (Fried/Heinemeier, I suppose) and also referenced Pressfield's book "the War of Art". –  ZJR Mar 17 '12 at 5:08

There is a big difference between being late of a fixed, well defined task and being late because the task changes. At work it is the client that asks for changes, and everyone understands that the schedule will change accordingly.

At home you are both the client and the programmer. When you are working on something and the idea pops into your head "Gee, if I change A or re-write B the project will be better" that is a change, not being late. In business a client would weight the alternatives and make a decision, at home you are doing the same.

Consider building a website at work and half way through the client calls up and asks "I know you are building part of it in Flash, but could we use HTML5 instead?" You would think and respond something like "Well yes but it will make the project take an extra 3 weeks and add x dollars to the cost."

At home the difference is that we generally have a duh! moment where we realize "Gee, this would be better if I were using HTML5". The part we skip is the stopping to think about the implications of the change in terms of schedule; in other words we generally don't pause to think about the change. Instead we generally just go ahead and do it because we "know" or "think" it to be the best way. We don't fire up Excel and do a financial calculation like a bean counter would do at work when deciding if a change should be made.

Personally I like this at home, not all development should be driven by bean counters ;-)

Don't beat yourself up, mearly understand what is going on.

share|improve this answer

Great advice here - In addition to that, try getting a partner who is interested in the same project as you want to do. Then you can motivate each other and getting things done. It is just like getting a gym partner - it helps a lot in the lean days.

This is exactly why open source projects work - many people who really want to do that thing, kind of push each other to keep up quality / consistent delivery.

share|improve this answer
1  
other than the partner suggestion, I like the comparison to the gym –  ZJR Mar 17 '12 at 3:54

Few points come to mind:

  • Set a specific achievable goal.

  • Make simplicity an objective to strive for.

  • Put a realistic project plan and try to stick to it.

  • Isolate research from delivery.

  • Analyze your performance (as you are doing here).

  • Put time upfront into design.

share|improve this answer
    
Am I reading it the wrong way around, or you're telling a perfectionist to put even more (and dedicated) time into design? Perfectionists should be kept away from design as much as obese should be kept away from food. –  ZJR Mar 17 '12 at 1:01
    
Thanks for your comment. You are reading it right. The OP says "I wander off into obscure corners when I encounter them", if one designs something in one way, one would not have to wander off. Also, I did not know that geoaxis is a perfectionist :) –  Emmad Kareem Mar 17 '12 at 1:08
    
dunno, really, inferred from "I make things more complicated than they need to be" –  ZJR Mar 17 '12 at 1:19
    
I do think that little more pragmatic planning is required. Some times I do too much planning and some times I just dive right into it. They both have failed me in the past. –  geoaxis Mar 19 '12 at 12:19
    
Pragmatic planning sounds like an interesting term. I can't see how planning can fail you. If you can't stick to the plan then either you have overlooked something or the plan is not realistic or you just don't care/want to stick to the plan. –  Emmad Kareem Mar 19 '12 at 17:35

What works for me is writing about 5 to 10 bite-sized tasks on my whiteboard at the beginning of the day. Nothing too ambitious. My primary goal is crossing those tasks off before the end of the day. If nothing else, just get those tasks done.

Of course I'll get off on tangents and work on many other things, but if the day is drawing to a close, I'll drop those tangents and jump back on that list. My motivation is that I want the satisfaction of seeing that whole list crossed off and starting a whole new list the next day.

It's amazing how much more productive I am when I do this.

share|improve this answer

For personal projects this level of procrastination is fine. They are more to have fun and learn than produce end products. If you were talking about client projects this would be a very different matter.

If your worried about your productivity on personal projects I would set yourself achievable goals with rewards. You also have to accept thAt shipping is a feature.its better to have an imperfect product now than a perfect product in the fa future

share|improve this answer

I have the same problem and have found the following 2 things helped me tremendously:

  1. Do functional specs up front. Even though it's only you, you don't want to get into a cycle where you keep changing your mind about things.
  2. Use The Pomodoro Technique. This helps prevent yourself from avoiding the tough stuff with time wasters.
share|improve this answer

Don't let yourself start another project until you finish the one you are working on. I end up piling too many things I want to do, that I don't finish any of them. If you get bored, juggle 2 projects.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.