One approach is to write a skeleton man page,
this way you can define exactly what you wish to accomplish.
To be honest though I usually simply start by
implementing the core algorythym or interesting
features of the project and extending and patching holes
until I have a functional unit. I do come close
to practicing what I preach though, usually
before writing any code or after having written
very little the idea will have been gnawing at me
for at least a few days and I will of thought
of features and possible implementations for
various portions of the code. I reccommend keeping
lots of paper on hand at all times.