Tuesday, November 10, 2009

Grabbing a One Finger Discount

The Mac developer community is so great because of promotions like this: One Finger Discount.

Daniel Jalkut of Red Sweater Software fame decided that while MacHeist was running its promotion giving away free apps, he would start a simultaneous promotion allowing the rest of us to get in on the buzz. All we had to do was offer a 20 percent discount (Get it? Five finger discount = free so one finger = one fifth or 20 percent).

What does Daniel get out of the deal? Nothing. He's just being a generous member of the Mac Developer Community. So creative, so cool. Way to rock Mr. Jalkut!

Now go buy some software before this deal ends. You'll find MoneyWell and Debt Quencher there as well.


Thursday, October 15, 2009

Good Enough

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.


Thursday, July 23, 2009

WWDC: Worth it on so many levels

When I wrote this, it was so long ago that Matt Drance was still an Apple employee and not one of us crazy indie devs. My apologies for the now flashback WWDC post.

Apple's World Wide Developer Conference (WWDC) was earlier this month from June 7 through 12 and I was thrilled to be in attendance for my second year.

The official main reason to go to WWDC is to get edjumacated on all the new Apple hardware and software. My main reason is to connect with other developers. The information about new technology and APIs is critical, don't get me wrong, but I can't watch videos of me hanging out with newfound developer friends—or at least I hope I can't. I'm not sure I want those published. The sessions, on the other hand, are published by Apple so I can watch some that I missed.

This year was even better than last because I knew exactly what I wanted to do. Last year I was following the advice of others; this year I was on a mission to really enjoy every moment of the trip. I knew enough to arrive on Saturday so I could relax and wander about San Francisco a bit before the chaos of the week began. This enabled me to register early on Sunday and meet with people on that morning and throughout the day.

Making Connections

A smart move on my part was putting together the cocoaFusion: podcast with Danny Greg. It's not like I planned that far in advance for WWDC but having that podcast gave me a chance to meet more developers through the "I listen to you on cocoaFusion: introduction" and it also opened up doors for a couple of non-Apple activities.

Since Danny works for Realmac Software and André Pang used to work for Realmac but now works for Pixar, I was invited to go with them to visit this animated movie wonderland. It was a great tour and André was very generous with his time. They also slipped me an invitation to the Pixel Assembly party that was co-hosted by Realmac and I was able to hang with the ADA award winning Sofa crew. At this event, I also sat and talked with an Apple Xcode engineer and another fellow that worked with Apple on its website store. Both these gentlemen were great to exchange information and ideas with and further proved that not all technical help comes from WWDC sessions or labs.

Not everything went smoothly that night. At this party, I had an Eric Stratton moment when I met Craig Hockenberry, "Hi, Kevin Hoctor, MoneyWell, damn glad to meet you." So eloquent. Such a firm grasp of the English language and so very interesting to listen to. Sorry Craig, I'll step it up in 2010. In my defense though, your fame and your height were both a bit intimidating.

Unplanned and Unexpected

