Hard to get motivated some days

I’m wrapping up day two out of the five-day vacation I have for Golden Week, and have not quite gotten as much accomplished on getting the new version out as I had hoped.

Task list to embarass myself into working hard tomorrow:

Bingo Card Creator 3.0

  • Client connects to server, validates license key
  • Server accepts connection from client, validates and if necessary reissuses license key
  • Client contacts server, server saves word list to database
  • Client-side GUI for saving word list to server
  • Client contacts server, server responds with word list
  • Client-side GUI for loading word list from server
  • Client contacts server, server responds with list of client’s word lists
  • Client-side GUI for loading word list from server
  • Client contacts server, server responds with PDF of specified word list
  • Client-side GUI for configuring PDF
  • Client-side GUI for saving PDF
  • Update license agreement to clarify usage of server
  • Client requires acceptance of updated agreement to use server
  • Set e-junkie to use automatically generated license keys instead of saved ones to stop reissuing the same key (sidenote: my fault, not theirs — I used the same key list for the CD version and download version)
  • Update PAD file to reflect Bingo Card Creator 3.0
  • Recruit Mac testers for BCC 3.0

Bingo Card Creator.net (my internal name for the web app version)

  • Set up staging.bingocardcreator.com for testing
  • User account page — edit name, email, password, Registration Key, etc
  • User dashboard — display existing lists, printouts
  • Word list editing workflow
  • Printing workflow
  • Generation of bingo cards PDFs
  • Cache saved PDFs to disk
  • Rewrite content publication to use Prawn & ImageMagick instead of laptop automation
  • DelayedJob integration to remove PDF generation from HTTP request/response cycle
  • Lightbox to present download BCC or sign up for BCC.net choice
  • Lazy logins (no login for guest mode, upsell to free trial)
  • Free trial upsells to $$$

Random tasks

  • Integrate signup with MailChimp API to do autoresponder series for hints & tricks
  • Set up mailing list for newsletter
  • Resize Slicehost slice to 512MB to accomodate anticipated need for DelayedJob instances and extra Mongrels
  • Blog about why I’m finally spending time to make a web version
Comments Off

Major Progress on BCC Web Application

I did some more work on the upcoming BCC 3.0 this weekend, which is going to coexist on the desktop and the Internet.  (Feel the power of Web 2.0… several years late!)  

The biggest challenge with BCC coding-wise has always been laying out the bleeping cards.  Mostly, this is because Java has very primitive printing facilities.  I render everything to a Swing canvas and then essentially print the canvas, and Swing is most definitely not designed as a printable format.  This exacerbates some issues which are always going to be hard, such as “How do I automatically size text so that it looks visually appealing without requiring user input?”

Since printing in a web application is sort of hard to control (CSS and usability issues galore), I’ve opted to generate PDFs, which is a quite common choice.  The Prawn library (a new-ish alpha-quality Ruby library for PDF printing) is an absolute lifesaver — I’ve got better behavior out of it in 8 hours of playing around then I’ve been able to coax out of BCC in 2 years.  There is still some ugly spaghetti code hiding in the bowels of it, but its literally a quarter of the size of the stuff in BCC itself, and much, much more comprehensible.  

Feast your eyes: 

(I know, Roald Dahl’s name is screwed up due to some sort of encoding issue.)

Here’s the same card printed in Bingo Card Creator:

I really prefer the Prawn version to the Java version for out of the box behavior:

  • prettier autosizing (particularly for the column headers)
  • better line breaking logic
  • better centering of the words in the squares
  • capability to add titles (often requested by customers, never implemented in Java because it would essentially require a rewrite of code that I scarce dare to tread in)
  • capability to add watermarks/footers (often requested by, erm, me)

Printing is, by my estimation, about 90% accomplished.  (I still need to work out some internationalization kinks and then figure out how I’m going to generate the PDFs and store them outside of the web request/response cycle — I don’t want someone printing 800 cards for a Fortune 500 retreat to lock up the server accidentally, but I do want to support that use case.)

After I get printing done I still need to:

  • Code GUIs for word entry, loading/saving lists, etc.
  • Figure out user management (usernames/passwords, forgot password, restricting access appropriately, etc)
  • Extend my admin interface so that I can address issues that people have, should they have any.
  • Figure out how to integrate the web app into my site without confusing the heck out of people.
  • Rewrite a whole lot of copy.  (See the above point.)
  • Sprinkle my pages with copious sign-up-for-webapp-now calls to action.
  • Adjusting the BCC client for close-to-seemless integration with the website (save to/load from Internet)

