If you have a software project in your head and want to get it done as fast as possible, how do you accomplish this task?

How do you plan your projects? My problem is, as I start, I am very motivated, I know what I want, and I start my project mostly without any plan, I just start coding and after a while I lost myself somewhere, I get depressed/burned out or something because the little projects becomes a big monster.

Sometimes I sit here coding or debugging one line of code for hours and just get nowhere because there is no plan, no visible end.


I think you more or less answered your own questions - make a plan!

Without a plan, the only goal you have is your rather blurry idea of the final product. And that goal is so distant, and the road there unclear, that the goal will feel like it is unreachable which has the effect that you lose motivation.

Instead try to set the scope from the beginning. Make a plan where you specify your v1.0 of the project and what it should include (this is to avoid feature creep during development). Make sure to start small and get things done rather than aim too big and never finish anything (you may always release a v1.1 later).

Then set smaller (reachable) subgoals where you implement a subset of the features. Having these subgoals assures you always have a milestone not too far away, which makes you more motivated to reach it. And for each milestone you get the feeling of accomplishment and actually moving forward to the final goal.

When setting these goals, make sure they are clear and non-ambiguous, otherwise you will not reach them and get that sense of accomplishment. Having a goal like "the gui should feel fast" is typically bad, since then you will get stuck in optimizations and never feel it is "fast enough".

And remember, the last 10% does usually take 90% of the time - so hang in there!


Deliver early, deliver often - break the project into smaller pieces, if it's an MP3 player, that hooks into the net, and rates songs, and is skinable. Then just build a basic console app MP3 player first, then add more features. This is the way pretty much all succesful projects, big or small, get done.


"Divide and conquer"

  • It's always a good idea to divide the project (idea) into smaller parts.
  • Sometimes it can help to have some desktop wiki, notes, mindmapping software (Microsoft One Notes, KDE Basket, ZIM, Tomboy, Freemind...) for quickly adding of ideas, divide the project into smaller logical parts, planning or reorder the project and (automatic) creating of a todo list

Use rapid prototyping

  • build the empty classes after the divided parts without implementation as soon as possible. The implementation of the details is coming later ;)
  • using of GUI tools which helps to quick design the interfaces and build eventually empty classes so you must only implement the event handler to have some "working" GUI.

Use software version control systems (SVN, CVS)

Often you make a mistake, or you find later that a earlier implementation was much better or you have a crash on your local system... It can save you hours or weeks if you can easy go a step back, have a backup or only take a look to an earlier version. Its highly recommend to have some other machine (may be the machine for your webserver) where you have a SVN or CVS repository

find the right tools

Take some time to find your best tools for you preferred programming language also with help of rapid prototyping for the user interface. Bad tools can be a show stopper, if you need more time to fiddle out with the usage of the tools instead of get quick results. The other side: it make more fun to work with good tools if you spend much, much hours with your project


want to get it done as fast as possible, how do you accomplish this task? As you can read in project management literature:

  • Decrease functionality

  • Decrease quality

  • Hire more programmers

  • Learn to work more efficient

My problem is, as I start, I am very motivated, I know what I want, and I start my project mostly without any plan, I just start coding and after a while I lost myself somewhere.

This is not a good plan. First of all structure you work with small sets of tasks you can accomplish. A second advice is (discovered it myself): dont try to make it perfect during the first iteration. Try to be producitive and enjoy your progress. After the first working prototype you can start to improve things. So until the first running prototype try to use as many detailed assumtions as possible.


If you already have it pretty much outlined in your head, depending on the size of the project I most often try to come up with an ordered list of very small tasks (things that are doable within < 1h). Your GTD app or bugtracker can help you there.

Then I simply work myself through that list. Every time I mark a task as done, I get quite a motivation boost since I actually see a quantitative accomplishment.


To not getting lost:

I was having the same problem, my solution was:

  • Always know the next step (use a todo list)
  • Always know which step you are in (use a todo list)
  • Write Unit-Tests this will help you to keep connected with the tool. Thus even after a month you can just sit and start coding without worrying that you break an old functionality.
  • Use CVS/SVN, know what you've done, and know that you can revert when ever you want

There so many good answers, I didn't want to rephrase, but this were my savers. Finally in my last project I'm following this and guess after 3 years I still rock in this huge project :)

Especially from other answers, these were quite crucial for me as well:

  • Divide & Conquer
  • Decrease Features
  • KISS

If you get stuck debugging one line of code, leave it. Move onto something else and give the difficult code a rest for a while.

This means the project is still moving along, and gives you time to think about the parts that still need work.


On top of all of the other great answers in here, there is something I can't stress enough.

Use the right tools for the right job

Whether it be deciding on a programming language, or rewriting code that has been done multiple times before, you have to consider the best option for you (or your team). If you know multiple programming languages, put your knowledge to use! This could decrease development time tenfold. Although you must be aware of drawbacks and consider them first and foremost. Such drawbacks/situations could include:

  • Decrease in speed
  • Decrease in portability
  • Decrease in functionality
  • Language familiarity with your team members (you would not choose a language hardly any of them have experience with)
  • Timeline
  • Customer preference (A customer may prefer you write code in language X, while it will run much more efficiently and be better for them in Language Y or Z. This is where social engineering comes into play. You must also try and convince the customer whats best for them, but do not cheat them and lie because it will help you get it done faster.)

...among many other factors.

As with rewriting code, don't try and reinvent the wheel where it isn't necessary. This could end up wasting substantial time in a situation where time is crucial. Although if the code can be improved upon significantly, that is a different story. Also do not "experiment" with new coding techniques within a client's application (especially financial applications), try it out on your own time. Don't get stuck on little bits of code, come back to that part later with a fresh and open mind. For my projects, I prefer to start small and build from there. Trying to implement too many things at once often gets very frustrating.


Slow Down and Plan

The fastest way to get it done is to slow down. It's taken me a long time to realise that if I think through the problems and possible solutions, then start to plan and write some code it's a lot easier.

Sometimes just thinking through what the actual problem is (and what solutions you have for other problems) can lead to solutions that require much less code and much less effort.

Once started, don't get drawn in to 'quick plan then hack hack hack'. If you're having to make lots of changes to your design, stop coding (back away from the kb!) and rethink the design parts.

As for motivation, set clear, achievable goals that enable you to deliver something quite easily and quickly. That way you feel like you're getting somewhere.

I hope that helps


I think you need to have techniques for getting the most function with the least code, because planning is like earning money - it's good to do it, and it's bad to need to.

I'm a strong believer in techniques for minimizing source code, even if it means doing things that are unusual or inventive or unpopular. I measure the value of a technique as the amount of planning it makes unnecessary.

domain-specific-language link

differential-execution link


Get yourself a plan, and a project management software example TargetProcess (it free if you are less than 6 developer)s they really help !!