Archive | Kalzumeus RSS feed for this section

Software Businesses In 5 Hours A Week: Microconf 2011 Presentation (1 hour)

Rob Walling (who wrote a book on starting software businesses that I enjoyed) and Mike Taber produced Microconf, a conference for small solo software entrepreneurs.  That sounded right up my alley, and I was extraordinarily happy when asked to speak at it.  The organizers have generously given me permission to post the slides and video of my talk.  (Sidenote: editing videos is going on my Never Doing This Again list.  I should have just thrown a few hundred dollars at someone and saved six hours.  It probably would have ended up better, too.)

If you have an hour free, I recommend the video.  I am told that it was funny, though the genre of humor was very different than my Business of Software presentation.  If you can’t take an hour to watch it, though, you can certainly just read the slides and my commentary below.

How I Ended Up In Central Japan

I have long wrestled with fairly severe self-confidence issues.  (The psychology of entrepreneurship is the major theme of an upcoming post, inspired by a talk I had with Ramit Sethi, who also spoke at Microconf.)  When I was in college, I knew I wanted to be a software engineer, but I was worried about my job prospects competing with 100,000 engineers graduating every year in China and India.  My family was very big on me getting a nice stable job at a megacorp, and I didn’t think I had the chops for it.  So I played the Venn Diagram game: if I could do one very hard thing plus engineering, the intersection of those two would be only a half dozen people, and I’d be set for life.

Learning languages is very hard, so I went down the list that my university offered, and Japanese jumped out at me.  The US and Japan trade billions upon billions of dollars of high-tech stuff every year.  Virtually no Americans speak Japanese.  Practically no Japanese people are fluent in business-level English.  Bingo, if I spoke Japanese and can do engineering, I thought Microsoft (my favored employer at the time) would have to put me in a nice safe job in the Office group for the rest of my life.  So I doubled majored in the two.

Quick tangent: A major multinational advertising firm with an anomalously high number of PhDs on the payroll recently approached me about being a Product Manager in Japan, so this strategy really does work.  It’s funny, three years ago that would have been my dream job and now it was totally untempting.

Anyhow, after graduating college, I was still not confident in my business Japanese, so I decided to go to Japan, work in a Japanese office, and firm it up.  Did I think I could actually call the VP of the multinational who gave me his card and said “Call for a job when you graduate?”  No, confidence issues.  So instead I applied to an international exchange program, which places mostly English teachers and, crucially, some translators at Japanese governmental and quasi-governmental institutions.  One of them was the prefectural technology incubator in Gifu.  (I’m not comfortable telling you which one, but suffice it to say that really narrows it down.)  They took me on as a technical translator, in the expectation that their quickly-growing incubated companies would need technical translation to close big deals with foreign companies and governments.

Gifu is the Kansas of Japan, with more rice and less white people.  I’ve lived here for the last seven years and love Ogaki, my adopted home town, to pieces.  Being a technical translator, however, was not very professionally fulfilling.  Professional ethics require you to translate everything exactly, without elaboration.  I like to think I have something to add to the conversation, so when my contract elapsed in 2007 I switched to being an engineer at a Japanese megacorp.  Prior to doing that, though, I launched Bingo Card Creator.

From Humblest Beginnings

BCC was originally the hobbiest of hobby projects.  One of my assorted job duties as a heavily-underused technical translator was to help out the prefecture’s 200-strong mailing list of (foreign) English teachers, who didn’t speak Japanese and as a result often had issues with coworkers, landlords, government, and the like to muddle through.  Someone asked the mailing list how to make bingo cards for an activity she had planned for later in the week.  I told her to Google it.  She told me that she had and that Google was showing her solutions which were grossly inadequate to her needs.  So I got permission from my boss and spent the rest of the day putting together what might today be called the Minimum Viable Bingo Card Creator.

It was terrible: a Java swing app, distributed as a .jar file, which would accept words in one text-box and, when you hit Print, dump a directory of card0.html … card29.html and ask you to print them from IE because I didn’t know how to actually do that in Java at the time.  But it did actually create bingo cards, and they were of sufficient quality to give to a 7 year old Japanese kid without feeling embarrassed, so I sent it to the mailing list, and went home for the day.  I thought that was the end of it.

The next day, I had 60 emails in my inbox when I got into work.  They were split 50/50 between “THANK YOU!  BEST SOFTWARE EVER!” and “THIS SUCKS!  IT DOESN’T WORK ON MY MACHINE! FIX IT BECAUSE I NEED IT NOW!”

So later in June 2006, when I decided to create a business on the side to try my hand at the SEO/AdWords/etc stuff I had been reading about, bingo jumped out at me as a good topic for software.  I mean, if I could find 60 people who wanted it in Gifu, surely there must have been a market back in the US.  So I budgeted $60 (one video game) and one week to rewriting and productizing it (outside the day job this time, naturally), and set myself a goal: some day, after months of work, I wanted to make $200 in sales a month.

Since I had been inspired by other tales of success on the Internet, I started blogging (you’re reading the result, 5 years later) and publishing my statistics, including sales.  You can see annotated graphs in the slides, so I won’t put them in this post.

Early Days: Filling A Hole In The Internet

BCC exceeded $200 in sales in its second month, largely on the strength of two pages I wrote about Dolch sight words bingo.  (Not an English teacher?  No problem.  Dolch was an English pedagogist who compiled lists of the 220 or so words early English learners need to know on sight.  Teachers know they should teach these but often don’t know which words are on the lists for what year.  I put lists of them online and monetized them with self-ads for the strongly-related bingo activity, on the assumption that almost any teacher wanting to teach them would want a review activity, too.)

This was a good thing, since I had no budget at the time for AdWords.  The success of the content marketing also clued me into one of the core features of the software: writing pre-made word lists that shipped with it, so that teachers didn’t have to type up their own.  So I spent the next year or so in very part-time fashion improving the software, launching new versions, polishing the site, and generally learning more about running a business.  (“Schedule C?  What is that?  Ooooh.”)