Now that printing is mostly working the technical issues are all downhill from here.  My biggest worry is the perinneal one for web applications: can I convince non-technical users that “web sites” are worth paying money for?  This is one of the main reasons I’m not planning on deprecating the downloadable version anytime soon.

Comments Off

Bad Places To Have Bugs: Pricing Logic

About a week ago I noticed a deficiency in my understanding of how my shopping cart actually worked for purchases of 2+ units: specifically, e-junkie thought they were mispriced and was bouncing the transactions, resulting in a customer getting charged but not getting their key automatically. I only get about one of these orders a year, so I hadn’t seen the behavior yet. *sigh* So I did something I thought I would fix it: turn on variable pricing, then set prices manually through my cart. Done, right?

Wrong. The next day, I started getting orders at $20.00, the new price floor. I looked around for the possible cause and figured that if you had Javascript disabled or clicked through my cart before its Javascript could load, you’d get taken to e-junkie’s fallback hosted cart, where you’d be given the option of modifying the price. For some reason it defaulted to $20, despite $29.95 being set as the default price. Not quite sure why. So I fixed it, by making the default item be a single copy at $29.95 and only having the pricing logic apply when buying through my cart.

But still the $20.00 units kept coming. Then it hit me — it wasn’t actually that edge case, it was a different edge case — involving an ugly mess of Google Checkout, e-junkie, and my code. Grr. So I went back to Plan A: reverted to the cart which charges 1,499 customers a year correctly and causes 1 guy to wait a bit while I decide how to address this in a more long-term fashion, rather than having half of the purchases this week get screwy behavior.

I lost about $120 that I know about in arbitrary discounts, plus more if anyone was scared off by the weird inconsistency between my site’s pricing and the pricing at Paypal/Google Checkout. Not that I blame them. Grr.

Memo to self: self, you’ve said it before, but avoid doing 5 minute changes at midnight.

Comments Off

Working on Bingo Card Creator 3.0

Well, I spent 1.5 hours today working on the newest version of Bingo Card Creator, after hoping to spend 6 or so.  Drats.  What’s on the agenda:

  • Fixing a display bug when editing the Free Space! under certain conditions.  (Done already.)
  • Moving the default Save/Open directory to the OS-dependent default save directory (i.e. My Documents) rather than the BCC program directory.  This is mostly for Vista compatibility and general ease of use.
  • Moving the location of the license file to the user’s home directory, rather than the BCC program directory.  This is for Vista compatibility and, as an added bonus, it will eliminate the “reenter your license key” headache for upgrading Mac users from here on out.
  • Big feature: Bingo Card Creator is going all web 2.0 and storing its information in the clooooooooooooud.  Just kidding.  Tentatively labeled “Save to Internet” and “Open from Internet”, this lets BCC users work on files at home, work, school, or wherever without having to drag the files along with them.  It also paves the way for an upcoming new product I’m going to launch.  (Three guesses as to what.)
  • Import: While BCC can technically import from a plain text file already, I’d like to give users an easy cut/paste option to get words into it.

I hope to have something to show you guys by, oh, say next weekend, and am aiming to release this by my birthday.  (April 16th)  Funny trivia: 3.0 raised to the 3.0 power is 27, which will be my age on my birthday.

Comments Off

オープンソース・ソフトウェアとうまく勝負するにはどうするか

[Editor’s note: this is the Japanese translation of “How To Successfully Compete With OSS“, which I prepared because some Japanese blogs were apparently interested in the topic.]

[備考:自分が書いたHow to Successfully Compete With OSSがいくつかの日本のブログからリンクされましたので、和訳してみました。母国語ではないですから、おかしい言い方があれば教えてください。仕事外あんまり書かないので練習しないと行けないですけどね。]

時々、Business of Software (ソフト業界の掲示板)で「オープンソースソフトウェア(以下、OSS)に勝負するに意味あるか?ただだから勝ち目はないだろう?」との意見が出ます。もちろん、Joel Spolskyさんなどが説明したように、OSSにでも勝てるのです。特にHacker News (他のソフト業界の掲示板)で書かれた「Enterprise系ソフトで当然に勝てる」とのコメントが気に入りました。ただ、B2Cに関する議論がほとんどなかったです。無理無理無理と言われたことは少なくないが、B2C(Bussiness To Consumer,つまり、企業が素人に売ること)でも、値段が0円であるOSSに勝てます。

