When I am modifying software in a fairly significant way, I generally first hack out a working version, and then clean it up to produce a minimal set of changes to submit to the original author. In cases where there are a number of logically independent chunks, I like to submit the changes in separate chunks. At other times, I have some experimental changes which should not be submitted. I recently discovered a really great visual diff program that makes my life easier for these job: Meld. With it, my workflow is approximately the following:
I used to essentially do this process manually, with the help of diff and patch. I never thought I needed a graphical diff program until I played with meld. I still like to read unified diffs in plain text, but for certain tasks Meld is a much better way to do things.