Sometimes, cool things happen at WWDC without your even having to make them happen. For example, young Mr. Greg tweeted that he was going to a Core Data Lab so I asked if he would mind me lurking on his session. (I didn't have any questions on my own but thought I could learn from his.) He said no problem so I went down to the lab to meet him. As it turned out, he was delayed so I thought I'd park myself at the dining tables near the lab and get some work done. As I wandered over, I saw the Karelia Software guys, Dan Wood and Mike Abdullah at one of the tables so I plopped down across from them. As it turns out, I had a great discussion about how to hire a support person and their feedback on the whole experience. Unplanned, unexpected, yet invaluable advice.

Several other serendipitous situations like this one occurred throughout WWDC with me on the giving end at times. Hopefully I was as helpful to others as they were to me.

I finished up the week in style by standing outside Moscone West talking to Matt Drance, Mike Lee, and Scott Stevenson then I turned around to say hi to John Gruber (just happened to have one of my Daring Fireball T-shirts on so I looked like a proper fanboi) and then proceeded to make a fool of my self. The person to the left of John said he had several people talk about who they met at WWDC and Kevin Hoctor was in their list. I said, "Thanks, and you are?" and then Brent Simmons introduced himself.

Now this would not have been so embarrassing if I hadn't spent nearly an hour last year at the Chieftain talking to Brent who came over to our table to ask who we were and what we did. I apologized and said that he looked different and Gruber came to my rescue saying that Brent has lost weight. You are looking really good Brent. I'm still an idiot but lets call this one your fault anyway, okay?

Good Times

In addition to learning plenty and making a fool of myself, I had a ton of fun. My most memorable moment is probably standing in line for the Keynote with several of the Realmac guys, Mickey Roberson, and Michael Fey (a.k.a., Mr. Rooni), who started the infamous Steve Jobs rumor.

Whether it was sharing software ideas or code, checking out early versions of iPhone apps, or just enjoying great food, drink, and conversation, there was a constant stack overflow of good times. Thanks to all the guys and gals that took time to say hello to me (even the quick 'hi' by Sophia Teutschler on her way to the bathroom).

If there was any concern that my second year at WWDC wouldn't stack up to the first, that's been eradicated. Barring natural disasters or loss of limb, I'm planning to make sure I set aside the time and money to make this event every single year.

Sunday, June 21, 2009

Growing Pains

I believe the two hardest periods of a new company are when you first start it and when you grow beyond being able to handle every task yourself.

When you give birth to a new business, you have to work hard to save pennies and handle as much of the operations yourself to survive financially. This is good because you get to design every part of your new venture and structure it to be mean and lean.

For a software start-up, this usually means automating as much as possible. As sales grew with No Thirst Software, I went from hand generating license files with AquaticPrime to PHP scripts that generated and emailed those type of files to a full database back end that simply emailed license codes and sent the license files directly to our software when it pinged the server.

This was easy automation to do because I'm a programmer; I write code and this was just code on a web server talking to code in my Mac software. No big deal.

Other roles are harder to automate. I have a CPA to file my tax paperwork and do the heavy lifting in accounting, but I still have to maintain the books, track expenses, and fill out paperwork (and I hate paperwork). The bookkeeping automation really needs a person, which means hiring and management duties. It's not as comfortable a task as adding some PHP scripts. I'd love to have my wife, Judy, jump in here and tackle this role but she's pulling in a steady paycheck with health insurance benefits for the family so that's a tough call. Are we ready to completely depend on our little company for all our financial needs?

Another time sink is support. I love doing support because it helps me understand how our customers use our products and I find ways to improve them. MoneyWell would never have grown as fast as it has in the direction it has without me doing tech support. I have been toying with the idea of delegating some of this to a part-time person for a while but it was incredibly hard for me to let go for several reasons.

Fear and Workflow

The first was a concern that our support quality would drop. I worked hard to create a reputation for outstanding support and I didn't want that to get lost.

The second concern was my time to train a support person. Handing off support is great if the person taking it can answer the questions asked. Delegation without education is like asking my CPA to finish my Objective-C code—both crazy and stupid.

The third concern was workflow. My workflow was impossible to scale up past two people and even then not really effective. I used IMAP services to file emails into various folders for resolved issues, those needing action, and those needing to be fixed via code changes.

This workflow issue was the biggest of the concerns by far. If I couldn't automate the workflow more, I couldn't hand off support. In the past when I had a larger company with a few dozen employees, I wrote my own customer service system. I liked it because I had control over it and could improve it whenever we needed new functionality. Today, I have plenty of software to write that could be making me money so the thought of spending my time writing an internal app was out.

I looked at other products I had used in the past but they didn't fit my desired flow. I also looked at FogBugz, but the design felt too complicated and alien to the simple design of both MoneyWell and Debt Quencher. I really tried to like it but I knew that I'd never adopt it.

Then I started to use Lighthouse to track my bugs and features because there was a cool OS X front end for it, Lighthouse Keeper. Even without Martin Pilkington's desktop interface, Lighthouse was really nice to use. It didn't have every feature, but what it did have was implemented nicely.

I found out that Active Reload/ENTP was creating a customer support system to match up with Lighthouse. It was still in beta so I held off riding this bleeding edge of technology and pushed the task of delegating support onto the back burner.

The Wakeup Call

My wakeup call came in two parts. First I was asked to include MoneyWell in the MacUpdate MUPromo Spring 2009 Bundle. About 43,500 bundles later, I learned a lot about how well my sales and licensing automation was built and how little code I was writing when handling a minor avalanche of support. Halfway through this bundle, I left for San Francisco to attend Apple's World Wide Developer Conference (WWDC)1 where I fully woke up.

It was in a talk given by Wil Shipley at an overcrowded Cocoaheads meeting held at the SF Apple Store. Even as Wil talked about not doing support as a developer, I resisted. In my head I kept saying, "I need to stay connected to my customers. This has helped me improve my software." He finished and I pretty much had blown him off. Then later that evening I started thinking about all the code that I was not writing and how I was cheating my customers of new versions. I wasn't as worried about my competition as I was about not shipping the very best products because I was devoting my developer skills to support instead of new code. Late that night, I pulled up the Tender Support website and signed up.

Letting Go

While at WWDC, I talked to Judy about hiring a support technician. We tossed around a few ideas and I resolved to make sure it happened once I got back home. Four days after I landed at Houston Intercontinental Airport, I had a support person—my son Patch. He had worked with me before redesigning the No Thirst Software website so I knew what he could do when he put his mind to something, but I wasn't going to push him into the business if he wanted to go a different direction. Thankfully, Judy had discussed this option with him while I was away and he came to me asking if he could help.

This made sharing the support role easier. It wasn't going far, just to another room in our house, and I could pull Patch into my office to give him training whenever necessary. If he hadn't stepped up, I would have advertised on our company user forum and this blog for a person to fill the role. After Patch, my preference would have been a MoneyWell user that didn't need training on the operation of our flagship product.

Tender Support

It's only been a week of working with Tender and a few days of having it live for our customers to use, but I'm thrilled with it. The discussion forum is much more structured than our old Google Groups forum—we can mark issues as open or resolved, assign priority queues to issues, and, best of all, support emails go to the forum so they can't get lost in a cluttered inbox. It's not as large and in charge as FogBugz, but that's part of its appeal. We're even more committed to offering timely and effective support as our customer base continues to grow, and Tender will help us stay on top of our game. My next blog post will talk more about this customer support tool and why it fits No Thirst Software so well.

1. If you're a developer on the Mac or iPhone and you haven't attended WWDC yet, put it on your calendar for 2010 and start saving money now.

Thursday, February 19, 2009

Sharpening the Saw

As a Mac ISV, I'm fairly isolated here in The Woodlands, Texas. That's why I love it when I get a chance to get out and meet with other developers and small business owners to discuss ideas and sharpen my skills.

Last year was my first time to attend Apple's WWDC and it won't be my last. There was plenty of learning to be had from the speakers at the conference but I gained just as much knowledge, if not more, from other developers who I met there. The fellowship was worth the price of attendance alone and the connections I made are still reaping rewards.

One conference that I'd love to go to but just don't have the time and budget for right now is the NSConference run by Steve "Scotty" Scott of The Mac Developer Network fame.

The speaker list is great and there are so many developers that are going to be there that I'd love to hang with. Unfortunately, I don't think I could sneak away to Europe again without taking my wife (I've been there several times and she hasn't at all). I think my daughter would have a throw down fit too so the budget wouldn't be just the inexpensive conference and lodging costs plus a bit of airfare but instead, it would turn into a family vacation with all the requisite tourist activities—more than I care to spend right now.

But if you are in Europe or can invest a little time and money on travel, plan on attending this conference. Then you can come back and leave comments here about all the cool stuff I missed and make me very, very jealous.


Friday, January 09, 2009

Giving Back by Podcasting

The Mac developer community is amazing. So many developers share ideas, advice, and even code that I felt immediately indebted to do this myself after being helped by so many of them.

Unfortunately, it's hard to share advice when you're not sure if you have any but after a couple years of coding Objective-C, the OS X language of choice, and Cocoa, the OS X development framework, I'm excited to become more like those generous code warriors.

With a lot of help from a very bright, young Mac developer, Danny Greg, my contribution to the community is a developer podcast that has just gone live. Check out cocoaFusion: and let us know what you think.

The goal is not for us to come across as "experts" in the field of Cocoa development but instead to share our struggles with this framework and solutions we've found. Hopefully, this will be a good start to giving back to the community that has given so much to us.


P.S.: I also have to give huge props to Scotty (a.k.a., Steve Scott) at the Mac Developer Network for introducing me to Danny and for creating such enjoyable podcasts that I wanted to follow in his footsteps. If you're a Mac developer and you're not signed up for MDN your a) insane, and b) missing out on a wealth of knowledge in a very entertaining format.