May 2007 Stats

Capsule summary: treading water with the end of the school year, but see my next post about how summer is being much better to me than I expected.  (I was expecting sales for June to be barely enough to cover my AdWords campaign.  They are already over half of May’s.  Traffic has gone up.  The explanation is probably going to be of interest to you… but my hands are aching so it won’t be given today.)

Sales: 22 (with 10 CDs — note that that e-junkie cart change made ALL the difference!)

Gross sales: ~$600

Expenses:

Paypal: ~$10

GoDaddy: $7

e-junkie: $0 (usually $5, but they tossed me the month free when a system glitch caused me to have to manually process 3 orders.) 

AdWords: $52

AdCenter: $11

CrazyEgg: $9

SwiftCD: $49

Total Expenses: $138

Total Profit: ~$452

 I’ll talk traffic trends next time.

Comments Off

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.

Comments Off

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.

Comments Off

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.

Comments Off

A Note About Startups Outside the Valley

I am strongly tempted to take this article, translate it into Japanese, and pass it around the office, because what works in Columbus, Ohio is also very true for life in Central Japan.  Even Nagoya is more of a Detroit than it is a Silicon Valley.  (Incidentally: nobody here knows what Craigslist is, either.  Most don’t even know Mixi, which is Myspace for Japan.)

I have one of my book length pieces in the works on how uISVs, like startups, can milk web apps for everything they’re worth.  My mental title for it is “The Beauty of Being Small”.  I suppose I should wait until I’ve actually got a web app to be giving advice about how to make web apps, though.

Comments Off

How To Rename A Web Page

I renamed my Free Resources page, which is the #3 most popular page on my site, to Printable Bingo Cards, which both more accurately describes what is available there and is a much better title for SEO purposes.  This required some slicing and dicing in all of my HTML files because that is a link which appears in my navigation bar.  Luckily, bash was adequate for the task as always.

for htmlFile in *.htm
do
  sed s/free_resources\.htm/printable-bingo-cards.htm/ $htmlFile > temp1.txt
  sed “s/Free Resources/Printable Bingo Cards/” temp1.txt > temp2.txt
  mv temp2.txt $htmlFile
  rm -rf temp?.txt
done

I also redid the title tag (“Free Resources from Bingo Card Creator” to “Printable Bingo Cards from Bingo Card Creator”), updated the site map with the new URL, and added a RewriteRule for the old URL to my .htaccess so that I don’t break any links from the blogs and schools who linked to it.  This is a fairly key step for any change you make that affects a popular page.  If you do not do it, not only are you hurting user experience on third party sites which trusted you with a link, you’re squandering PageRank that you’ve worked so hard to gain.  Adding in another rewrite rule takes like 5 seconds, so do it!

## put me somewhere near the top

RewriteEngine on

## put me in the big block of rename rules you’ll be creating

RewriteRule ^thanks-for-downloading\.htm$   http://www.bingocardcreator.com/thanks_for_downloading.htm [R=301,L]

printable-bingo-cards.htm is, by the way, pushing it on how many words I would suggest you have in a filename.  I’m fairly sure that is under the threshold to get penalized because one or two of my competitors use three word filenames, sometimes after having the same three words in a directory listing.  That is a bridge too far in my book, and I expect Google will smackify it sometime soon.  Repetition in the URL gives no useful information to human users, and it is not a “natural” design technique for a website either, so I suspect that Google will eventually toss it out as a useless SEO technique, the same way they habitually ignore overly-long-file-names-stuffed-with-keywords-like-this-one.htm .

Finally, don’t forget to resubmit your updated sitemap to Google.

Comments Off

Community-oriented Marketing — Forums, Usenet, Mailing Lists, etc

“So what did you think of the Season Finale of Heroes?””Dude no spoilers I haven’t seen it yet.”

“Oh, alright, highlight the following to see what I thought: *start highlight* The fight scene between Hiro and Sylar, which was supposed to be the highlight of the entire series, was over in less than two seconds.  He stabs him, the end.  What a let down! *end highlight*”

“Hi forum people!  Buy cheap Lost DVDs at spammerplanet.com for only $49.95 per season!  Free shipping!”

“Spam!”

“Spam!  Reported!”