資格とは言いえないが、少し経験あり:両親や先生のためにビンゴカードを作成するソフト Bingo Card Creatorをやっています。B2C中のB2Cです。去年度の売上は2百万円程度で、今年は増加して、4月末まで給料を超えるだろうと思います。始めた2006年7月に、同じ問題を解決しようとする二つのOSSがもう存在しました: BingoCardMaker とbingo-cards.  (相変わらず、我らプロぐラマー達は意味深い名前を付けるのに上手でしょう。)

よって、下記のOSSに関する議論はFirefoxなどの一流なプロジェクトではなくて、OSSの残りの99%です。人が使っているのに、一度も聞いたことのないソフトです。すべての有料ソフトはMicrosoft Officeじゃあないと同じように、OSSはFirefoxには限らないのです。

OSSも好きですからあんまり怒らないでください!:私的活動でも仕事でもOSSを使っています。コードを共有したり、自分のプロジェクトを時々開封したり(私のshopping cart を使えますよ)します。OSSが好きです。OSSか有料ソフトかどちらかが生き残るなんて思えません。

したがって、「OSSにするのに、こうすればいい」とアドバイスを書くとき、残忍冷酷戦略会議なんてないですよ。ユーザのニーズに応じて相応しいツールを見つけてほしいのみです。(時々それによって儲かったら、まあ、いいでしょう。)

OSSよりうまくできるものと言いえば

1)  マーケティング

ユーザには問題があります。ソフトは問題を解決するツールです。と言っても、ユーザは「ソフト不足」との問題を意識していません。

1%以下のユーザが「問題はソフトが足りない」と意識している:あなたのソフトがビンゴカードの作成のためであろうか何のためであろうか、ユーザにすでにあった問題を解決するものしかすぎません。もう解決しようとしたはずです。失敗を繰り返して、イライラして、検索エンジンでソフトを示さない「how do I make bingo cards」とか単純な質問を聞いたでしょう。数学的にいうと、去年度検索してくれた14.5万人のお客さんの中、800人しかソフトを検索しなかったです。「ダウンロード」などの専門用語を使った人を入れても、97%以上はソフトを問題としなかったのです。

OSS活動はソフトに注目し、ソフトでできることを無視する:OSSのサイトを開いてみてください。どれでもいいです。うちのソフトはどのこの、ソフトの実装方法、ソフトのバグトラカー、ソフトのML、ソフトなんてうんざりほど書かれているでしょう。problem domain (ユーザが苦しんでいる問題範囲)に関してなにひとつも書いていないでしょう。「このサイトを見ているなら、もうソフトが要としている」という非常識のせいです。

もし、あなたのプロジェクトのユーザがソフトが要としているとのスタンスでマーケティングすれば、problem domain向けのSEOを行わないでしょう。ソフトが好きなオタク同士ではなしていて、ソフトがただ家電商品に近いと思う一般人には広報しないでしょう。(自分のソフトを好評してくださったお客さんはソフトがイヤです。パソコンに興味があるから使うひとではなくて、ご家族と再会するのにパソコンが一番はやいという人なんです。)

2)  デザイン

[翻訳は思ったより時間かかったので明日終わらせます。よろしくお願いします。]

Comments Off

Socks, Software, and the "Stupid" Questions Costing You Sales

In response to my recent article about OSS vs. proprietary software, which stressed the need to perform handholding of non-technical users, some comments said something to the effect that they don’t want idiots using their software anyway.  I think it is important that we treat non-technical users with humility and respect, because just because they are not experts at our field that does not mean we can afford to ignore them.  (Plus, their money is as green as anyone else’s.)  In the spirit of promoting humility, I’m going to share a humiliating experience with you: I failed this Sunday at buying socks.

The Setup

I live in central Japan and work as a sometimes-programmer, sometimes-manager, sometimes-technical translator.  I am also an inveterate skinflint (a handy attribute for one to have when starting a business with $60), which means I only buy clothes when they go on sale.  My trigger line for socks is at 300 yen, which is about $3 or so.  

The missing bit of information in that sentence, which is so ingrained into us we have never questioned it, is that I just quoted the price of socks in the unit of “a pair of socks”.  Because that is the way we always think of socks: (temporarily) matched sets that are indivisible until the washer gremlins get to them.  This is so obvious to us that we probably don’t remember when we learned it, much like we technically inclined people don’t remember when we started using the word “license” to mean a copy of software and don’t remember when “open the folder” was an instruction requiring thought to follow.

The Sale

While at my local mall buying food on Sunday, I noticed a sign claiming that they were having a big sale on men and ladies footwear, including socks.  Specifically, the socks were priced as follows: 