Got Google AdWords To Work

In 2007, I started trying my hand at AdWords.  It was a fistful of fail — I could not seem to get either positive ROI or meaningful volumes for the life of me. A buddy of mine from the Business of Software forums advised me to try the Content Network (i.e. ads on sites other than Google.com).  I had turned this off, as prevailing sentiment on the Internet was that the Content Network was a hive of scum and villainy, filled with spammers and MFA (Made For AdSense) sites which sent traffic that did not convert.  But my buddy was sufficiently credible that I trusted him…

… and that ruined my summer.  (His advice ended up turbocharging my business, so I’m retroactively happy for it, but try telling that to me at the time.)  See, every day after coming home from work I would check into AdWords, and every day I would have a new list of spam sites to have to manually ban.  They sent non-converting traffic and I didn’t want to subsidize them.

Towards the end of summer, Google came out with Conversion Optimizer.  In brief, it automatically increased your bid on sites/keywords which sent traffic that converted and decreased it on sites/keywords which didn’t.  This meant that non-converting traffic from spam sites essentially got optimized away without me having to manually ban it.  I loved that, and became an early adopter, writing a pair of blog posts on it.

Concurrently with adopting Conversion Optimizer, October rolled around.  Halloween happens at the end of October, and hundreds of thousands of teachers look for a Halloween activity to play with class.  (Why Halloween, over every other holiday?  Because it is kid-focused, because kids are in school for it, and because as a largely secular holiday it can’t get public school teachers in trouble.)  This meant that sites with content responsive to Halloween bingo, like about.com (which was a content farm before content farming was cool), suddenly had hundreds of thousands of page views to sell AdSense against.  And who was in the front row of the auction for halloween bingo ad impressions?  Me, because Conversion Optimizer figured out that I was making out like a bandit and aggressively moved to spend my money.

Sentiment on the Internet towards Conversion Optimizer had been primarily negative, but I was killing it with it.  My blog post also ranked #3 for Conversion Optimizer right below two posts on google.com… above much of the official documentation.  I think that was probably what clued the Product Manager into talking to me.  Anyhow, to my total surprise, Google asked to do a white paper about my experience with the product.  That was my proudest professional accomplishment for a while, actually.

Content Marketing Seems To Be Working Out… Let’s Scale It

So I was doing well for Halloween bingo in spite of not having any page about it (remember — AdWords ads only), and had done even better for Dolch sight words.  If only I could make a page about Halloween bingo, and Thanksgiving bingo, and addition bingo, and any kind of bingo a teacher could possibly want to play.  Then instead of paying Google to lease the traffic, I would get it for free myself, forever.

This struck me as an unachievably huge amount of work while full-time employed, so I decided to partially automate and partially outsource it.  I taught myself Rails and rewrote the website as a Rails application (rather than 100% HTML-written-in-Notepad), then wrote a script that would populate the Cards table by reading in text files.  Each card got its own page on the website, complete with image of the card, downloadable PDF of 8 randomly created cards, and copious oppotunities to download the free trial of my software.

Creating the GIF and PDF was originally very difficult: you had to use BCC, print to a virtual PDF-ing print driver, open the PDF, screencapture it, crop the capture manually, and then send me the words you used, the resulting GIF, and the PDF.  Repeat thirty times over.  My freelancers understandably got bored, so I had someone write a script which would use a particular Windows macroing utility to drive my laptop’s mouse and do the work.  This took about an hour to get through 30 cards, and required my presence if the script broke in the middle (which was “often”), but it still cut production time down by 90%.

This ended up working out scandalously well for me.  See Scalable Content Creation under Greatest Hits if you want the story in detail.  (I also did a video with Andrew Warner and AppSumo on the topic, if you want it described in a more organized fashion than my blog’s usual stream-of-consciousness approach.)  Eventually, after optimizing the process, I had nearly a thousand pages like this created.

I also have a variety of micro-sites written on exact match domain names, like my favorite, Halloween bingo cards.  Honestly, they’re not that material to my strategy anymore, but if you want to hear more about them see the blog from a few years back.

On Being A Salaryman

Around this time my contract elapsed at the cushy translation job, where I left at 4:00 most days, and I got a job as an engineer at a megacorporation in Nagoya.  No, not that one… not technically, at any rate.  Somewhat to my surprise, the job they offered was as seishain,  which means full-time company employee.  The more commonly known coinage for this status is salaryman, because the job is designed to take over your life.  And take over my life it did.

I rush to point out that I have no ill-will against my old employers: they treated me fairly, by the standards of Japanese corporations, and I learned a lot at that job.  I had my eyes wide open going into it, too — I just didn’t realize how bad 70 ~ 90 hour work weeks would actually be.

This was intended more as a tangent for the speech, but I did more than a bit of venting in the video, much of it humorous.  See that for the full version.

Web Applications Are The Bomb

By 2009, I had advanced sufficiently in my Rails and web programming skills that I could re-release BCC as a web application.  That decision roughly doubled sales, largely due to increased conversion rates both to the trial and from trial to purchase.  I strongly, strongly, strongly suggest developers build web applications in preference to desktop apps, for reasons I have gone into before.  Or, alternately, see this bingo card:

Web apps: do ‘em.

Quitting The Day Job

The combination of these and a hundred other smaller improvements (A/B tests, etc) eventually got my sales to the point in late 2009 where I could seriously consider quitting the day job.  I went home for Christmas, talked it over with my family, then came back and told my bosses that I was through.  They let me go with a mere four months notice.  (Theoretically, the law only requires two weeks in Japan.  In practice, well, see the video.)

