An honest mistake
Close to ten years ago, I received my first angry e-mail message from an enraged prospective user of my application "Uli's Moose". Uli's Moose is a free, simple application that I did in my spare time, on my own dime, on a student's pocket money. In essence, the sender of the message told me in colorful prose that he'd tried to download the Moose from several web sites and tried to run it several times, and it had failed every time, and asked why the blazes I didn't just stop foisting such crap on the world.
What I did, was send a short, terse e-mail back, saying "You get what you pay for, asshole."
I shouldn't have.
It's not that anything bad happened because of that. I never heard back from this person. It relieved my tension to "get them back". I never got other complaints from people with similar problems. As far as I know I didn't get bad-mouthed on any forums (there was no Twitter back then, nor were there Mac App Store comments, and few people bothered leaving angry comments on VersionTracker.com). But I don't know what that person's problem was. There could have been a bug. There could have been illegitimate mirror sites that I didn't know about that drove this person to such anger. Had I kept my cool, had I simply and politely replied and asked for more detail on his problem, I might have gained a happy user.
E-mail, forum postings and other digital channels always need to be seen in context, just like usability. And we often don't have this context. If someone is abrasive, angry or hurtful, chances are it comes from somewhere. Often it is just the combination of anonymous, inhuman comment forms and previous bad experiences with big, anonymous entities. If you expect to be mugged, you'll see a potential attack in every sudden movement around you. If you expect to be screwed by a software vendor, you see an attempt at trickery in every honest mistake a small solo developer makes.
How much for the vowel, Vanna?
In a recent minor controversy about the move of various companies to a Mac-App-Store-only distribution model, many have focused on the price of the applications and the disproportionate relationship of the complaints leveled at them.
I will instead say that the price itself only has a bearing on the whole matter when you consider that low-priced applications are generally bought at higher volume. As such, there are simply *more* people to cause a ruckus about anything they don't like. Strength in numbers, if you will.
The actual problem was not moving to the app store, it was the devaluation of words.
Words? Yes. Not just any words, but of the word the developer gave the customer during the purchase of the software. We all learned as children that when you give your word, you can't just take it back. In law, this is called a verbal contract. In this case, there actually existed a written variant in the license agreement shown to the user before the purchase.
Many of the developers who received angry customer comments actually had made some promise. Be it exclusive access to a pre-release version that never happened, or be it free upgrades until the next major revision of the application. They were written down in a contract, and the nice thing about contract law is that it forbids that one party unilaterally change the contract on the other without giving the other the option to back out of the contract (e.g. by offering to refund them). At least that's how it works in many countries.
Now, ignoring the legal (non-)ramifications of changing the terms of a contract, what are the social ones? How do you deal with people who tell you one thing, then do something else? Who simply "forget" terms of an agreement you made a while ago, and when reminded of them, decide to simply ignore it anyway? You don't rely on them anymore? Mistrust? Paranoia?
But how does it look?
Now how does this look from the outside, to the user? Keep in mind, they've already purchased from you. They've made an investment in a good piece of software. They may have arranged their workflow around it, they may have input their data into it, and they have spent valuable hours of their lives learning to use your program. This may sound exaggerated, but it's something they can't get back, and it is something that is worth more than the price of purchase of most apps.
They made this investment of their own, personal resources on the assumption that you would keep developing your software. And they read the license agreement and expect you to hold up your end.
What you effectively do if you suddenly go back on your promise, is trick the user into buying software under a false pretext. It is not about the money, or about there being no future free download. Heck, when you buy a piece of software, you never know how many updates there will be. HyperCard 2.0 was preceded by HyperCard 1.2.5. There was never a version 1.5, nor a 1.9. No big complaints from anyone.
The whole matter is simply one of perception and trust. If you release a version 3.0, you tell your users that there are some great new features and it is worth paying for it again. You are sending a message, and users are willing to pay. If you release a version 2.5, it is just another incremental update. At best, it's the halfway point between two updates, and it gets a minor additional feature or so.
I doubt anyone would have complained, had this very same binary been shipped saying 3.0 instead of 2.5. But now it's too late for that. The bigger issue is that the developer forgot what promise had been made. That is unprofessional. What else will that person forget?
From this point on, it is all about how you get out of this situation again. You can't really re-label it as 3.0: You already showed your hand, you already told people that this is at best a halfway point in your head. You can just ignore it. Swallow the complaints, brace yourself against the storm on the internet and on Twitter -- which all your new Mac App Store customers will never get to see anyway, and loyal fans who do the math and realize there is not much of a difference will probably ignore. Swallow the slight loss in reputation and trust.
Or, you could take the classy way out, and fall to your knees:
Tell your users: I screwed up and simply forgot about this clause, it wasn't intentional. But I made this promise to you, and you were there for me when I started out. I owe you one.
So I will give you this update, maybe even a few more updates with bugfixes via the traditional mechanism, in parallel with the app store. And in one or two releases, I will release a 3.0, and all this will be over. But I will have done right by you, and that's what counts.
The funny thing is: I'm pretty sure that following that last approach, even if the additional updates were tiny, would cause so much positive PR that it'd probably help sales. Instead of having people complaining about how you didn't keep your word, you would have people saying: Well, the developer goofed, but in the end came through. I'll recommend that to my friends if they ask what to buy on the app store.