Pretty easy, right.  You probably don’t know how to pronounce it, but its clearly 4 x (something) = 1,000 yen.  I’ll fill in the something for you: it says -soku.  (Or, together with the 4, yonsoku.)  The character literally means “foot”, and its also a classifier.  A classifier is a feature of Japanese that gets appended to a number when you are using numbers to count things, as opposed to using them as mathematical abstractions.  English uses classifiers, too, but a lot less frequently: think of someone saying “The rancher owns 47 head of cattle” or “Today I bought three pairs of pants.”

Thus my dilemma: exactly how many socks does yonsoku represent?  Does -soku mean “pair of socks” or “socks”?  If it means “pair of socks”, then that is 4 pairs for 1,000 yen, 250 yen per pair, so I should stock up on the screaming deal on socks.  If it means “socks”, then that is 500 yen per pair, so I should buy my stocks some other day when they offer a better discount.

It is not immediately obvious, by the way — I had never specifically been taught it, classifiers are wily beasts (there are something like six different ways to count a PDF file, trust me), and I know at least one other way to say “pair” which I was not sure exhausted the number of ways to describing “a matching set of footwear items”.  For all I knew, unbeknownst to me common knowledge in Japan was that socks are counted as individual discrete items, just like pants are.  (Try explaining to a Japanese person that you are wearing a pair of jeans some time.  They start muttering about crazy Americans and how we feel the need to pluralize something which any idiot can see is one flat garment.)

Hating To Ask A Stupid Question

 I stared at that sign for, I kid you not, ten minutes.  I was well aware of the fact that the entire situation was absurd, mind you: I’m a college-educated professional who has been speaking Japanese for about eight years now, I do technical translation for engineering specs on Big Freaking Enterprise Software, I am generally not a stupid person: and yet here I am, able to read the words right in front of me but unable to make sense of their import.  (Doubly embarrassing: the character soku is dirt-simple, is probably about first-grade level, and I can use it in at least two dozen words that I would actually understand, from “satisfaction” to “the condition of not getting enough exercise”.)

What I didn’t do

There was a store employee standing right next to the sign, and I’m perfectly capable of asking her to clear up my confusion.  But I didn’t.  Because who wants to admit they’re so stupid as to be unable to count socks right?  

Similarly, when customers are on your site, they hate to ask you the stupid questions.  Oh, you’ll still get your fair share of questions which might make you go hmm.  Here are a couple real ones I’ve had:

 

  • I want to buy this for my mother, but she doesn’t have a computer or the Internet.  Can she still use it on her TV or something?
  • Can your software (editor’s note: Bingo Card Creator) make bingo cards?
  • I clicked the picture in your instruction manual where it said Enter Your Name Here and it vanished!  What’s up?!

 

But mostly, when customers have a “stupid” question, they don’t spend time searching for your contact information.  They just bounce.  They:

  • don’t want to wait for an answer
  • don’t want to be seen as idiots (they have had that happen a lot with their computers and geeks)
  • don’t want to impose on someone’s time

What We Can Do About It

Luckily, since we have near-total control of the environment our customer is in when they start thinking of “stupid” questions, we can help them get answers:

  • Judicious use of web formatting.  Internet users generally don’t read, they scan.  Call out important points in bold, put them in bullet points, distinguish them with size or color, what have you.  Don’t overuse this technique or it can become somewhat difficult to identify what is really important.
  • Repetition of key points or concepts which are difficult.  Trust the teacher on this one: the basic pattern of every lesson is tell the student what they’re going to learn, teach them, have them mimic it, tell them what they have just learned.  We repeat the main ideas constantly because it helps them stick.
  • Avoid use of inappropriate jargon.  If you are selling to customers who are not professional buyers of software (hint: most B2C customers are not), don’t use words like “license” or “SaaS” or “support contract”.  Explain what those mean in simple English: you can one copy of Bingo Card Creator for $30, you pay for World of Warcraft every month, if you want us to be available for questions via phone it costs $100 per year, paid when you buy the software and renewable every year until you decide to stop.
  • Make appropriate use of analogies.  People will reach into their previous experience to answer their own questions.  For example, when I was (not) buying the socks, I figured “Maybe Japanese people count socks like they count pants” (analogy fail).  My customers have, multiple times, come to the conclusion that “A free trial for software is like a free trial for a magazine — I have to send something in to cancel it or else they will bill me”.  Rather than letting your customers find their own analogies, you should when appropriate guide them to things in their experience that will make sense.  (SaaS Our software is like a gym membership: you pay money for membership now and once a month hereafter, as long as you’re a member it costs the same no matter how much you use it, and you can cancel at any time and no owe any more money than you have already paid.)
  • Have a FAQ: You probably don’t want to call it a FAQ in a non-technical niche, but a nice inviting label like “Answers to questions you might have” or “Got any questions?” works just as well.  (Pro-tips: put the most important stuff at the top, have lots of questions visible at once, and consider what your mix of questions says to someone who is not actually asking a question at all.  For instance, “Q: My screen died after installing your software.  What happened?” is not a confidence builder, even if the answer is “A: This is totally not our fault!”)
  • Be the warm, inviting guy who welcomes questions:  Even if it secretly galls you that you have to answer questions, you should always put a welcoming, concerned, and patient face on, including in your copy around the contact method.  For instance, “Please make sure you have read the FAQ before answering a question so you don’t want our time” is distressingly common, and it is both off-putting to people (those with questions and those just browsing your site) and ineffective at reducing support volumes.  On the other hand, “We love talking to customers!  Feel free to send us an email if you have a question, a comment, or just want to say hi.” says “You may not have a problem today, but if you ever do have a problem, I will not make you feel stupid about it.”
  • Blame yourself, and only yourself.  No matter what your customer asks you, no matter what went wrong, no matter what they did: it is your fault.  Even if you don’t feel like this is true, learn to fake it.  Its not hard.  Say the word “you” more, the word “I” less (except when parceling out blame), and the word “sorry” when your customer hits something that in any way inconveniences them.  Twice.  And don’t do the cop-out “I am sorry that you didn’t see where I wrote …”  That assigns fault to them.  Who’s at fault here?  That’s right, you are.  “I am sorry that I didn’t write the instructions more clearly.  You can …  Sorry again for the inconvenience.”  