“Where are the “#”#%ing mods?  I tell you, this forum has been going downhill since Tommy stopped running it.”

Recently, in the Business of Software forum, somebody made the observation that I have never posted to Usenet about Bingo Card Creator, and they reasoned from this that posting to Usenet about consumer software is unpopular.  (For those who may not know me: Bingo Card Creator is software which produces bingo cards for teachers.  I wrote and sell it as a small business.)  I’m both flattered and frightened that I’m supposedly representative of good marketing practices.  However, I think the conclusion should be a little broader than they one they drew: it is ineffective to directly market to a community which you are not a part of, be that a forum community, a mailing list, or a Usenet group, regardless of what you are selling.

What Community-Oriented Marketing Is

The key thing about Usenet or a PHPBB forum or your local school’s teacher mailing list is not the technology that is used to drive them.  The key thing is that they have a community, quite possibly a very tight knit one which has built up over years.  That community has its little social rituals, in-jokes, standards of acceptable behavior, shared history, friendships, rivalries, dramas, a whole tapestry of meaning for its members that you, the outsider, know nothing about.

If you attempt to sell something directly to the members of a community you are not a part of, you risk a great chance of falling afoul of community norms and an almost certain chance of wasting your time.  Many communities are quite opposed to the commercialization of what they perceive, correctly, as their shared social space.  Some have debates rage for years about whether its appropriate or not to put AdSense ads on a forum sidebar (sidenote to board admins: please don’t.  Regardless of whether its appropriate or not nobody will click them.  They’re coming for the community, not to be marketed to.  The only way to use AdSense on a forum is to put interstitial ads between posts and harvest misclicks.)  Some of them are filled with Slashdot-esque folks who are fundamentally opposed to people other than themselves making money for any reason.  Some are filled with folks who either do not have money or should not be spending it if they do have it.  If you’re not a member, you will not know the lay of the land, and you might step directly into one of the minefields.

Legitimate Ways To Market To A Community You Are Not A Member Of

Of course, there are a variety of approved ways to drop an advertisement in a community.  You could, for example, buy an AdSense ad there — see above, though, its tremendously unlikely to be effective.  Some communities have established Advertising boards — this should be a pretty big hint to you that they really would not appreciate an ad in their main forum.  Of course, traffic to their advertising board is a bare fraction of what it is to the main forum (if everyone wanted to see ads they’d be accepting of ads there!).  I spent about 2 hours when I started up Bingo Card Creator running around the Internet, finding ESL forums, looking to see if they had an advertising board, and dropping in a tasteful and honest ad for Bingo Card Creator if they did.

The Relative (In-)effectiveness Of Direct Marketing To A Community You Are Not a Member Of

The best performing ad out of those sends me a total of perhaps 10 visits a month, resulting in 2 trial downloads.  Think of that: one hour per trial download per month (TDPM — many marketing expenses are evergreen on the Internet, so its handy to watch how a one-time investment continues sending you traffic as opposed to watching the one-time spike of traffic immediately after posting).  By comparison, there are many, many better ways to deploy one hour of my scarce time.  One way would be to work at McDonalds, because a trial download is only worth about fifty cents to me.  But thats no fun.

Writing my Squidoo page took me 2 hours.  That was worth 5 TDPM.  Already thats doubly effective.

Writing a list of Dolch sight words for my website was “slightly” more effective.  It generates about 200 TDPM, partially from organic search and partially from folks who pass the link to their friends.  That page took, yep, about an hour to write and we’ll call it another hour work of linking from my blog over the last year.

Writing a single blog post about Free Bingo Cards took me about 15 minutes.  That generates about 150 TDPM.  (Note: I had quite a bit of help on that post thanks to an impromptu brigade of friends who decided to link to it.)

Oh, and in my portfolio of marketing efforts, there is one community link that sends me 20 TDPM.  It cost me 0 minutes to write, because I didn’t write it.  If I had written it, it wouldn’t have sent me a single hit.  The reason the link is so effective is because someone who was trusted in their community put their reputation on the line and said “Hey, check out this site, it will help you educate your children”.  It wasn’t an anonymous fly-by-night posting from some Internet entrepeneur (sadly, half of the world now thinks that is a euphemism for “spammer”), it was a recommendation given to the community by their childrens’ teacher. 

