Archive by Author

Paint.NET 3.0 is amazing

Have some light need for graphics editing?  Download Paint.NET.  Now.  Its about as easy to use as MSPaint, with many, many more features (layers!  Full undo capability!  Competent resizing algorithms!), and its perfect for the sort of “I have an app icon but need to make it a CD logo” type chores that you’re probably spending too much time on right now.  Did I mention its totally free?  Yeah, thats a bonus, too.  (Artistic ability still not included, unfortunately.)

I finally put my money where my mouth is, by the way, and donated them $25.  I remember that I had long-ago promised to donate “in the indefinite future, when I have the money to spend” and, hey, I just had my most profitable month ever.  If you get as much use out of them as I have, consider dropping 2-3% or so of the cost of a Photoshop license in their tipjar.

January 2007 Sales, Stats, and Strategy

Executive summary: January was my best month yet. I’m on target for making my goal of $1,000 a month sales by April. The redesign of my purchase page has been extraordinarily effective, particularly at moving people towards buying CDs. Google Checkout is saving me a not-insubstantial bit of money. AdWords, on the other hand, is borked and has a heavily negative ROI.

Sales:

Total Sales: 28 (includes 5 CDs, 1 refund due to showstopper bug in Mac version)

Gross Income: $698.65

Income Less Fulfillment Costs (Paypal, CD fulfillment): $655.70

Expenses:

GoDaddy: $5

Web Hosting: $7 (I turned off Traffic Facts, wasn’t using it anymore on a regular basis)

AdWords: $90 budgeted

Total Expenses: $102

Total Profit: $553.70

 

Time accounting: I estimate I spent approximately 6 hours of work on Bingo Card Creator in January. Roughly half of that was development (finishing touches on v1.05, which has been in the works since about October, and also some hunting for bugs in the Mac version discovered after release) , 20 minutes answering emails and fulfilling those CD orders, and the remainder blogging, keeping track of AdWords, firing Robosoft to submit v1.05 to the major sites, and performing various and sundry tasks. I also spent approximately 4 hours working on my 2006 taxes, a major portion of which was caused by Bingo Card Creator.

Selected Key Statistics:

Number of sales directly attributable to Google AdWords: 1. (Yes, Virginia, that IS equivalent to taking $65 out my my wallet and setting fire to it.) Yep, need to get AdWords under control or cancel it, sooner rather than later. No reason to pay Google a tax just for the privilege of paying them a tax. Also intending to look into AdCenter when I get the time to do so.

Number of hits on typical weekday: 300.

Number of hits on typical weekend: 100. This is roughly equivalent to my typical peak performance back in November.

Visitor to download conversion rate: Steadily falling, to 16% overall. A major contributor to this is the fact that I’m getting insane traffic numbers from the search for “bingo cards” on Google, and that traffic is relatively poorly qualified (12% or so conversion rate). Highly qualified traffic, such as people responding to my CPC ads, continues to convert at about 25%. Yahoo and MSN are in the 18% range. I hope to improve my conversion rate later by making a fairly significant design change related to how the Download Free Trial button works… we’ll see if that helps.

Downloads: Google Analytics reports 1,100, up 200 from December and 300 from November. Hard to believe that back in September I was ecstatic when this number hit 200. I receive a major but probably declining portion of my total downloads from download sites, and I have stopped counting those exactly since the number they provide me is not actionable (regardless of whether it goes up or down I still submit all new version to every site that will take it automatically, and don’t see myself changing that policy anytime soon).

Confirmed Installs: 235. This has not been keeping pace with my increasing download numbers. I’m not entirely sure why. Interestingly, digging into the logs shows me that no less than a quarter of my paying customer base is checking for a new version at least monthly. This gives me a warm fuzzy feeling inside.