Useful Things To Know About Socks

So it turns out that -soku actually does mean pair of socks.  Drats, I let a bargain go by and the store lost a sale.  

Your customers are probably not failing to purchase from you because they can’t read (well, in the globalized 2000s it is certainly possible that you have less proficient readers of English trying to make sense of your site), but they’re also being tripped up by their “stupid” questions today.  If you can intercept these before they happen and answer them well when they slip through the net (some always will), then you’ll see an increase in sales.  Like anything else: measure, test, and seek continuous improvement on it.

Comments Off

My Favorite WordPress Plugin

Now that my blog is chilling on my server and I can actually install plugins, I’m starting to add some of the ones I’ve used for other projects, such as my brother’s blog about the superhero novel.  My favorite plugin, which also has my favorite name, is What Would Seth Godin Do?.  

Answer: he would cookie everyone who came to the blog, so that you could show different views of it to people who had been following for years and people who just arrived fresh off a Google search for software marketing tips and don’t have any idea who the heck I am.  

In keeping with my general preference for unobtrusiveness, I’ve put the links in a nice, subtle box beneath posts.  Most people would opt for above the post for maximum visibility, but I don’t need the distraction for the (several thousand people) who get here for some variant of I want to pay someone money to make bingo cards please tell me oh great Google where I can do this.

Comments Off

2008 Taxes Done, Well Ahead of Schedule

Thanks to my new expense tracking feature on the BCC website and the magic of TaxAct (the only online filing place I’ve found that supports the vast, vast number of American uISVs with day jobs subject to the Foreign Earned Incom Exclusion), for literally the first time in my life I have my taxes done well ahead of schedule.  Whee!

Final numbers, for those who were interested:

Sales: $21,720

Expenses: $12,318

Profit: $8,798

Self-employment taxes: a bit over $1,200

 

The expenses number includes some things which aren’t strictly speaking BCC related — mostly, costs sunken into getting the second product up and running.  More about that when I have something to show.

I also ended up scheduling the IRS to take four nice big bites out of my checking account during the year because the amount of taxes I expect to owe next year is going to be a few thousand more and if I have the money in my account I’ll probably do something stupid like spending it on a TV or, worse, investing it.  (Am I bitter about that?  No, not at all.  But it makes for a good joke.)

Comments Off

How To Successfully Compete With Open Source Software

(This post recently got linked on Japanese blogs.  英語より日本語の方が楽な方:これを和訳しようとしています。日本語版はこちらです。)

Every once in a while, somebody on the Business of Software forums asks whether there is any point to trying to compete with open source software (OSS — essentially, software anyone can use and modify without needing to pay money or receive permission).  This is very possible, as folks such as Joel Spolsky pointed out in the ensuing discussion.    I particularly liked one comment on Hacker News about how to compete as Enterprise software.  However, relatively few people in the discussion mentioned B2C (Business To Consumer — you know, the stuff that isn’t paid for by an expense account) software, which people often tell me is doomed, doomed, doomed.  Seeing as how I run a small B2C software business, and am experiencing a crushing shortage of doom, I thought I would explain why this is possible.