Also at Christmas I had a conversation with Thomas Ptacek at Matasano (conveniently in Chicago, close to my family), who opened my eyes regarding consulting.  I owe Thomas a lot for that, because consulting turned quitting from a dicey proposition (a dip in sales could have imperiled my ability to fly home or expand the business, to say nothing of making rent) into a total no-brainer.  Last year I made a bit more from BCC than consulting.  This year I’ll make quite a bit more from consulting than BCC.  The goal is still building a software product business (my current focus on that score is Appointment Reminder), but as of late the caliber of clients, work, and paychecks for consulting has been so attractive that I have been unable to say no.

Tactical Advice

The last half of the presentation was tactical advice on running a small business in one’s spare time — over the first 4 years of doing BCC, I averaged about 5 hours a week on it.  (This last year, even less: it is in maintenance mode.  I send out customer support emails and that is about it.)

The five quick hits:

Charge more money.

Most engineers severely undercharge for their products.  This is particularly true for products which are aimed at businesses — almost all SaaS firms find that they make huge portions of their revenue from the topmost plan which is bought by people spending other people’s money, but instead of optimizing for this we optimize for charging “fair” prices as determined by other software developers who won’t pay for the service anyway.  This is borked.  Charge more.

Make it a web app.

Covered above.

Put more of your iceberg above the water line.

Businesses create value with almost everything they do.  The lion’s share of the value is, like an iceberg, below the waterline: it cannot be seen from anywhere outside the business.  Create more value than you capture, certainly, but get the credit for doing so, both from Google and from everybody else.  This means biasing your business to producing value in a public manner.  Did you write software not core to  your line of business?  Great, OSS it.  Get the credit.  Have you learned something novel about your customers or industry?  Write about it.  Get the credit.  Are your business’ processes worthy of emulation?  Spread what you know.  Get the credit.

37Signals is amazing at this.  You can do it, too.

Get good at SEO.

I talk about this extensively on my blog.  In a nutshell:

  1. You need more links.  Create ways to justify people who aren’t in a commercial relationship with you linking to you anyway.  My favorite way for doing this is getting the credit for things you do, as described above.
  2. Create quality content at scale which solves problems for people in your niche.  See earlier discussion on Scalable Content Creation.

Optimize Everything

I’ve blogged extensively on A/B testing and funnel optimization (see Greatest Hits).  The big take away is, as Steve Pavlina said, all factors in the success of a software business are multiplicative.  If you increase conversions to the trial by 10% and conversions to sale by 10%, your sales go up by 21%, because 1.1 * 1.1 = 1.21.  This is awesomely powerful, particularly for businesses which don’t require hockey-stick trajectories.  You can hill-climb your way to very, very nice places in life for a one-man shop or small company.  (I mean, what real company offers 70% raises per year just for doing an A/B test every week and collecting a +5% improvement on one out of every four?)

Outsource / Automate / Eliminate To Actually Do It In 5 Hours A Week

I have previously written about Outsource / Automate / Eliminate extensively on my blog, so see here and here.

Comments?

I’d love hearing what you thought of the presentation.  I sincerely enjoy talking to people about this and other topics, so if there is a topic you’d like to hear more (or less!) on in the future, tell me and I’ll try to work it in to future presentations.  I never deliver the same one twice.

Kalzumeus — The What, The Why, and a bit of The When

Picture this: you’re a young doctor, 32, recently married to your med school sweetheart.  Life is pretty hectic, what with being constantly tied to a beeper, carrying a cellphone so you and your wife can murmur sweet nothings in each others ears when not on call, and you having all the distractions of normal every day life.  Also, earlier this year you purchased a nice little house in the city to rent out to folks for some passive income, with eventual designs of using it to build up a little equity and maybe give something to the child you expect to be having one of these years, and then it hits you:

Being a landlord sucks.

Every first of the month you get to have even more thrown at your plate, and it is by and large busywork.  You have to check your mail to see if your renter sent you the check.  If they didn’t send you the check, you have to contact them fairly quickly to request that they send you the check, assess a late fee, field the phone call whining about the late fee, explain to the renter that just because their back door is a wee bit off its hinges that doesn’t mean they get to live rent-free, try to remember to call the handyman to fix that blasted door this week, get the check a few days late, drive to the bank, and wonder why on earth you took out a $200,000 mortgage to buy yourself a minimum wage job. 

There has to be a better way, you think.  Why can’t this be as easy as your wife’s hobby selling those Beanie Babies on eBay?  Deal with any questions or disputes by email, get an email from Paypal when the money arrives, no checks in the mail, no runs to the bank, no forgetting to mail the Beanie because there is a big announcement on your eBay dashboard on your computer saying “Hey, you haven’t mailed the Beanie yet”.

Kalzumeus makes being a landlord as easy as selling Beanies on eBay.

(Note: Kalzumeus is a codename and will eventually be the name of my LLC.  The actual product name is quite boring, was chosen mostly for SEO, and will be announced later when that website has some content on it and, ideally, a functioning demo.)

One of the nice things about Kalzumeus being a web app is that features can be added to it fairly easily.  At release Kalzumeus will support:

  • Landlords and renters logging into their accounts.
  • Landlords adding properties, residences, and renters to the system.
  • Landlords billing renters, with automatic repetition, in a very flexible fashion.
  • Billings for rent, parking fees, what have you.
  • Renters paying their bills online through Paypal.  All the landlord needs is a Paypal account, the computer handles the rest.  No messing with buttons.
  • Email notifications of rent due.
  • Automatic bill payment for most renters.  (My systems are more flexible for automatic rebillings than Paypal’s are.  I can, for example, bill someone on the 1st Monday and 3rd Thursday of every month.  I don’t know why you’d want to do that, but “1st and 3rd Friday”, for example, is a typical paycheck schedule and landlords like being able to bill people immediately after they get their paychecks.)
  • Roommates.  (This was a low priority feature, but it was free with an architectural decision, so it made it into the first release.)

