Category Archives: Uncategorized

The Computer for the Rest of Them

If you’re a software developer, designer, or a high-tech computer user—Apple doesn’t care about you.

Oh sure, Apple wants you to write, design and create software and products for the Mac, but you are not the target audience for the iPad. I’ve read so much negative backlash about Apple’s latest device and all I can think is, “These guys just don’t get it.”

As software developers, we thrive on complexity. We have dozens of applications lit up in our Docks. As I’m writing this, I have 20 applications running, each with one or more windows open in four virtual workspaces using Spaces.

I’m a geek. I love this stuff. I even know all the keyboard shortcuts for switching apps and spaces and windows. I am a software developer with an engineer’s brain. I am not the person Apple was thinking about when they built the iPad.

So who did they build it for?

The rest of them.

Have you ever watched someone who is not a geek use a computer? I have. My father-in-law lives with us and I’m his support tech, so I get an up close and personal view of the anti-geek at work. Here’s a typical session for him:

  • He clicks on Mail to look at his email;
  • He reads a few emails and closes the window with the red dot in the upper left corner;
  • Then he clicks on Safari and looks at some websites in one window;
  • when he’s done, he closes that window with a click in the upper left corner.

He doesn’t quit any application. As many times as I’ve told him that he can simply hold down the Command key and press ‘Q’ to quit, he clicks the red dot. He doesn’t try to multitask, he doesn’t understand overlapping windows, and he gets very confused when he moves a window by accident and it doesn’t show up well on his screen.

When I showed him the video of the iPad though, he said, “I’d love one of those. It looks so much easier for me to use. My sister could even use one of those.”

For my father-in-law and millions of other people, clicking to run an application on the iPad, pressing the Home button to leave it so another application can be run is perfect. Millions of people spend all their time focused on one app. They read email, or browse the web, or live in Facebook, and the iPad gives them exactly what they need to do those tasks. The fast new Apple A4 chip inside makes changing from one task to another quick enough that there is no need for multitasking—especially with people whose eyes glaze over when you start explaining the concept behind running multiple applications.

The fact is: Real people don’t try to multitask, so they don’t see the iPad lacking this ability.

Personally, I love the idea of the iPad because I do all my RSS feed reading on my iPhone. When I take a break from writing software and working on my computer, I find a comfy place to sit and read on my iPhone. If I can grab my iPad instead, I’ll save eyestrain and my iPhone battery while improving my casual time. For me, it’s a no-brainer. I want one.

Is the iPad perfect? Nope. I think it needs front-facing video at least, but I do agree with John Brownlee that Apple probably left this out because it would make you look fat. This is the first generation of a new type of computing—the computer for the rest of them. Expect amazing growth in this space over the next couple of years.


Indie+Relief: Mac Indie Developers Helping Haiti

You get great software, Haiti gets financial help. January 20, 2010

I love the Mac developer community for many reasons and Indie+Relief is just one more example of how great it is.

Much thanks to Justin Williams and Garrett Murray for making this happen and to the 150 or so indie developers that are participating. You all rock!

No Thirst Software is participating as well, so tell everyone you know to hold off and buy software tomorrow, Jan. 20, 2010, if they were thinking about doing it anyway and help heal Haiti.

If you don’t want software, but still want to help the Haitian people who are suffering from so much death and destruction, you can find a reputable charity by using Charity Navigator.


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.


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.


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.

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.

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.


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.

Free or fee?

It’s impossible to survive in the software business without charging for updates. Early on in my career I remember thinking, “We’ll have so many customers that we can offer free updates and support for life!”

I don’t remember doing drugs at the time but I must have been pretty stoned to believe I could get away with that concept.

The fact is that software development is hard work and certainly not free. It takes time, research, buying books/training videos, more research, conferences and travel costs, still more research, and plenty of caffeinated beverages. And that’s just to create the product! There are many other costs in order to support and market your software and to run your business.

So if you charge $40 for your software and sell 2,500 copies, you gross $100,000. Sweet, right? But subtract taxes, operation costs, outsource fees for services like graphic artists, web development, credit card processing, and accounting and the picture starts to look a bit less bright. Remember too that you took eight to twelve months to get this software out the door and you weren’t making a dime on it during that time period and sales from these 2,500 customers happened over several months, so you might have to divide your net income over 24 months.

After shipping 1.0 you have to change hats and support the software by answering customer emails or forum posts, creating tutorials, and pushing out bug fixes. This all costs money and even if you do everything yourself, your time can’t be considered free.

You might even be tempted to price your software lower so you can sell more copies. Don’t fall into this trap! The more customers you have, the more your support costs rise. Even the best designed software has bugs and even if you squash all the bugs (you are my hero if you achieve this goal), you will want to add new features or adapt the software to a changing operating system or framework.

Remember that software is never finished—developers just take occasional breaks in coding to ship it.

