My blog posts have been few and far between because I've been facedown in code for MoneyWell 1.5 and the related iPhone release. I have a feeling this won't change anytime soon, but I'm sneaking in a quick post to fill the gap.
This development cycle has been particularly difficult for me because I've had to venture into some uncharted territory. My iPhone development skills are less than expert and MoneyWell 1.5 is my first Leopard application, so the changes to that development are just enough to slow me down slightly.
The combination of acquiring new development knowledge and my tendency to want to do more in a release than is necessary caused several bouts of anxiety and doubt. Stupid questions like, "Can I get all this done in time?" or "Will I get all this working together perfectly?" slice and dice my productivity. My results don't always match up with my vision, which can lead me to mental self-mutilation.
I too often think, "This is not going to be good enough to sell enough so I can continue growing my company." If you haven't guessed yet, I'm borderline insane.
The fact is that there are plenty of indie Mac developers who would kill to be selling enough software to ditch their day job or drop consulting gigs. Additionally, I have probably 20 times more customers than I've had in any other venture I've started. My customer base is, for the most part, very complimentary of our products. This should be indie nirvana but then again... I'm insane, remember.
My "good enough" is most definitely well past a sane developer's good enough. There is no reason to expect a product like MoneyWell to be as full featured as products that have been on the market five to ten years longer or are being designed by teams of developers and designers when I'm still basically a one-man shop. I tend to take every compliment as being too kind and every complaint as being right on target.
Software development is iterative. My philosophy matches Apple's: a subset of features should be very well executed and polished; new features won't appear until they can be implemented cleanly; and most people only care about 20 percent of a product's feature set. I could add dozens of new features quickly, but my user interface and flow would suffer and, for me, that isn't good enough.
This philosophy is quite sane.
The insanity comes when I forget that I'm developing software the right way for me: balancing my work and family life while still providing a quality product for my customers. What I have planned for future releases should make 80 percent of our customers ecstatically happy and 20 percent will still wish I had done more sooner no matter what I add to the software. The fact that I don't have every feature I have ever envisioned for MoneyWell finished today shouldn't make me crazy—there should a product timeline for the future.
So, the bottom line is: what I'm doing is good enough to keep my software company growing and the majority of my customer base happy. I don't need to lower my standards but I do need to reassess my expectations of what I can accomplish given that eating and sleep seem to be a necessary evil.
I have already taken steps to offload some support and even brought in help to code MoneyWell for iPhone so it can get finished soon. I should probably have been finishing a 2.0 product instead of a another minor release, but I can't go back in time and retract promises I made. I can only watch my comments and promises for future releases.
If, like me, you're running an indie software company, strive for excellence, polish every detail of your work, but always make sure to enjoy what you're doing. Shipping any software is always better than coding vaporware. Chances are if you truly care about your customers and the software you deliver to them, what you're producing—no matter how shy it is of your ultimate goals—is probably quite good enough.