What I eventually want to add:

  • More payment options for landlords to choose from.
  • Automatic paper dunning letters.
  • Expense/work order tracking.
  • Reports.
  • “Click this button to print out the stuff your accountant wants from you.”  (Depreciation calculation and all that jazz.)
  • Export to Quickbooks, CSV, etc.

Is this a big market?

There are fifteen million landlords in the United States, according to Intuit.  The most common number of properties owned is one.  (Cue the “If I could get 1% of that market…” song.  Now all I need is a venture capitalist and I’ll have all the ingridients for a funding round.)

Who are the competitors?

On the one hand, we have property management companies, which charge a figure anywhere between 6 and 10% to stand in for you in all or most interactions with tenants.  There are also services which will do ACH (Automated Clearing House) deductions for landlords, which are a way to automatically withdraw set amounts of money from someone’s bank account, for approximately $10-15 a month plus $2 per renter.  Some of these services also provide online reports, although the functionality is fairly limited.  Finally, there are many, many companies which offer “property management software”, which is basically integrated accounting packages set up for landlords.  One I have a lot of respect for is LandlordMax, run by a fellow uISV.  (Before anyone asks, I don’t see him and I as really being in the same niche.)

Why go into a market that crowded?

Because the vast majority of my competitors sell chainsaws and there are a lot of landlords who really need butter knives.  Much of the property management software is geared at professional property managers, including folks who have strong accounting backgrounds and are managing hundreds or thousands of units simultaneously.  I think there is a whole lot of overkill going on for folks who are at the “I’m not so much a landlord as I am a teacher who happens to own a house which I rent to people”  side of the market.  Additionally, the pricing models for many of the existing solutions totally ignore the needs of small landlords, probably because they are not nearly as lucrative as large landlords. 

Pricing Model

I am thinking of doing one month of free trial and then billing folks $X per month.  I have not decided on a final X yet, but am thinking $10 or $15 puts it in line with many of the successful small business web applications.  If folks want to prepay for a year I’ll give them two months free.  The wild card is Paypal costs, which for many of my customers are going to run at essentially 2.9% of their monthly rents.  That is a lot of money for just processing payments (comparable with running credit cards yourself, a heck of a lot more than using an ACH service).  At a $650 average rent in the US, that works out to about $19 in Paypal charges on top of whatever I charge.  I am cautiously optimistic that if I make it easy to use I can justify a price premium from some landlords over ACH payments, which are not exactly easy to set up (contracts need to be signed, faxed, etc), and am extraordinarily confident that for folks who are looking to accept credit cards I can do a bang-up job.

I am also thinking, eventually, of offering a separate $99 a month account type targetted at professionals (management companies and the like).  They’ll be able to create logins for the property owners, who can check the website at any time and see “Ooh, yay, I’m making money”.  That will require a bit of rearchitecturing so it is slightly down the road.

The Shoestring Factor

I have already booked most or all of the prelaunch costs.  While I don’t have my tab in front of me at the moment, they came to a little less than $250 last time I checked.  That includes a year worth of hosting with Textdrive prepayed.  (Just over $10 a month, even counting the setup fee.)  If my hosting plan is inadequate for keeping a Rails application running, which I have been hearing conflicting reports about, I’ll get one of their medium accelerators (basically, a slice of a server) for about $65 a month.  Currently, my break even number of customers is one.  If I end up buying the accelerator, that will put the break even number at between 5 and 7.  (Bingo Card Creator, by comparison, is profitable from the first customer every month to the last.)

Where is the end-game for this?  I don’t know.  My goal for the intermediate term is 300 (paying) customers, and I’m hoping to have say 80 to 100 by the end of the year.   (I generally like to set small and achievable goals and scale up from there.  My first goal for Bingo Card Creator was $200 a month in sales.  Hit that and kept going…  working on $1,000 a month now.)  As scary as this is to say, 300 paying customers would be enough for me to quit my dayjob.  (I love being a uISV.  If you’re doing some sort of advertising funded social networking site, you can have hundreds of thousands of users and still be losing money every month to your massive hosting and infrastructure costs.)

Marketing

Blog, SEO, and AdWords to start out, more as time permits.  I’ve been looking at the market for a couple of months and while “property management software” is an absolute bloodbath I am fairly confident that I can SEO very well for other queries, like “pay rent with credit cards”, “online rent collection”, and the like.  I don’t need or want to compete with the largest players on their own turf — for the moment I’ll be quite happily picking and choosing crumbs dropped from the table.

Demo / Ease of Use

I’m working at having a mostly full featured online demo for the software, part of my usual quest to get folks to the shiny bits as quickly as possible.  I also have no-hassle, no download, no credit card, “Give your email address and get started” account creation.  There are plenty of examples you can find of Web 2.0 companies who do Actual Business Processes without requiring 30 minutes of forms to get started.  I am practicing the most sincere form of flattery with regards to the design of my own signup process. 

In my timer tests (something I often did with Bingo Card Creator — time how long it takes from hitting the download free trial button to when the cards come off the printer), I can sign up and have automatic billing working for a renter in 90 seconds.  We’ll see if I can’t shave some more off of that when the interface is more complete and AJAXified.  For example, I want you to be able to do the most common types of rent (monthly on the 1st, monthly on the 1st and 15th, etc) with about two to three clicks while adding a renter.

Legal

I am not decided on whether I will have a lawyer draft the terms of use or not.  I’m leaning towards “not” — the application can’t kill anybody, and a quick glance around the world at my various competitors shows that companies with Serious Money On The Line are quite happy to just have generic “If you bill your renter for a gazillion dollars and get taken to court, that is Your Problem” disclaimers.  The privacy policy is already drawn up, and looks very similar to the Bingo Card Creator one: we use cookies to track X Y and Z, we don’t sell your information, we won’t spam you, any questions feel happy to ask.

So when will this be publicly released?