My bona fides: I run Bingo Card Creator, which makes educational bingo cards for teachers and parents.  It is about as B2C as you can get.  Sales last year were in the $20,000 range, sales this year are up substantially, and I expect profits will exceed my day job salary/benefits/etc by the end of April.  I started the business in July 2006, when there were already at least two OSS projects which did roughly the same thing: BingoCardMaker and bingo-cards.  (You can tell we really spend a lot of time thinking about naming in my niche, can’t you.)

Thus, my comments are about the other 99% of OSS projects, the low-profile projects which a) do useful things for people and b) you have never heard of.  All OSS is not Firefox in the same way that all proprietary software is not Microsoft Office.

I like OSS, too: I make extensive use of OSS in my business and at my day job.  I routinely contribute code to projects, OSS my own software when it makes competitive sense (you can download my shopping cart), and generally love the stuff.  I don’t see OSS and proprietary software as existential threats to each other.

Thus, when I give developers advice on how to compete with OSS, its not in the sense that I want to trample over the movement’s corpse, burn their homes, and hear the lamentations of their women.  I just believe in getting people to the right tools for the right problems, and often, that tool is going to cost money.  (Nothing wrong with that!)

Places Where Software Developers Can Outdo OSS:

1)  Marketing

Software solves problems.  Customers have problems.  Customers do not know that their problems are sometimes solvable with software.

Less than 1% of customers perceive their problem as a software problem: Whether your software makes bingo cards or drafts table plans or helps people improve their poker game, all it is doing is helping someone get around a problem they had long before they sat down at the computer.  After getting frustrated with their existing attempted solution to the problem, they probably Googled something pretty generic like [how do I make bingo cards].  Empirically, only about 800 people out of the 147,000 who found me from Google in the last year were specifically looking for software.  Add in another 1,600 who were looking for a download, and that’s still 97% who had a bingo problem, not a software problem.

OSS concentrates on the software, not the problems the software can solve: Take a look at an OSS site, any OSS site.  You’ll see a whole lot of talking about the software, the implementation of the software, the source code for the software, how you can contribute to the software, etc.  You’ll almost never see anything about the problem domain — the assumption is that, if you’ve stumbled upon the site, you already know you have a software problem.  

If your marketing is premised around your user knowing they have a software problem, you won’t SEO to capture people looking for solutions for the issues in their problem domains.  Your evangelists will talk with other people who are enthusiastic about software, not with people who consider software about as intrinsically interesting as toasters.  (Many of my most enthusiastic customers despise every minute of using their computers.  They put up with it because it gets them back to their kids faster than any non-computer alternative.)

2) Design

OSS projects, particularly the 99% that are relevant to this discussion, routinely do not allocate resources to creating attractive designs.  For whatever reason, opened source graphical work is still rather rare, most developers (myself included) have the artistic skill of inept mole rats, and the obvious pay-somebody-who-does-it-better solution runs into the problem that the typical OSS project has no budget and no patience to deal with “unfree” licenses, which are the only kind commercially available stock icons have.

This results in a lot of OSS software looking something like:

That design is nice and clean.  However, it looks like the properties dialog box in Eclipse — lots of functionality optimized for packing as many things onto one screen as possible.  There is little thought given to incorporating color into the design, giving the program its own logo or visual identity, or arranging the 13 controls in a user-centric fashion.  Even with those criticisms, this is a good design for OSS software.  I have seen far, far worse.  But we could do so much better, and when we have an incentive to, we do.

The importance of design: I don’t personally use Macs but I think everyone in B2C software needs to take lessons from Apple and the Mac community.  They have proven, again and again, that people will pay a premium for products which are attractive.  Often in B2C the first glimpse of the software makes the sale and everything after that is just justifying to the customer that their gut decision was the right one.  (Same with publishing, incidentally: people really do judge books based on their cover.)

Example: I doubled sales of Bingo Card Creator waaaaay back in August 2006 by adding some more attractive stock icons to it than the fairly staid Java icons I had been using previously.  (That first link has the before/after shots if you want to see it.) 

The workflow is fundamentally different than BingoCardMaker (more about that later), but you can see that this design makes use of bright, pleasing colors.  (Its absolutely amazing how a few bucks worth of icons makes a bog-standard Swing app look so little like a Swing app, isn’t it?)  This is more inviting to the primarily non-technical users who make up the core of my market: it promises to be fun, not painful, to use.

3)  User Experience

