My code is perfect. I never make a typo. Entire blog posts spring forth in an uninterrupted blur of keys. The proof is in my Git history: one (commit) and done.
None of that is true. My Git history is a lie. And I specifically switched to Git in order to tell those lies. The idea that you could rewrite history was in fact my main reason for choosing Git. I love source control systems because they provide a record of changes, but I often wished that I could control the record.
What I wanted – what I thought I wanted – was the ability to iterate and make mistakes, but keep the mistakes to myself. To hide the missteps so as not to confuse the larger story. “Here is how I went from nothing to something, each step a concrete, correct step towards the future.”
That was a mistake.
First, no complex idea goes from nothing to something without at least one misstep. Making mistakes is a key part of the process. I have learned so much by watching other people go from ideation to implementation and yet I had accidentally optimized my own development process for hiding that very thing.
The Expanding Universe (of Unfinished Business)
What’s worse about this approach is that it begins to infect more than just your commit history. I take years to publish open source projects because I worry that they are not “done” enough or “complete” enough for other people to use. I have a dozen nearly-completed – but not published – blog posts because I don’t know if they will be relevant to anyone else, if their thoughts are cogent, or if their meaning is balanced.
Every unfinished task is a mental burden that I carry around. I know about each and every one of those unreleased open source projects, every unpublished blog post, and it drains me to constantly refresh those things in my mind.
Publishing any of those items might be embarrassing – typos! bugs! worthless drivel! – but I have to assume that the mental freedom would more than make up for any short-term discomfort.
Optimizing for Something
There is a joy in completing things, in having a goal and achieving that goal. Not in moving the goal posts as you approach the finish line. Not in thinking that you can do more because of all that you already did.
Learning Git has been wonderful, and it has given me the flexibility to rapidly iterate on ideas and prototypes. What I need to do now is accept the fact that history is messy, and that the work you do to clean up that mess is just as important as what you get in the end.