Refactoring Snip-It Pro
I thought about building my own code snippet manager for years, but I actually didn't start writing one until Thanksgiving 2007. Since I had a decent amount of vacation saved up and the normal end of year Holidays, I was able to spend it working on the first version of Snip-It Pro and launch it in late January of 2008.
I struggled with marketing for months and eventually gave up on google adwords which didn't seem to do anything but cost more money for the keywords I thought were relevant. I fixed a few bugs and incremented the version with several small releases in the first few months. Still, I managed to get a few sales every month, each giving me the very good feeling that comes with a sale.
Since I wrote Snip-It Pro, I learned a lot about software development and have honed my architecture skills. The initial coding of Snip-It Pro was an exercise in going from vision to product as quickly as possible. Now I really want to pay off the original technical debt that has caused me to procrastinate in releasing a new version.
You see I have gotten a decent amount of feedback on how to improve Snip-It Pro and I actually implemented a number of those requests without releasing them. I didn't feel it was polished enough and knew I should start to look to refactor the code to make things extensible.
I also started working on a feature to integrate with the web based snippet code repository Snipplr. Even though I got most of the code done to create a web based folder that would allow users to save snippets and retreive snippets from Snipplr, I was hesitant to pull the trigger because the way I implemented the feature it was baked into the codebase. I also am hesitant to release such a feature into the core product, as some users might not want this option (I can imaging a user accidently sharing a sensitive snippet). What I really need is to re-architect Snip-It Pro to make it extensible, so my Snipplr integration can be added like an add in.
Other users suggested other features that wouldn't make sense as belonging to the core product. If I can introduce a plug in architecture, I can really clean up the codebase and make some features that I wouldn't have considered possible.
And so it begins. As I begin to design the interfaces and classes that will make Snip-It Pro a better product, I will post details.