I will happily show this as soon as I can without embarassing myself.  Since it is currently black text on a white background with the default Rails stylesheets for errors and much navigation is still accomplished by manually keying in the proper URLs, the app is not quite ready yet.

At the moment, the business logic for the first shipping version is about 80% complete.  The billing system still has yet to be implemented, and I have yet to write the systems for sending reminder emails, etc.  The interface, on the other hand, is only about 15% complete — things link to the right pages most of the time, but I will have to redo most of the views so that they look nice and pretty in Multiflex-3.  I also want to hand-edit the Multiflex-3 WordPress theme so that clicking from the product blog to the product site is a totally seemless experience, which by necessity involves a bit of headache since WordPress is PHP, the product site is flat HTML, and the application is Ruby on Rails.  Yay for getting to tweak the same template three times.  (I might eventually make the static pages served by Rails, but for the time being I know that new Rails apps can be a bit tempermental and if I should cause the app to die I would like people to be able to access the front page and send me a letter about it.)

Of course, since I’m currently winding down my employment contract with the day job and actively searching for a new one, the schedule could get changed at any time.  That is another reason why I don’t want to have a site in front of potential customers until I can have reasonable assurances that I have time to act on things that potential customers tell me.

My Capsule Impressions of Ruby on Rails

How am I finding Rails?  Elegant, but not easy.  I will need to do a refactor or three over the codebase to standardize the way I do some things before I release.  The amount of existing code which can be leveraged for my project is pretty low but when it does exist its amazing.  (You should see the graph libraries.  Wow.)  On the other hand, the community is growing rapidly and as a result the average level of skill in the community (and hence on forums, etc) is not quite so high yet. 

Test driven development has proven to be a lot like going to the gym — I didn’t enjoy starting it but the results are easily visible at the annual physical.

Since my interface is not in anywhere close to its final form yet I haven’t been AJAXing everything in sight, but I have identified a few places where there are major, major wins for user experience using it.  I was also able to replace graphs generated on the server with graphs generated on the client (using a clever bit of Javascript whose name eludes me at the moment), which moves the performance of the application from “fast relative to my projected needs” to “stupidly fast relative to my projected needs”.

Programming Productivity Up By 10%… Yowza

Direct AccessI have tried expressing my love for Direct Access before.  Really, its hard to describe until you’ve tried it.  However, Andrea was smart enough to include an automatic logging feature in the newest version, which demonstrates exactly how much time it saves you.  (Memo to self: scrape user accounts for Kalzumeus, generate similar ROI-proving eyecandy, and put at the top of the Upgrade Your Account screen.  Its brilliantly simple salesmanship.)  For me, that number is scary.  Lets focus on yesterday, shall we.  Here is a shot of Direct Access on my home computer, which was on yesterday from 7 PM when I got home to 2 AM.  Of that, 3 solid hours was programming time, after doing battle with SVN fruitlessly for far, far too long. 

During programming time, I’m typically opening folders and programs left, right, and center.  Copy this to there, grab the backup of that, nuke those sources, where the heck was my Rails API reference, need to open Thunderbird to retrieve my SVN password, that sort of thing.  Apparently I do this more commonly than I had thought:

Direct Access Stats

I generally estimate 20 seconds to accomplish any random opening from staring at my IDE window.  For example, to get to the Rails API, that would generally be Start -> Internet Explorer  -> Google (my home page) -> Rails API -> I’m Feeling Lucky.  (Why type as opposed to using my bookmark?  Faster, less requirement for right hand, gets autocomplete.)  Given the need to take my hands off the keyboard and the lingering pain in my right hand, thats a good twenty seconds.

Well, thats a bit shorter, isn’t it. 

rrrTAB (used to be railsTAB, but I found myself typing it a lot) gets me a command shell opened to my Rails application directory.  sshTAB gets me a Putty window set to automatically log into the server I’m most frequently using.  All the power of the command line and autocompletion… from anywhere.  Bwahaha.  You can keep your OS X, vim, and bash, I’m puttering around in a deliciously iconoclastic Windows XP… at Unix sysop speeds.

I also love the autotext for hammering out boilerplate code… that turns out to be a heck of a lot less useful in Ruby than it was in Java, though, since a) I write less boilerplate and b) I’m not sufficiently well versed in the boilerplate to have prepared it as a macro yet.  In Java, on the other hand,  I know I will have to do intconvertTAB again, writing out a try-catch block to surround a very prosaic String to int conversion. 

try {

replaceMe = Integer.parseInt(cursorStartsHereAfterIHitTab);

} catch (NumberFormatException e) {

// Handle if string was passed by user, safe to ignore if string came internally.

}

The third time I type the same freaking snippet out it goes in Direct Access with a memorable abbreviation.   I have twenty of them for Java now, and a few for Rails, mostly for migrations and to act as quick references for syntax. 

You wouldn’t think shaving a few seconds here and a few seconds there would really matter that much, but the stats don’t lie.  A 165 minute programming session was a 180 minute session purely thanks to Direct Access.  Not bad.  I really wish they hadn’t forced me to uninstall my copy at work — “Well, Patrick, you see, we have a new security policy…”  Suit yourself, boss.  I get paid regardless of whether I’m being productive or not at the day job.  When I’m the boss, heck, time spent clicking is time spent not doing more important things.

If you don’t have something like this… get it.  Really.  Its a no brainer. 

As usual, product placements on this blog are 100% uncompensated.  I like it, I use it, it saves me time and money, I blog about it.  I do not solicit, accept, or envision folks giving me money for anything other than the products I sell.

Spending Money, Incurring Headaches

Kalzumeus is getting to the point where I want to start periodic deployments to the Internets to test it (yes, yes, that DOES mean I’ll be able to announce it publicly, sometime this month if development doesn’t hit snags), so I went shopping for a hosting service.  I eventually settled on TextDrive, which appears to have a decent reputation for Ruby on Rails hosting.  $124 later I was the proud owner of a new “startup” hosting package for a year.  I’ll be spending another $120 or so later to get a certificate for the domain but for now I don’t have any data that needs https so its a waste.