Priorities for February:

  1. Get a handle on AdWords and AdCenter. AdWords needs to have positive ROI or it needs to get cut, it is as simple as that.
  2. Redesign download and download confirmation page. I don’t like the lack of user friendliness for the download on some browser/OS combos, particularly IE7, which will only gain in market share in my segment in the coming months.
  3. Add more content to website. Need to find a new method of attack to get some more sales growth rather than just resting on my laurels, which candidly is a fairly accurate description of my marketing for 3 months now.
  4. Re-ship 1.05 on Mac after bugs are squashed. Build shrine to Andrey, my beleaguered Mac testing department.
  5. Start using source control software (I nearly had a heart attack trying to revert to a Mac version that was known to be good).
  6. Redo internal model of a bingo card. I realized when adding one of the key 1.05 features that I am passing 6 arguments through about 4 different classes because my abstraction that captures what a bingo set is is a poor abstraction for capturing what a bingo card is. The printer cares rather more about the card and less about the set. Time to add a new abstraction, which will greatly simplify changing the presentation of the card in the future, hopefully allowing me to add new features for printing and get Print Preview working. (That would make a decent 1.051 release.)

Do You Understand Your Market Cycle?

Often in this space and elsewhere I’ve talked about the importance of measuring the effect of changes which you make to your website and product, and interatively changing based on the measurements. This is a critical skill. One thing that is even more critical is that you understand what the data would have looked like had you not made the change, because otherwise you could be changing for a spurious reason. As an example, I’m going to show you a real graph of my organic Google hits for 3 months:

Seasonality In Google Organic Search Results

You might conclude from this that my performance on Google is wildly erratic or that Google’s recently announced algorithm change in January has helped me greatly. Bzz, wrong answer. What is actually happening here is that you are seeing the combination of natural cycles in my market (low traffic over the Christmas break, low traffic on MLK Day and other long weekends, low traffic on every weekend) combined with a sustained massive sustained increase in overall traffic since early December. The cause of that increase is almost certainly related to me ranking higher for my core queries and getting on the first page for some very high traffic peripheral queries, such as bingo cards.

When you are making inferences based on the data for your own uISV , its easy to get caught in the trap of saying that any momentary spike is either a reflection of your own action or of some outside force (“The Google dance” is a favorite target for suspicion, as Google’s search results are capricious, poorly understood, and could potentially wreck you if you got on the wrong side of them). Resist the temptation — first, understand what the underlying pattern of your data (hits, conversions, sales, whatever) should be absent any influence from you or the suspected outside source. THEN compare what you are seeing to what you expected. For example, within the last week I changed the meta description on my index page to read more like my ad copy. I expect that this will eventually cause my click through rate in the organic search results to increase, resulting in more organic visitors. As of yet, focusing on just the last week of results, I do not have sufficient data to conclude that this change has produced a meaningful push in either direction.

Google Checkout vs. Paypal

I have been using Paypal and Google Checkout together for half a month now. Here are some observations:

Paypal gives you faster access to your money. Money from Paypal is spendable instantly if you have a Paypal ATM card (if you live in the US get one of these, as you get a 1% cash back from using the card, which is the easiest way to cut your effective Paypal fee). If you use an ACH transfer to your bank account, you will typically have the money credited on the third or fourth business day. I typically initiate a weekly ACH transfer every Monday morning (US time) and the money is spendable on Thursday (US time), with the payment actually clearing Friday.

Google, on the other hand, holds all transactions for two business days, then wraps them up together and sends them in a single ACH transfer to your bank account. Depending on timing issues, this can work out to be significantly slower than Paypal. For example, I had 2 purchases on the 22nd. They are still wending their way through my bank’s authorization system, although the bank has floated me the equivalent amount. In fairness, compared to the typical “We’ll pay you once a month” policy at a lot of the “real” shareware payment processors either of these policies are quite speedy.