Trust Is Key

That is what community-oriented marketing comes down to: trust.  If you don’t have it, then building it up will take quite a bit of time, and you have much better options for marketing in terms of time spent per marginal exposure gained.  (See the above list for some ideas.)  If you are trusted somewhere, you might be able to effectively market there, based solely on your existing trust.

I personally haven’t used that method.  I am trusted, for example, in a community of ESL teachers close to where I live.  I know I could send out a email to the list and get 50 downloads of Bingo Card Creator in a day.  However, I’m trusted precisely because I have not been a self-promoter for the last three years, and I see no reason to throw that trust away now for a piddling amount of money.  On the other hand, I was a volunteer translator for a major Japanese ESL textbook, and they were kind enough to throw me a link from my biography (on the acknowledgements page) to Bingo Card Creator, which can’t possibly hurt.  That is marketing, but it is marketing which enhances my trust in the community rather than detracting from it. 

I strongly suggest that you do the same — don’t aggressively push your product at anybody who knows you and could possibly use it.  That makes you into the Internet equivalent of the Mary Kay lady, somebody who aggressively tries to promote her business to all of her soon-to-be-former friends to the exclusion of anything approaching a real, honest relationship with them.  Instead, continue going about interacting with your communities just like you do right now, and the marketing will more or less fall into your lap.

Finally, continue providing an excellent product and service to customers.  Customers are the first, last, and best marketing team you will ever have.  They are already trusted in more communities than you can even conceive of, and when they plug your product for you their words will be trusted and their consciences will be unburdened, because they are doing it to help their friends rather than to help themselves.  Its a win-win situation for everyone involved.

And, yes, I was severely disappointed with the last episode of Heroes.  Grr.  They’d better improve for next season. 

Comments Off

Summer Is Upon Us

One of the unfortunate facts of the education market is that it has pretty severe seasonality: sales drop to close to nothing when school is not in session.  I have had roughly a week without a sale now, and expect that sales will remain severely depressed until roughly August 15th (when I’m going to probably have a burst of activity — start of the new term means cash money).  Oh well, more time to improve the website, marketing, and there is that minor issue of finding myself a job by July 25th… 

Comments Off

More Web Site Tweakage (Link Colors, Download Buttons)

I just changed my links to the default colors.  I have been told that having them other colors (they were previously colored to match my website’s color scheme — an inviting orange for unvisited links and a burnt orange for visited ones) has a tendency to confuse people who are used to the convention that anything blue and underlined can be clicked*.  We’ll see if this doesn’t make people more likely to click on the links I want them to click on.  My bounce rate is slightly higher than I’d like it to be on the front page.

On the other hand, the new buttons on the download page are performing admirably, even without having the prohibited logos in them.  You can click on the image to see a larger version of the appropriate portion of my CrazyEgg heatmap.  That Download Windows Free Trial button is, incidentally, the most incandescent place anywhere on my website. 

Redesigned Download Buttons Were Strikingly Successful

* Admit it, you tried to click it, didn’t you?

Comments Off

May 2007 Mid-Month Stats

Capsule summary: Sales have been nicely juiced by my crusade against usability bugs these last two weeks.  In particular, higher CD sales will likely lead to higher absolute sales numbers and slightly lower profits since I subsidize every one by about fifty cents relative to downloads.

 Through the 15th:

Sales: 10 downloads, 5 CDs (1 download refunded when they decided they wanted a CD instead)

Gross Sales: 399.25 USD

Expenses:

GoDaddy: $7

e-junkie: $5

CrazyEgg: $9

AdWords: ~$50 through end of month

AdCenter: ~$10 through end of month

CDs: ~$27 so far

Paypal: ~$7.15

Expenses: ~$88

Profit: ~$312

Visitor stats and all that jazz: they’re borked due to my website redesign, since I changed exactly how conversions are being counted. 

AdWords: twenty-two cents a trial download these days.  Twenty.  Two.  Cents.   (My ideal price target was 30 cents.)  I’m trying to tweak the campaign to increase number of clicks now because at $.22 it costs me about $7.30 to buy a $24.95 sale.  As you might expect, I’m happy to do that all day long.

Comments Off