This blog centers around a challenge that I made to myself. As I previously wrote, this blog grew out of the goal of recasting my company, BinarySwitch, as a product based company.
The Challenge, simply, is this:
Make one software release each week.
Why a release each week?
There are several reasons why this makes sense to me:
- The release of a small revision or proof-of-concept each week is better than no release at all.
Previously, I was hampered by the desire to build the perfect product. I wanted to “knock people’s socks off”. Well, you can keep your socks.
By striving for perfection, I made myself immobile. While I certainly have been making good progress “behind the scenes”, my desire to protect my work from criticism about what it couldn’t do also prevented it from being appreciated for what it could.
- Working on many products simultaneously allows me to follow my passion rather than my pride.
My previous approach of trying to perfect the product before release was due to foolish pride. I didn’t want to embarrass myself by releasing products that didn’t live up to my vision of what the product could be. Further, I didn’t want to ask people to pay for something that I knew wasn’t the best I could do. The trouble with this mindset is that the scope of each product grew so large that I grew tired of it long before I reached the end. This meant, of course, that the product’s development had turned from an entertaining hobby into just more work to do.
Having multiple products in various stages of development at any given time allows me to work on the product I feel like working on, rather than ever feeling like a given product is the one that I have to work on.
- To release, each product must, at the very least, be able to compile.
A good rule of thumb for programmers is to never leave code in a state where it won’t compile.
With many of my products, I have often not followed this rule, and have abandoned projects while in the middle of a refactoring. This is analogous to a mechanic completely disassembling your car’s engine, then got distracted by other customer’s vehicles and when he came back to your motor, wasn’t sure what he was doing in the first place.
By committing to a release each week, I avoid this, which forces me to complete whatever changes I’m making to the software so it’s always ready for the next “tune-up”.
Why give away your work?
Well, first, the software I’m producing under the guise of BinarySwitch largely doesn’t feel like work to me. This is my passion, my art, my craftsmanship. In many cases, this software is something I would have built anyway, and I’d much rather share it with others than keep it to myself.
Secondly, if I asked you to pay for it, I’d lose my autonomy. You’d be completely justified in expecting the software to have a certain level of quality, or for BinarySwitch to offer a certain level of support for the software. By keeping the software free, I am keeping myself free from the software.
Lastly, I may eventually charge for some of the software. This is putting the cart before the horse, but I’d rather address this now. Once any product reaches a level of quality worth paying for, the licensing model may change. That said, I would expect to keep any prices reasonable. Fair enough?
When should I expect to see these releases?
Due to work and family commitments, these releases will most likely become available late Sunday nights.