Customer acceptance of both forms of payment is high. Google currently has a promotion going on to get people to open Google checking accounts (open an account, get $10 off a participating retailer — a pity I’m not participating! While I haven’t seen that many accounts which were signed up prior to making a purchase from me, customers in my (non-technical, B2C) niche do not seem to have much reluctance to filling out a form on Google’s site. The process is fairly painless compared to some purchasing processes I have been through. Paypal acceptance remains high, and the portion of my customers using Paypal who have a verified Paypal account has increased (I am assuming folks not having an account either prefer Google or, more likely, are agnostic and they just hit the button on the interface which is more convenient to them).

Free payment processing is nice. I have had customers from a couple of countries (including Ireland, a first for me) purchase through Google. If you’ve used Paypal before you know their rates are higher for cross-border transactions. Google is still free currently, and based on my reading of their current pricing policy it will still be free in 2008 so long as you’re spending enough on AdWords. Given that payment processing is my #2 expense every month after AdWords (#3 if you count taxes, I suppose) I’m quite happy seeing it get slashed.

Both have associated customer service headaches. For Google, you won’t see the customer’s real email address — they get a forwarding email address at Google, and can turn off delivery after completing the transaction with you (if, for example, they don’t want to get your newsletter). I don’t have a newsletter, but I do have to contact customers every once in a while, principally when they’ve done something that is about to cost them money (such as ordering Bingo Card Creator once on a CD and once without, which in my experience is generally a mistake so I always check). If they have Google set up to reject my “Pardon me, are you SURE you want to pay $55 for this program?” inquiry then I end up with customer service woes. On the other hand, many casual eBay/Paypal users have long since stopped using the mail address that they use to log into Paypal, which can result in their Registration Key being delivered into the ether.

Google Checkout interface is not great. I get the feeling it was designed by an engineer, not someone who has ever run a small business. It is difficult to ask fairly trivial questions like “How much did I sell in January?” without exporting your sales records to CSV. Exporting records to CSV doesn’t appear to actually work. Ahem, whoops? The biggest head-scratcher is that the search interface for transactions is terrible. You can’t search by customer name, you can’t search by a portion of their email address (which means you might end up typing something like, oh, Patrick-mvwerklgsgac@checkout.l.google.com to find a transaction, if your customer has chosen to get the email forwarded), and you can’t search by internally generated invoice numbers. As a result, if Bob of the obfuscated email address comes to you in a month to ask for a refund, and he doesn’t know his Google transaction number, you get to browse for it by hand. On Google, of all places.

Amusing Mac Java Niggles and Incompatibilities

Three things to not do the next time you release Java software on a Mac:

  1. Use ./ to refer to the current directory. On Windows, this will refer to the current directory the JAR is on. On Mac, it will refer to a directory internal to the JAR. Since you can’t actually access that, it appears to default to system root. (!?) If, on the other hand, you refer to the directory as . you introduce other problems which I can’t quite recall at the moment (memo to self: “//don’t use . here, causes problems” is not a maximally useful comment).
  2. Exercise caution with using javax.print.PrintServiceLookup. On a Windows machine, you are guaranteed that the default printer will be equivalent (.equals) to one of the printers returned on that list. This might lead you to write code which, for example, pre-selected the default printer from a drop-down list of printers. On a Mac, you are not guaranteed that the default printer will be equivalent to one of the printers on the available printer list. Which means, if you were careless like me and assumed that the default printer was on that list if the default printer wasn’t null, you will have your GUI thread choke and die with an index out of bounds error thrown by the list component. I’m going to recode my default printer selection logic to use least-distance string comparison to get around this little feature.
  3. Fail to test code known to be good. This burned me badly. In a Java application, as opposed to a trivial Hello World program or CS assignment, you’re going to be heavily reliant on the Java libraries working as advertised. As you can see from above, sometimes they have quirks in them. Seemingly innocuous changes to one part of your code can have a ripple effect causing the libraries to break assumptions you have made in other parts of your code, resulting in potential showstoppers. Example: I changed *nothing* about the internal printing logic in 1.05, and just changed the printer used from hardcoding it as the default printer to giving users a choice of other printers as well. Swing is a known good component, the default printer is a known good component, and the printer enumeration methods are known good… but the combination of the three introduced a showstopper on the Mac.

Write Once, Debug Everywhere…

Just when I think its safe to push out a new version I find that the Mac code has been severely compromised somehow and minor features like saving, printing, and displaying no longer work.  Gaaaaaaaaaaaaaaaaarglefraster.  To make matters worse it resulted in a customer needing a refund (annoying a day’s worth of prospects is bad enough — annoying people who pay money for software they haven’t even downloaded yet, thats like kicking yourself firmly in the teeth).  I’ve reverted the Mac version and PAD file on my website and hope to work soon, hopefully by tomorrow.  A big thanks to Andrey for the help in chasing down this problem.

5 things you don't know about me

Andrey started this meme, or more precisely brought it into the uISV/BoS community, and I rather like it.  (Suggestion for next time: name three people you’d like to answer and tag them via trackbacks.  The combination of trackback plus attention leads it to go viral quickly.  It certainly worked in the MMORPG blogosphere, at any rate.)  In particular, his post justifying it on BoS rather speaks to me.  Professional relationships are about more than just accumulating Google juice and career advancement… not that those are bad things!

Alright, five things you know/don’t know about me:

You know: I live in Japan.

You don’t know: I hate Tokyo, with a burning passion in my soul.  I would rather live in Baghdad than Tokyo.  The city is too big (it REDEFINES “too big”), the pace of life is too fast, the cocoon of anonymity (which it even worse if you are a foreigner) makes the isolation people feel on moving to New York pale in comparison.  Every time I go to Tokyo for a business trip I feel depressed even before I make it out of the train station.

You know: I used to work as an order entry operator and English teacher.

You don’t know: I’ve held at least 16 different positions in my young life.  That was the count four years ago, anyhow, and I haven’t updated it since then.  My current day job I have been with almost three years, which is an eternity for me.  Oddly enough, all but one of my jobs ended with my employer and I parting on amicable terms.  That one ended up with a 20 lb weight thrown at my head.  Ask me about that story sometime, its far enough in the past where I can laugh about it.

You know: I do work as a translator/interpreter when needed in addition to consulting and engineering duties.

You don’t know: My single biggest professional failing is that I am a functional illiterate at the Japanese language.  I could translate this post into Japanese without difficulty, given sufficient time and access to a computerized dictionary.  I could not do it by hand without sounding like a slow third grader.  My reading comprehension ability is similarly probably somewhere near that of a Japanese middle schooler, with the wrinkle that I can read oodles of technical jargon and understand most of the Japanese Constitution but would have difficulty deciphering the directions for making a box of Mac and Cheese.  This situation is only gradually improving, since my job only rarely requires me to write and I generally only read documents which are already in my sphere of competence.

You know: I used to play World of Warcraft.

You don’t know: I helped found a guild and put in upwards of 20 hours a week for almost a 2 year period.  I had a reevaluation of priorities which happened right before I founded Bingo Card Creator.  One of my major instigations for doing so was I suddenly had so much free time and nothing I could really sink my teeth into in terms of intellectual problems.  (People who think videogames are mindless entertainment which teach no valuable skills have never attempted to create an equitable DKP system.)

You know: I love fantasy books.  (Well, OK, you could know that if you read my paen to Harry Potter on my product site.)

You don’t know: I was a rather freakish kid back in middle school (before and afterwards, too, although I feel as if I am losing my touch in my old age).  One of the reasons was that I memorized the entire Hobbit, word for word… without intending to.  I didn’t realize this was strange until about sixth grade, when we were doing factual identification questions from the reading during class and I answered them with paragraph-length quotations from memory.  My teacher went all googley-eyed and asked “So what happened next?”, and rather than paraphrasing I repeated the next paragraph.  He then had me recite the rest of the chapter.  (The book was Dragonwings, incidentally, dealing with a white girl, a Chinese boy, and the Boxer rebellion… and flying on a glider.  Sort of mystical realism if I remember correctly.  As I type this snippets of dialogue are floating through my head.)  Anyhow, I don’t have comprehensive recall anymore (and never had for anything other than written words, song lyrics, and anything said to me by a girl I was interested in — I forget names within 45 seconds of hearing them if I don’t repeat them under my breath, for example), but I still love my fantasy books.  (Incidentally: I’m totally incapable of this in Japanese — I’m lucky to be able to keep six words straight or remember a character for more than two minutes.  Let me tell you, that transition bites.)

You know: I enjoy writing.

You don’t know: I once had dreams of becoming a newspaper columnist (my father tells me my very first “what I want to be when I grow up” answer was the Commissioner of Weights and Measures.  I have the vaguest inkling of a memory of voicing this).  I tried it for a while, actually.  The pay is lousy, the deadlines are irksome, editors are a bear to deal with, and the death threats I got caused needless distress for my family, so I found greener pastures.

I'm A Slave To You (Google)

I’m a fan of Google.  Not a fanboy, per se, they can certainly do things poorly (see most of their products which aren’t search- or advertising-driven) and I wouldn’t buy the stock anywhere near where it is right now.  But as a business owner, they’re very useful to me.  I use Analytics to do my analysis of how my changes to the webpage are working, Sitemaps to make sure I’m doing decently on Google searches, AdWords to generate about 10% of my traffic and sales, and Checkout is getting a solid 50% of my customers since I rolled it out.  So that is pretty good.

What isn’t so good?  Well, to be perfectly candid, I’m dependent on Google.   Google properties send me 65% of my web traffic and account for over half of my sales.  That percentage is going up since Microsoft recently tweaked their algorithms and sent my ranking down for many of my most valuable search terms on MSN.  If Google ever tweaks their algorithms in a similar fashion, I’m 31 flavors of screwed.

So where does this leave me?  Fortunately, it leaves me with a day job.  Bingo Card Creator could close up shop tomorrow night and while I’d regret it I’d still be able to pay the rent, buy food, and save for retirement (although less than I am now).  But the idea of having my business at the mercy of one player who is not me is rather disconcerting, and since I have eventual dreams of having my business(es) be my day job, I have to figure out a solution for this.

Some options:

Diversify CPC providers.  I’ve been planning on getting AdCenter up for a while now, might as well start that this weekend if I have a few hours free.  I tried YSM (Yahoo Search Marketing) before their recent update and the experience was beyond terrible — anyone know if they’ve improved?

Have backup plans.   In the event of catastrophic failure at Google Checkout I can be recovered in under 45 seconds, because switching to 100% Paypal would take me 5 seconds in e-junkie’s control panel.  (In the event of a catastrophic failure at e-junkie… I’m probably borked.  I have a script set up to deploy an eSellerate-based website at the touch of a button, but I’d really hate to be in that position.)

Improve Yahoo/MSN’s search marketshare.  Oh, wait, thats not an option because its out of my control.  This is really the crux of my problem: Google is an absolute titan in the organic search market (at least in the US, where most of my customers live).  If there were some secret sauce I could use to improve my ranking on MSN I’d certainly use it, but for equivalent rankings on identical search terms Google gives much, much better traffic than MSN and Yahoo.

Have more ways to aquire customers than search.  Well, I do get a sizeable portion of my customers from download sites.  Aside from that, I get some from teaching sites and some more from word of mouth among my users.  Unfortunately, when my users tell their friends to go download Bingo Card Creator, their friends Google for it.  D’oh!

Effects Of Purchase Page Reorganization

Its only been a week and this might be getting drowned out by the pre-existing positive sales trend in January, but I thought I would comment on what the recent purchasing page overhaul has lead to.

 First of all, I moved the option to buy a CD from purgatory at the bottom of the page to front-and-center.  This has greatly increased the number of CDs bought and the number of people who express interest in it by, say, clicking the add to cart button or sending me an email.  (Yes, I really do get emails saying “I see this option to get a CD.  Will you really send me a CD?  What do I do to order a CD?”  “Click the link or push the button.”  “Thank you!”)  I anticipate shipping more CDs in January than I have in history.  This is making me reevaluate whether I should increase the price of the CD option or not — currently, they cost me $4.50 each and I charge $5.00, and $.50 doesn’t even cover the effort for me to go to cd-fulfillment.com and input the order.  Then again, if the existence of it encourages people who wouldn’t otherwise buy to buy the software, then I’ll subsidize CD orders night and day just to sell the associated license.

People are rather shockingly likely to pick Checkout through Google.  I was thinking I’d get rather little through there for a while.  Nope, they rushed to half of my sales — all of the users seem to have had their account for 0 days so I’m guessing they made the account just to place the order with me.  Good news for Google, bad news for me — that means the ordering pathway is twice as long as it should be!

Perl Makes Me Feel Dirty

I had to code Perl at my day job today… and was productive… and enjoyed it.  Ewwwww.  The task was munging 15,000 mails from a variety of mailing list archives into our email system to test the new spam filter.  Previously, I would have used gawk for that, and spent a good half my morning writing out clever ways to extract the “next” mail from the archive’s web page.  That task took a single regular expression — that whole “matching the stuff in parentheses” is really magic.

Then I got home and had to add a bit of Javascript to all of my webpages to get the new e-junkie cart working.  So I decided “Hey, this will only take a minute in Perl”.  And it actually only did take a minute.  It was sort of fun, too.

Someone please pass me a flail, I need to be beaten before all my code looks like newspaper characters cussing.  (No lie.  That one minute program included the line $_=~s/blahblah/blah/.  Experienced Perl hackers will immediately notice the problem with this line — its four characters longer than it needs to be.