So how do you cover the rising costs of support and the extended development for major changes to your product? Simple: You charge for updates. Now you can’t charge your customers for every single change or your software company will die a very public death with a lynching on your user forum and every blog in existence. The trick is to only charge for the big updates and to space them out well.

On the Mac, software convention states that you version your software with at most three numbers separated by decimal points: major, minor, and patch. This means that 1.4.2 is the second patch on the fourth minor release of the first release of that product.

Here are my rules for numbering:

  1. Patches are for urgent bug fixes and should always be free. These are supposed to be small and easy to test so you can get them out quickly. New features should only be included if absolutely necessary to fix a feature that went very badly in the last release.
  2. Minor releases are for features and less urgent bug fixes. It feels wrong to charge for minor releases.
  3. Major releases are for more dramatic changes to the product and usually are only free to new customers who purchased the previous release within a grace period.

Version numbers are not pure science; they are really for marketing. Developers have build numbers for tracking the absolute order of code changes so we don’t need the version for code management. Since the versioning is for the public then, why not plan your development based on a marketing timeline. Version 1.0 will be released in January 2009 with three or four minor releases to follow and a 2.0 release in July 2010. And you can charge for version 2.0.

Your schedule may get messed up if you are basing your 2.0 release on new features in OS X and Apple delays its release but overall, you can timeline your software changes and make your customers happy while providing your business with enough income to thrive and continue.

How much should you charge for a major release? I like the 40 percent rule of thumb. If you charge $50 for a product, you can charge about $20 without upsetting your customers. If you have done some amazing updates in software functionality, you can even charge more than that. If you’re Apple, you can charge the list price.

That’s not a cheap shot at Apple’s iWork and iLife suites; I have happily paid for updates to those (not each one, but many of them) because the changes are typically significant and the original price was a bargain compared to products from companies like Microsoft and Adobe. To paraphrase Mel Brooks, “It’s good to be a hardware company.”

How often do you ship a major release? Every 12 to 18 months is a safe bet. If you do it more often, your customers will feel like you are taking advantage of them and too much longer than that period and you’ll probably be running low on cash flow. Remember that you are trying to give your customers significant improvements in your products with a major release so they feel good about paying for that update. This means that you’ll have to spend significant time in design and development.

You have to balance your geeky code persona with your public marketing face. Every time you go into a coding phase, you need to think about how this affects your release cycle, which for microISVs is our marketing plan. My marketing plan for MoneyWell has been planned out through the 2.0 release.

When I released MoneyWell 1.0, I had a certain feature set in mind for that product. Naturally, I couldn’t fit all those into the first release and I had a deadline to meet so I shipped it without everything in it. I decided at the time that I would charge a discounted introductory price of $39.99 instead of the $49.99 I had planned and would raise the price once the feature set was complete.

Development went slower that I wanted so it took until this month and the 1.4 release to meet my initial spec. Instead of eight months, I burned fourteen. It’s not the first time I’ve been behind on a schedule and won’t be the last. The upside to this release was that many customers were shocked by the magnitude of features in it. They couldn’t believe that I wasn’t charging for this release and calling it 2.0.

I probably could have, but I was sticking to my original plan. MoneyWell 1.4 was designed to work under Tiger and the 2.0 will be Leopard specific—I wanted my Tiger customers to have direct connect banking and several of the other 1.4 features. I’m hoping by the 2.0 release that most of them will have decided to move to Leopard and will be able to enjoy the cool stuff I have planned for that product.

In between the 1.4 and 2.0 releases, I’m developing and shipping MoneyWell Mobile for the iPhone. Since it will sync with the desktop version, there will need to be a MoneyWell 1.5 release. MoneyWell mobile will not be free but the 1.5 minor release will. By the time 2.0 ships, our customer base should be large enough to allow the small upgrade fee to cover the development time and expense that was invested in 2.0.

The bottom line: Plan your releases. Plan to charge for some of them. Plan to spend more time and money on all this than you originally planned, and you’ll have a business instead of a non-profit organization. The best way to serve your customers is to stick around as a software company so you can give them what they need. They won’t mind paying for great service.


Let’s Talk About Marketing

If you’re interested in marketing at the microISV level or just like listening to geeks trying to sound professional while talking over Skype, check out the latest installment of The Mac Developer Network Year One podcast hosted by Keith Alperin of Helium Foot Software:

Mac Software Business Year One Episode 3: Marketing

In addition to Keith, Steve “Scotty” Scott and Gus Mueller return for this third installment to discuss their marketing efforts and related microISV wisdom. Of course, I’m in the mix too (probably talking too much) but don’t let that stop you from checking it out.

Also while you’re there, make sure to join the The Mac Developer Network and support all the wonderful content that Scotty and his crew collect and produce for the Mac developer community. It’s great stuff!