Sidenote: Its a wonderful age we live in where you can buy 95% of the tools you need to run a business for less than $10 a month.  The founder of Textdrive, a guy named Jason who clearly has some chops in the provisioning enterprise class server deploments department, reckons you should budget 10% of sales for infrastructure.  So, for example, if you plan on getting $10,000 a month in sales your monthly server/colo fees/electricity/etc bill should be about $1,000.  This may well be true for larger installations, but I’m pretty sure you can get by on about $30~$50 a month for $10,000 in sales as a uISV with some care given to app selection.  I’ll break down the math for you some other day, after I have an app and benchmark numbers I can point you to, to demonstrate that I’m not shooting smoke out of my hindquarters.

Anyhow, yesterday was a comedy of errors.  These are 100% my doing — I bit off a lot more than I could chew with technologies I do not have a full conceptual understanding of yet.  Example: I spent three hours trying to manhandle my local SVN repository onto the server.  The textdrive docs got me set up with a new repository in 3 minutes, but actually importing the information to it was a constant battle with Netbeans.  I eventually lost my most recent work to corrupted settings (“What do you MEAN I only have 3 class files?!”) after twiddling stuff with text editors, and had to cleansweep my local copy of everything, then restore from the local repository.  Then I got out Cygwin (bless you, Cygwin), killed all the .svn directories, deleted and remade the remote repository, and imported the newly-checked-out-locally repository into the remote repository.  One more open of Netbeans later and I was done.  Blaaaaah.  On the plus side, both Kalzumeus and Bingo Card Creator now exist safely outside of my hard disk.

Incidentally: its far, far simpler to set up hosting with GoDaddy than it is with TextDrive.  The difference in the level of control you get for TextDrive is night and day though.  I’m eventually going to have both Apache and Lighttpd running on the server, Apache proxying everything and making sure the /blog/ folder goes to WordPress, with Lighttpd putting things to the Rails application.  Try that on Godaddy… if you dare.

Then, despite the fact that it was running rather late, I wanted to get some actual coding done rather than losing a night just to wrangling with tools.  Again, 100% due to my own negligence, I lost a lot of time debugging why a transaction wouldn’t work.  Well, OK, 98% to my own negligence.  You see, Rails takes an awful lot of syntatic shortcuts which are deeply meaningful but documented in, I kid you not, exactly one throw away line in The Book.  And, unfortunately, the emphasis on “create code whose intent is crystal clear” gets lost in some of these shortcuts.

Example: build vs new vs create.  One throwaway line will teach you that create actually creates the object in your database while build/new just create it in memory, a sort of Key Distinction when you’re deciding “What do I need to guard with a transaction block?”  And, for more fun, build and new are interchangeable… except when they’re not.

@user = User.build #OK

@user = User.new #OK, same as above

@new_friend = @user.friends.build #OK

@new_friend = @user.friends.new # No new method on friends!  Whoops!

@new_friend = @users.friends.create # Works, but note different database behavior!

Anyhow, I will soon be establishing a blog at kalzumeus.com (you could visit there now, but its a fairly boring “coming soon” page that was autogenerated).  That will be getting most of my future programming/business oriented and professional development posts.  This way I can keep the blog for the actual product site focused on the customers rather than on myself or an interest the customers don’t share (“helping uISVS make money”).  I won’t be abandoning this blog in the near future, though.

Ranking For An Arbitrary Organic Search Query

This was posted on May 30th, 2007, Japan time. If it is after June 5th where you are, I predict that I’m pretty high on Google for the search arbitrary organic search query. I know this mostly by construction — I looked at the results before writing this post, observed that the competition is very weak for that query, used those words in my title, and will easily leapfrog over the weak competition.

What does that have to do with microISVs? Well, indulge me in a little meandering around the world of SEO for a moment. Roughly a fifth of my traffic at Bingo Card Creator comes from obvious and highly competitive search terms like “bingo cards” or “bingo card maker”. You know how many people have a substantial monetary interest at being #1 for bingo cards? Plenty of them, and most aren’t selling to elementary school English teachers, if you catch my drift. (Ironically, most of us who actually rank highly are. Go figure.)

Then I get another chunk of traffic from less obvious search terms, which I know because I know my niche well. Dolch Sight Word Bingo, for example. The amount of people searching for that won’t make me rich but they easily justify writing a page about it, which pays off month after month.

Then I get a huge percentage of my organic search traffic, about 60-70%, from arbitrary organic search queries. The majority of them are never repeated by another person, which gells with Google’s observation that 50% of search queries are unique (that is a “remembered factoid”, treat it with a grain of salt). Some are simple typos, many of them are natural language searches (“how can i make a bingo card for a third grader”), and then the rest are just unique because they’re… unique (“kasmir pulaski day spanish bingo” — yes, by the way, Bingo Card Creator will meet your needs). I like to mentally think of these as snowflake queries — every one is unique but if you look at a lot of them at once they certainly look a good deal similar.

I have actually been looking at snowflake queries and doing some work based on them. I’ve been doing some minor optimizations to my website for months, gradually including more content (which has a tendency to grab snowflake queries just because educated writers use synonyms and from Google’s perspective third grader != third grader != grade three != beginning English student) and adding in specific vocabulary which I wouldn’t use naturally but which my searchers do for whatever reason. For instance, some people call bingo cards “bingo boards”. Who knew? Certainly not me, as I went through my entire life without hearing that usage, but my search logs do not lie. This is the reason “bingo boards” is now bolded on the front page of my website and sprinkled on a few of the sub pages.

