Usually I write a little code, commit what it is supposed to do, then fixup all the little edge cases and bugs that come naturally. But what's important is that first commit is sets up a little problem with a clear goal, and then everything afterwards works toward that goal.
Two extremely useful aliases:
[alias]
fi = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
ri = rebase --interactive --autosquash
First alias allows me to create a commit prefixed with fixup! very easily. So workflow looks like this:
In Code Complete McConnell writes an example in which he writes the main ideas of how his code will work as comments in an empty file.
so maybe one would go on write this comments, commit them as the 'How', and then in the first commit message write the 'What'?
then do the first commit and continue from there....
making the 'How' work