“User experience” is easiest to define as “that touchy-feely stuff that Apple does really freaking well”.  The more formal description is that all stages of interaction with the software — from downloading it, to installing it, to using it the first time, to using it the 400th time, and all points in between — should induce joy and contentment, not frustration and rage.

Here’s a bit of homework: find yourself a non-technical person.  Tell them the name of a piece of software on, say, Sourceforge.  Then tell them to download and run it.  Stay in the room but don’t help with completion of the task.

This is so frustrating to most users that the test should probably not be allowed by the human subjects board at most universities.  Somebody might get killed.

Here’s a true story for you.  BingoCardMaker supports one feature which my program does not (picture bingo cards), and which I have no intentions of adding, despite the fact that it is the most requested feature by far.  Accordingly, I used to tell customers who needed that feature “I’m very sorry I can’t help you, but this software can — why don’t you try it?” and I would direct them straight to the download page.

One customer (who is by no means unintelligent) was furious because she spent fifteen minutes on the page unsuccessfully trying to download before deciding it was broken.  Here’s the section of the page: can you tell me what went wrong?

Those words architecture or operating system are pretty confusing, but the word “download” is not.  My customer knew she had to “download”.  So she clicked it, and “the screen blinked away”.  (Clicking download takes you to a list of packages published by the product — totally obvious to a non-technical user, right?)  Then she got back and clicked on options, figuring that it would offer “options for downloading”, but nothing she clicked there worked either.  Finally, frustration mounting rapidly, she clicked Bingo Card Maker because that was what she wanted… and the screen “blinked” again.  (It collapses the tree of options for that package, causing the BingoCardMaker-5.5.1.jar link to vanish.  That link is the one you have to click.  This is quite obvious if you are a Java developer — not quite so obvious if you hold a PhD in English Literature.)

Do not bury the goal: I should mention that if you’re coming from the project page at Sourceforge, the above is three clicks deep after clicking download.  By comparison, downloading Bingo Card Creator takes one click for most people — its the big, blue button that says Download Free Trial.  Folks whose browsers don’t support that are showed the following: 

That was once described as “big pancake buttons” by one of the international developers on the Business of Software forums, and the name sort of stuck.  Pancake buttons work.  They are far, far, far more effective at helping users complete their task (downloading the software) that unobtrusive text links or smaller download buttons — the pancake buttons outperformed by smaller buttons by a factor of 3, and those buttons were themselves much improved successors of my original buttons which had outperformed plain text links by a factor of two.

Wow, it sounds that I’m saying that most prospective users of OSS can’t even manage to download it.  Let me be clear: that is exactly what I am saying.  It isn’t their fault — when our users can’t use our software (and websites are just a special case of software), that means we have failed in our jobs, whether we’re proprietary or OSS developers.  

On to installation: User experience scarcely ends with the download.  Oh no, the opportunities to frustrate and enrage are just beginning!  For example, that JAR file they just downloaded got dumped in a downloads folder somewhere and… well… that is about it.  To execute it, you need to be able to find your downloads folder and double click on it.  The next time you want to execute it, you have to do that again.

By comparison, if you were downloading Bingo Card Creator, you’d get a prompt from your browser asking if you wanted to run it.  It would then take you through a Windows installer which, in a very simple fashion with sensible defaults, would put links on your desktop and start menu to the program, then start it up for you.  At no point do you have to learn any irrelevant trivia like “JAR files are special things created by Java which are sort of like programs, except when they aren’t, and sometimes double clicking on them runs them, except when it causes nasty errors.”

There is a JAR file sitting at the heart of Bingo Card Creator, too — and if my users need to know that then I have failed.  Incidentally, if you do desktop Java development for Windows, please use JET or Launch4j or something.  Java developers deploying to Mac should use the JAR bundler.  (You can even do this from a Windows machine with an OSS ant task.  It is a lifesaver for all of us committed Vista users who need to deploy to OS X.)

User Experience never ends: All interaction with your program, with your site, with your community has user experience implications.  There are many, many opportunities to flub it.  I can’t cover all of them in this article, but I hope to expand on ways to not flub them at a later date.

4) Speaking the users’ language

In keeping with the “Users do not have a software problem” and “Users do not care about your technology choices” points covered above, users fundamentally do not talk like developers.  See this description for one of my OSS competitors:

GPL bingo card printing program (numeric, letter bingo and picture bingo). Also prints a calling sequence (equivalent to the output from a barrel full of balls). XML output for later linking to multimedia engine.

Let’s try that again with the technobabble removed:

GPL bingo card printing program (numeric, letter bingo and picture bingo). Also prints a calling sequence (equivalent to the output from a barrel full of balls). XML output for later linking to multimedia engine.

Those two surviving sentence fragments are all the publicly available description of this program.  Yep, that’s it.  You might have heard that OSS is weak on documentation?  That is only a problem if there is enough of a reason to suspect that the program will work for you in the first place, and two sentences is probably not enough to do it.

I want to quote a real customer of mine, who captures the B2C mindset about installing software very eloquently: “Before I download yet another program to my poor old computer, could you let me know if I can…”  Painful experience has taught this woman that downloading software to her computer is a risky activity.  Your website, in addition to making this process totally painless, needs to establish to her up-front the benefits of using your software and the safety of doing so.  (Communicating safety could be an entire article in itself.)

Incidentally, the Internet sucks the literacy out of people, so be prepared to explain the same thing several times to get the message across.  The most common question I have is “Is every bingo card unique?”  Yep, they’re randomized — that is the only reason you’d use the program and that feature has been the core of it since v1.0.  That fact is mentioned twice in bold on my front page, printed on the main UI of the program itself, etc.  And people still manage to ignore all that, find my email address, and ask me.  

Can you imagine how confused users would be if key features were documented only in blog postings distilled from commit logs, and present nowhere on the product site itself?

(I’m looking at you, Rails.)

5) Support

If you’ve been around OSS for any length of time, you know that almost every community has members who are caring, helpful, and patient.  Unfortunately, they’re not the only people handling support.  I get a lot of questions which sound something like “I clicked the button and it didn’t work” or “plz help can’t print” or “I downloaded the program to my printer and now my screen is grey.  Did you give me a virus?”

(If you don’t understand the significance of the screen being grey, look at the photo here.)

You can probably imagine how well those would go over on the typical OSS mailing list.  To say nothing of basic computer operation questions like “I bought a new computer last week and need to put your software on it.  What do I need to do?  Its not the old computer, which has your software on it, its a new computer.”

Most customers with B2C software — in my experience, about 95% as of late — don’t actually need to ask a question of you, ever.  You can handle all of their needs with well-thought-out automatic processes, FAQs, help files, rigorous improvement of any part of the software that routinely causes confusion, and the like.  However, users like know that there is someone who will be happy to help them out if they need it.  That is the main purpose of offering customer support — decreasing the perceived risk of using your software by demonstrating that there is a safety net.  (This is one reason you should write your support page with an eye to it being seen by someone who isn’t even using your software.)

6)  Technical superiority

You’ll notice I’ve been concentrating mostly on the 90% of the software busines that happens outside of the IDE.  However, there is no reason to assume that OSS is superior on a technical front, either.  I know, a million eyes makes all bugs shallow, yadda yadda yadda.  Back in my reality:

  • the median number of developers per OSS project hosted on Sourceforge is 1. 
  • Perhaps one project in five will ever leave beta.
  • All software has bugs, OSS is no exception.
  • The average software, commercial or OSS, is a usability nightmare.
  • Many programs have not been updated in years and lack the benefit of significant improvements in the state of the art made recently, from modern interface design to first-class integration with the Internet.  
  • Some OSS tries to be everything for everybody and ignores niche markets with pressing specific issues.  
  • Other OSS is hyper-adapted to the problems of a handful of developers scratching their own itches and is unusable by anyone with other requirements.

In other words, you can compete with OSS on a technical level the same way you compete with proprietary software on a technical level: execute better.  There’s really no magic to that.

Conclusion

All of these are opportunities for commercial developers to compete with OSS.  

The world is changing all the time, but plain-ol’ commercial desktop software still has a place in it.  Don’t get worried — concentrate on doing what you do well, from development to marketing to support, and the market will take care of the rest.

If you found this article interesting, try looking around the blog or signing up for the RSS feed.  There’s a lot more where this came from.

41 Comments

kalzumeus.com (Not www. Version) Down For A While

Hiya guys.  I misconfigured my DNS when I moved the blog here, resulting in a CNAME record (i.e. “The named server is actually on this domain name over here”) pointing to Google rather than a MX record (i.e. “The named server’s email is processed by Google Apps, please send mail to him there”).  As a consequence the http://kalzumeus.com alternative for accessing the blog is going to be down for about a week while the TTL for that record expires.  Fun stuff, DNS, fun stuff.  Some places on the Internet might see it earlier than others.

I’ve told Google to redirect the domain on their end (search for Google Webmaster Console) but that will probably take a day or to to take as well.  

Sorry for the mixup!  Thanks for those folks who mentioned it.

Comments Off