However, I had a bit of a brainstorm recently: this sort of optimization is nice and demonstrably effective, but what would happen if you took it to the next level. The trigger for this was when I wrote the blog post Increase Your Software Sales, I mentioned that it would rank pretty highly for “increase software sales”, which would be a nice thing if I cared about that keyword. When I said that, it was mostly a minor boast which I thought of little importance in the scheme of things. But it sent me to thinking:

1) Hey, wait a second, I can rank for a snowflake query with a really trivial amount of work. Put query in title, use in body text, don’t spam, done.

2) I have pages and pages of snowflake queries. Many of them have strong commonality in either words or theme.

3) These queries make me money. Snowflakes account for more than half of my organic search conversions.

And this got the wheels of my head turning. What if, instead of doing the haphazard optimization to grab some of the words in these queries that I wasn’t targetting already (like “bingo boards”), I just data-mined the bejeesus out of the suckers. Say I found 100 strings from there that were reasonably close to each other, distilled that down into 5 main words and 5 supporting words or variations, and then wrote my next resource page or blog post about them. Why, that page or post would probably rocket to near the top of 100 queries. That is worth pure gold, since people will write dozens of minor variations of each of those minor little snowflake queries. And my page or post would suck them all up in one big snowball of goodness.

I was briefly very, very excited about the idea, and started working on a gawk script to start clustering my snowflakes. (Incidentally: by training, I’m a natural language researcher. I know this to be a hard problem and yet hacky solutions to hard problems are fun for me — thats why I got into natural language research in the first place.) Then I slapped myself silly, figuring that somewhere on the Internet somebody smarter than me has already had this brainstorm and developed the same tool. I should really pay them the money for the tool and spend my time actually writing the text which will clump up the snowflakes (which only I can do, since I’m the guy who presumably has the domain knowledge) rather than reinventing a solution to a Certified Hard Problem and then using it to squeeze out an extra sale or two of a $24.95 app a month.

Anyhow, after a bit of searching, it turns out that the guy who already solved this problem made a webapp called HitTail. It has the broad thrust of the features I wanted: tracks what queries get people to find you (unnecessary, I can do that already), and then selectively picks queries out which (the site claims) hit a cluster of snowflakes and are not currently very competitive. I’ll be taking it for a test drive this week.

This is of particular interest for me for my next project (Kalzumeus, for regular readers of this blog). It is adjacent to a market space which is extraordinarily competitive and has many established firms with Big Budget$ To $quash uISVs. I don’t see them as particularly competitive for my niche but I do see them camping on some major keywords (both for organic search and AdWords). Time to go around the obstruction rather than running straight into it. I think I’ll see how far I can get with optimizing for snowflakes, well, once I have something to optimize for at any rate.

April Stats

(Images in this post may be truncated by Wordpress.  Click to see in a new window.) 

Oh, yeah, April happened.  The capsule summary: week-long holidays like Easter hurt like crazy — I had exactly one sale during Holy Week.  We’re also fast approaching the end of the school year and I can feel orders slowing down quite a bit from their usual clip in May, so I wouldn’t expect awesome times ahead.  On the plus side, I’m guaranteed to continue covering costs and will probably eek out enough profits to continue bankrolling Kalzumeus.

Sales: 26 (no refunds, 4 CDs — memo to self, find out why those aren’t selling well anymore)

Gross Income: $668.70

Expenses:

GoDaddy: $7

E-junkie: $5

CrazyEgg: $9  (technically only a sliver of that is in April but, eh, who’s counting)

Paypal: $12.50

SwiftCD: $30.56

AdWords: $61.01 

Total Expenses: $125

Total Profit: $544

Traffic-wise, things were all over the map.  My numbers on Holy Week declined almost as low as they did during the Christmas vacation.  I’ve been trying a few things with AdWords (you might notice from the higher expenditures), some of which worked and some of which did not.  (Advertising directly on a competing site did not.  Constant improvement on the main campaign did.  Content network did, to my surprise.)

Rather than spending time copying numbers by hand from Analytics I’m going to be lazy and just paste what it shows me for the month.  For those of you unfamiliar with the interface: G1, G2, and G3 refer to configurable goals and the percentage of visitors from a particular source who complete them.  In my case, G1 is purchasing something from me (note this understates my actual number of customers by 50%, due to some issues people seem to be having with reaching the page that tracks this), G2 is downloading my trial, and G3 is confirming the installation of the trial (by requesting an update for it). 

Conversion Rates by Source for Bingo Card Creator

I generally make most of my decisions based on the G2 column (i.e. free trials downloaded).  The reason for this is subtle: if a person comes to my site, downloads the trial, closes out of their browser, then runs the trial, and later conversions (such as a purchase or check for updates) typically get filed under “direct”.  They typically use the link in the application to arrive at my site, and from Analytic’s limited view of the world thats the same as typing www.bingocardcreator.com “direct”ly into your browser.

As you can see, my most promising prospects are the ones I get from AdWords.  Organic traffic from Google is the largest segment of my traffic, accounting for about half of it, but their conversion rates are pretty poor.  That is unsuprising if you look at what people are searching for when they get to me — typically I perform fairly poorly in terms of conversion rates on the high traffic queries like “bingo cards” and very well on long tail queries like, well, why don’t I show you some:

Popular Organic Search Terms for Bingo Card Creator

In a very Long Tail-esque moment, I get about 30% of my Google hits and trial downloads from the top 10 search terms.  Its 3:30 AM so I won’t do too much math on what the breakdown is for midlist search terms versus the Long Tail shown above, but my naiive guesstimate is that probably one third of my downloaders are from the top 10 search terms, one third are from less common but still fairly popular search terms, and one third are looking for a phrase that only exists for them.  I could show you pages and pages and pages that look like the above image.

Out With The Old, In With The New (Buttons)

I have been thinking of how to create application buttons for Kalzumeus in a pretty Web 2.0-ish style and, on the recommendation of several BoSers, bought Axialis Icon Workshop.  To test it out, I decided to redo my sort of frumpy Buy Now! and Download Free Trial buttons for Bingo Card Creator, and see if the new versions aren’t any more successful.  While you can of course see them at the best place to get bingo cards for teachers on the Internet, I’ve isolated the section of the interface so you won’t even have to click off this site:

The Old Buttons (Created in Paint.NET using an open source button as base)

The Old Buttons At Bingo Card Creator

The New Buttons (Created in Axialis Icon Workshop, using their Web 2.0 Objects Pack, with cropping and resizing in Paint.Net)

New Buttons

(Edit: GoDaddy seems to be undergoing maintenance or something.  If you’re getting slow as heck performance grabbing those images, that is also affecting my website proper.  Yay.)

I Love It When People Fix My Problems

One feature that I had in mind for the 1.1 release of Kalzumeus (does it even make sense to have a 1.1 version of a webapp?  Well, you get the general drift) was the ability to send a real, honest-to-God postal mail in an automated fashion.  It is a requirement with legal significance for some of my customers, and all of my customers would see the ability and go “Oooh, that would save me so much hassle”.  I have been searching for a good way to do this for a while.  Obviously, doing it myself would transform me from a highly-paid software developer to a low-paid postal clerk, which is frankly stupid when there are plenty of businesses out there which offer ways to do it without ever having to lick a stamp.

I was originally planning on using the Post Office’s API.  They have a service called NetPost which is aimed at direct marketers.  The prices are pretty high for one piece ($2.25 or so) but reasonable if you’re sending hundreds, I guess.  I used to use this any time I needed to send a letter to America which didn’t need a physical signature on it, since it costs about the same as sending a letter internationally and gets there a week earlier.

However, cost issues aside ($2.25 is dwarfed by the number of sales this will get me, and I can probably charge extra for it for customers who use it on a regular basis), I really hate having to learn another API.  It is one more thing that can go wrong with my application, and the consequences of a letter not being sent when my app reports it sent are rather severe.  Then today I ran into a site called Postful, which has a much more convenient interface — send them an email, they send out a letter.  You preload your account in advance and after that its $.99 a letter for one page, which is where all the letters I’d be sending are.

Composing an email to my requirements is trivial, since I already have the exact same functionality elsewhere in the program to deliver this notification via email.   As a result, this will probably get into the 1.0 release of Kalzumeus.

As an extra bonus, I can now save myself $1.25 the next time I have to send out a letter to the States.  Yay.

Kalzumeus Hits 25% Feature Complete

Well, OK, thats a little optimistic.  Its certainly 25% *feature* complete but its not 25% of the way ready to actually have users.  The interface still needs to be integrated, for example (I have functional skeletons up for most of it but they are too ugly to ever show to people, even if they do have the right form elements on them).  I plan on going public with the problem when I hit 50%, which might be as early as next week considering I have three days of it off.  Its Golden Week and this year instead of taking a well-deserved vacation I’ll be coding and writing resumes, bleh.  With a day trip out to a hotsprings or something… far, far away from a computer.

Kalzumeus Has Logins!

I felt absolutely miserable this morning (word to the wise: sukiyaki curry is NOT for the faint of stomach) and took half the day off.  After I got home I was feeling rather useless, so I decided to bang out some Ruby code.  And bang I did — apparently I covered something like 600 lines in 3 hours.  Granted, much of that gets autogenerated for free.

Today’s big accomplishment was getting user verification, account creation, logins, and all that jazz down to a science.  I now have the framework to create an account, validate it via one of those lovely “Click here to validate your account” emails, login, restrict page access to those logged in, yadda yadda.  One would think that since essentially every webapp needs this functionality there would be an easy, non-repetitive way to do it in Ruby but since the precise specifics differ for every application I think its probably easiest to roll your own rather than doing a search of all the plugins that do it and figuring out which one meets your needs, then adapting it so that it actually meets your needs.  This breaks my “Do not write code someone else will write for you” rule, unfortunately.

I am decently sure that the login scheme is secure, at the moment.  You can’t do any funny stuff like, e.g., intercepting a validation email to get a free login into the app.  Web application developers who allow that or its close cousin an email with your user name and password written in it need to have “SMTP is not secure” carved onto their eyeballs so that they will not forget.  As for cross-site scripting and SQL injection attacks, well, put it this way: I’m afraid, very afraid, and will be creating a test script whose only purpose is to try both on every form and see what pops out.  My code probably needs a liberal sprinkling of h at the moment (its a Rails convenience method which html_escapes its parameters, saving you from XSS).

One thing I have found which I really like about Rails is the scaffolding.  As my program gradually gets more complicated the free scaffolding is getting replaced in functionality by the workflows my users will actually be using, but the free scaffolding with very minor modifications makes for a great development-time admin interface.  Some folks apparently like having a Ruby console open and typing things like User.find(:first, :conditions => [‘last_name = ?’, ‘Steve’]) to see if Steve got added like he should have been.  I rather prefer going to http://localhost:3030/users and visually scanning the resulting webpage to see if Steve is there.  Of course, it would be even easier if I could figure out how to test and assert the existence of Steve, and then actually do that when developing, but one baby step at a time.

I am having some difficulty getting my head around the whole test-driven-development thing.  Testing for me has always been “Run, see what breaks, fix, repeat”.  This is one of the bad habits I hope to fix by doing this project (no reason you can’t SkillUp* for your day job while working for your uISV). 

 * Did that look funny?  Its probably because its Japanese.  I’m fairly sure it entered the language from console RPGs: when you get a level, your skills (e.g. Swords, or whatever) sometimes get points added to them.  That is written as SkillUp in Japanese, basically just by transliterating “skill up”, and anybody under the age of fifty or so both understands what it means and, whats more impressive, uses it in daily conversation.  For example, my coworker a few weeks ago said “Patrick, help me out here.  I need to SkillUp in Powerpoint so I can get a job as a Project Manager at $COMPANY”.