February 1, 2018
Sunk Cost, Code and Emotional Investment
In a Practical Application of DRY
, I discussed sunk costs as part of Sandi Metz's discussion on the Wrong Abstraction
. In my work on RBTLIB
v0.3.0 I encountered another element of sunk cost: emotional attachment to your implementation.
I put in considerable effort between RBTLIB v0.2 and v0.3.0. This effort included at least 2 rewrites of the core algorithms for traversing the resource tree returned by Review Board. In my case, the core approach of using the Composite Pattern and Named Tuples didn't change. Their use did.
The issue was primarily due to grey areas in my knowledge of Python and the constraints I placed upon my implementation -- avoiding meta-classes and inexperience with using Python's __call__ method effectively. (OK, I didn't know __call__() existed when I started my implementation.)
Frankly, the situation drove me to new levels of frustration. Each time my frustration peaked I had to step back, build the stamina for another rewrite and push through.
Interestingly, I thought I was disciplined. My emotions kept telling me my broken implementation would be ok if I just spent more time on it. Rationally, I could tell that I was stuck. Stealing myself to rewrite took significant effort.
Each time, I created an experimental branch with the idea of exploring what was wrong with the implementation. Every time I did that I had a breakthrough. The two experimental branches have been merged to master and the implementation is better for it.
I'm currently on my 3rd rewrite of RBTLIB v0.3.0. I am more confident that this implementation will work but I'm procrastinating because I am still unhappy with some aspects of it.