Nailed A Job Interview

Nothing to do with uISVs, but I just nailed an interview in my continuing search to find a new day job.  It certainly helps when your current boss is best buddies with the prospective new boss and the person with direct hiring authority is an ex-coworker*.  I’d like to think that my resume and good attitude during the interview helped the matter, too.

* This isn’t that uncommon in Japan.  It isn’t that uncommon in America, either, although most people downplay its importance.  The freakishly high chances that two people in a related field will again do business with each other are as good a reason as anything to be faultlessly polite and fair in all of your business dealings.

Comments Off

Taxes Don't Have To Be Pain

This post isn’t aimed at anyone who already pays taxes on their uISV.  If you do, you already know that its not terribly difficult in the base case.  Its more aimed at allaying the fears of folks who are thinking of starting a uISV, but worried that the IRS will steal their lunch money after making them fill out 10,000 pages of forms.   

I haven’t actually filed these yet (overseas Americans get an automatic extension) but as they’ve resulted in tax liability I paid them (through the new and soon-to-be-indispensable EFTPS service).  My return was four forms this year:

  • Schedule C-EZ (Profits & Loss from a Small Business)
  • Schedule SE (Self-Employment Tax)
  • Form 1040 (Individual Tax Return)
  • Form 2555 (Overseas Earned Income Exemption)

I won’t show you my 1040 (private, sorry) or my 2555 (you’d find it boring), but I’m happy to show you how easy it is to dispose of all accounting and tax issues for a (very) small business. 

Many folks think you have to be superman to navigate the IRS’ maze, when they are actually decently taxpayer-focused and charged by regulations to make things easy for someone with a six grade reading level.

My tax process for Bingo Card Creator was quick and easy: First, run the e-junkie and eSellerate reports for sales in 2006.  Sum totals, copy into important boxes.  Then, look at all outgoing payments on Paypal and my credit card, figure out which ones to strike because they were not business expenses, sum totals, copy into important boxes. 

Then you have to do a wee bit of math — a subtraction on Schedule C-EZ.  Oh no!  You then go over to Schedule SE, copy in the information from Schedule C-EZ, do some multiplication as instructed by the form, and you get a self-employment tax number.  Copy to the place it tells you to on your 1040.  You’ll also get a credit against your income taxes for paying self-employment tax — copy to the place it tells you to on your 1040.  There, your uISV taxes are done, now you just finish your 1040 and associated forms and file them off to the IRS.

On my Schedule C-EZ:

 Line 1 (Gross Receipts): $2480.05

 Line 2 (Total Expenses): $1224.68

 Line 3 (Net Profit, copy to 1040 and Schedule SE): $1255.37

On my Schedule SE (Short Form, almost all uISVs should qualify):

 Line 1 (Farm Profits): $0

Line 2 (Copy Profits from Schedule C or Schedule C-EZ): $1255.37

Line 3 (Add Line 1 and Line 2): $1255.37

Line 4 (Multiply Line 3 by 92.35%): $1159.33

Line 5 (Self-Employment Tax: Simple math by instructions.  Most people just have to multiply Line 4 by 15.3%): $177.38

Line 6 (Self-Employment Tax Credit: Multiply Line 5 by .5, copy to 1040): $88.68

And there you have it.  On the outside, counting the two blog posts, data collection, downloading forms, and reading up on the Foreign Earned Income Exclusion that I have to do every year, my 2006 taxes took me three hours to prepare.  Reports of the impossibility of taxes have been greatly exaggerated.

Now, granted, if I had alternative minimum tax (AMT), a home office, or some other brain-intensive situation this would have been ugly.  However, I don’t.  When I do, I’ll pay an accountant to have the headache on my behalf.

Sidenote for folks who start a uISV: if you’re profitable, your SECOND year of business will probably get you to the point where you have to pay estimated tax.  Its also easy (requires you to be able to subtract and divide by four), but I’ll cover it another day.

Comments Off

Lightbox — Quick, Pretty Screenshot Previews

Every uISV has a screenshot page and, if you’re sane, a shot of your program above the fold on your front page.  These are generally teeny-tiny thumbnails which exist more to demonstrate the fact that there is a real purchasable product than anything else.  Of course, customers actually want to be able to read the text on your GUI, so you link that thumbnail to an image file… and bad stuff happens.

For the non-technical B2C market, “bad stuff” generally means “Prospective customer cannot find their way out of the image”.  Yes, I know, I know, they have a back button.  They may not KNOW they have a back button, though.  My screenshots, for the longest time, had 80%+ bounce rates until I figured this out.  So I’ve been using the _blank thing to pop the screenshot up in a new window, which is a decent compromise but it distracts unduly from the sales pitch.  They have to close that window to get back to reading, and I’d rather they have a visual reminder of what exactly they were doing so they don’t get distracted, switch to their email, and go away.

Luckily, there is this nice little Javascript widget called Lightbox (introduced to me by the indispensable Nick Hebb, king of flowchart software).  Add two lines of code to your web page, tag screen shots with rel=”lightbox”, and you get a shiny Javascript preview effect which is quite similar to e-junkie’s Fat Free Cart.  It grays out the rest of the page but keeps it visible, and directs your attention directly on the screenshot — a single click anywhere dismisses it, taking you back to the page.  (There is a Lightbox2 which has more sophisticated behavior which is, for my customers, a usability nightmare.  I passed.)  You can take a quick gander at the home page for Bingo Card Creator — try playing with the main screen shot to see Lightbox and the purchasing page to use the Fat Free Cart.

Comments Off

I'm Glad *I* Don't Compete With Google…

… but the CrazyEgg guys do, and I wish them the best of luck.  They have a very, very Web 2.0-y analytics and split testing program.  Well, its not a full-featured analytics program — it basically tells you whats being clicked on, and thats it, with an extraordinarily cool (er, is that hot?) heatmap visualization of it.  It is amazingly easy to get started on their free trial, so amazing that they could teach Google a thing or three about it.  Put in email address, put in password, fill out two line form about page to test, copy one line of provided HTML into page, upload.  30 seconds or less to the shiny.  If I get nothing else out of my free trial, I’ll have gotten a good usability example for Kalzumeus.

Here’s my concern: while they are much easier to use than Analytics (they will, for example, track clicks on my links offsite or to setup files without any special work on my part), I have already climbed Mt. Analytics Learning Curve and can now bask in the awesome view — such as dicing visitors down by where they came from, watching search terms trends, and tracking click paths around my site.  For free.  Their free trial (5,000 visits tracked a month) will work for a few more weeks for me, but then I’ll go over the traffic limit and it comes down to the “Do I really want to pay more than my web hosting budget for an analytics program?” question.  Which would be “Oh, heck yes!”… if I didn’t already have Analytics. 

Then they have this split-testing option, where you can have them run, say, the stats on 2,000 consecutive visitors.  Then you twiddle the page a bit and rerun the test, getting 2,000 new consecutive visitors, and compare.  That is both great and, again, inferior to the free Google Website Optimizer*.  Now, if they could just bring their considerable usability chops to solving the biggest problem with Website Optimizer, which is that it is a freaking pain in the keister to use, I’d give them $9 a month and a gold star.  I have been meaning to start using Website Optimizer for months but every time I do I get to the start of the process, figure its going to take me two hours to get anywhere, and then get distracted by other demands on my time.

 * Note that the key problem here is that Website Optimizer does actual splitting — for example, if I get 4,000 visitors they get parceled out to the two alternative pages randomly instead of first 2,000 to one and next 2,000 to the other.  That is fairly key for me, since my business has very definite cycles in it, and I’m doing all sorts of things in the background.  If, for example, 2,000 visits happen Monday through Friday, and then the next 2,000 visits happen Saturday through Wednesday, then I naturally expect the “Download a Free Trial” link to get less activity anyhow in the second half because my best customers (teachers) aren’t typically on the Internet on Saturday or Sunday.  That throws off the results of the test.

Comments Off

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”. 

Comments Off

Getting Somewhere On Kalzumeus

I finally got some time today to sit down and have a coding session.  The program can’t be more than, oh, 5% of the way ready yet, but I’m feeling that I’m starting to get my head around most of the core Rails concepts.  Much more code is actually sticking to the screen and its been a matter of hours since I did a rm -rf * on the project directory.

In terms of complexity, my preliminary estimate is that Kalzumeus will require about 15 classes.  This is actually roughly how many there are in Bingo Card Creator.  I have noticed so far that I’m spending much, much less time on nuts&bolts programming than I typically do in Java, and much, much more time on chasing down misnamed variables, typos, and the like.  Partially thats because Eclipse does autocompletion for me in Java so I remember that I called that string nickname instead of nick.  Luckily, the development cycle on Rails is fast enough that I only lose about 15 seconds when that happens — annoying as heck to see the “Ugh, you fail!” error screen, though.

By the way, after spending many hours fighting with a series of IDEs, I eventually went with Netbeans.  My first real work in Java was done in Netbeans, before I switched over to Eclipse a few years ago.  It is a much, much more capable IDE for Rails, so I’m happy to be back.  I’ve supplemented it with a few Direct Access macros to save myself some of Rail’s verbosity, and I hope to publish those later (e.g. typing in ctcs gets t.column “”, :string with the cursor positioned right between the quotation marks, ready for you to input a column name).  I do generally like the idea of prioritizing maintenance programmer brainsweat (which Java and Ruby optimize for — java.util.JokeFactory.createNewJoke(camelCasedVerboseIdentifierNamesHelpComprehension) ) over creation programmer finger time (which Perl optimizes for:  $_.=$&). 

Kalzumeus is similar to Bingo Card Creator in terms of code complexity, i.e. “not very”.  There will probably be exactly one class which will require anything close to cleverness while coding.  I don’t even think I’ll have to worry about thread safety issues, which is both a relief and a letdown at the same time.  I actually have a perverse affection for concurrency issues.  They’re one of the only places where I’m a halfway decent programmer.

I also have found a way to save myself a few hundred dollars for launch: cut out the UI designer!  oswd.org came through again with a beautiful, configurable design called Multiflex3 which has an associated WordPress theme.  I anticipate that after I actually have the application written I can make it look quite presentable in Multiflex in about a day or two, and then add a visually coherent Wordpress blog with another day.  If Kalzumeus takes off then I can always hire myself a designer later to make it look prettier and more unique.

I had a flight of fancy the other day: I will have sufficient savings in August, when my current contract ends, to pay for 6 months of living expenses while subsidized by Bingo Card Creator’s current monthly sales.  If I return to the US at that point, I will get a distribution from the Japanese pension fund, which would extend that to about a year’s worth of expenses.  That would allow me to work full time on the uISV… the downside is that if I failed I would be poor, unemployed, and on the wrong side of the ocean for finding convenient work opportunities.  It was a quite attractive flight of fancy for a few minutes, and it will make a good Plan C or so.  I’m still looking for a more conventional job, though.  For the moment.

Comments Off

March Stats and a note of thanks

Same disclaimers as always.

Capsule summary: Best month ever.  Would have done better had I not disabled CD orders inadvertently for most of it.  I’m giving myself about a 50-50 chance of hitting my $1,000 target for April.

Sales: 30, including 2 CDs (instead of 15 — d’oh), 1 purchase in Euros, 1 in pounds, and 0 refunds.

Gross sales:  ~$760

Expenses:

Paypal: $10.50

SwiftCD: $10.76 

e-junkie: $5

AdWords: $54.02  

GoDaddy: $7

Total: ~$87

Net Profit: $673

Commentary:

AdWords has been working really well as of late ($.34 per demo download sustained over the entire month.  Close to my best ever.)  With $90 budgeted I could pay for more traffic but I haven’t found the keywords yet to bring it in without costing an arm and a leg — there is not too much play in $24.95 to go crazy with keywords costing, e.g., 15 to 25 cents apiece. 

SEO continues beatifully, and I’m slowly but surely climbing the ladder on some key terms.  A big thanks to everyone who linked by Free Bingo Cards post, without me even asking.  Its great when the community helps each other out like that.  I have been using the features in the Google webmaster console and have been noticing more links this month from school districts, including several direct to AdWords landing pages.  Thats just beautiful — they put my software in front of hundreds of prospective customers AND they give me an authority link.  Content, its the gift that keeps on giving.

Speaking of gifts which keep on giving, this blog will hit its hundred thousandth page view before I get up tomorrow.  I nearly went googley-eyed when I saw the counter.  The majority of my readers continue to be uISVs or folks thinking about taking the plunge, but I’m getting increasing mentions from folks as diverse as librarians and customer advocates, and the blog is fighting hard with MSN and Yahoo to be my third largest source of downloads (after Google and download sites).  I’d like to take a moment to say “thank you” to everybody who reads, RSSes, links to, comments on, etc, this blog.  I’m overjoyed and humbled by your support, and couldn’t do it without you. 

Happy Palm Sunday.   A funny story from Mass this morning: first, to hit the highlights of Palm Sunday for those who aren’t Catholic, Jesus comes back after fourty days in the wilderness (Lent) to Jerusalem, where he is welcomed as a king.  He rides in on a donkey, and people throw their clothes and palm fronds in the front of his donkey to honor him.  As we are heading out of church, one of the little kids says to his Mom “Its not fair, you know”.  “Oh whats that, honey?”  “Palm Sunday.”  “Why do you say that?”  “All the palms did was get stepped on.  It should really be Jesus Sunday.  Except every Sunday is Jesus Sunday.  So we should make it Donkey Sunday.  Poor donkey, he does all the work.”    I love kids.

Comments Off

Hideho, Readers of "Neat New Things"

I’m glad you found the article on customer service interesting.  Feel free to leave comments on it, or here.

Note to usual blog readers: Neat New Things is a newsletter sent around by a librarian named Marylaine Block who runs a little side business on the Internet.  I’m going to take a wild stab in the dark and say you probably haven’t heard of it.  My site was listed for the customer service article from a while back, with the comment “Both the initial article and the comments provide valuable ideas and perspective.”, in the middle of about a dozen links about various topics.  Now, personally, if I wrote a post with about twelve links in a row like this one I would guess perhaps 1% of the readership would visit a link in the middle.  Given that literally one thousand readers (!) have come to take a gander at that post over the last 24 hours, most attributable to that email newsletter, I would estimate that librarian’s reach at probably in the high five to low six digits worth of extraordinarily dedicated readers.

Ponder that for a moment.

I’m going to take a wild shot in the dark and say that my post probably caught Ms. Block’s attention after it was mentioned on Librarian in Black, a high traffic librarian weblog.
Librarians, like school teachers, are quite smart folks who are not typically described as being on the leading edge of the technology curve.  However, apparently there are an awful lot of them out there, and they have their own little pocket of cyberspace which is actually not little at all.  They are an addressable audience on the Internet (or somebody wouldn’t have a mailing list of five or six digits worth of them, least of all one which is read actively), they read blogs at least part of the time, and they almost certainly have problems which can be solved by software.

Two takeways from this:

  • Do you have a blog that 1,000 potential customers of your software could be reading tomorrow?  If not, what exactly is keeping you from writing one?
  • Would you have written librarians off as a potential niche for a uISV, because they probably don’t buy software anyhow?   Often uISVs have a mindset which is overly informed by being quite techy people, and they forget that the rest of the world uses computers, too.
Comments Off

Dipping My Toe Into Squidoo

Having nothing to do tonight after a drinking party for work, I was inspired by a post on MyMicroISV about Squidoo.  I have recently been trying to accomplish some light organic linkbuilding for SEO purposes.  That reminds me: a big, somewhat belated thank you to those in the uISV community who tossed me links to my post on St. Patrick’s Day — St. Google is already smiling on me for some keywords.   Squidoo might prove useful in that regard, and was as good a way to spend 2 hours as anything.

In a nutshell, Squidoo is a content engine which is similar to Wikis and blogs.  Anyone can contribute their knowledge on any topic, like a wiki.  Knowledge is organized about discrete topics, like a wiki.  However, like a blog, Squidoo lenses have authors, and the lenses are not by default writeable by the entire world.  They do allow for some forms of audience participation, through some interesting widgets which you can include to make your lens something other than flat unformatted text.

Anyhow, given that Squidoo lenses seem to percolate to the first page of the Google SERP for less competitive keywords and that its quickly becoming an authority site, I thought I might as well take it for a spin.  Plus, whats the worst that could happen?  I spend an hour producing materials that help teachers and don’t get paid for it.  That strikes me as an hour well-spent. 

Squidoo is a wonderful technology for Seth Godin and, well, somewhat less wonderful for its users.  In many ways, its a technical marvel — allowing users pre-constructed, logic-intensive building blocks like lists of links which are votable up and down lets them create valuable content which is richer than your typical blog post or Wiki article.  However, its also a poster-child for Why AJAX Will Not Replace Your Desktop In 2007.  Tasks which are simple and which should be on the critical path for this tool, like writing text in paragraphs and then editing the text, are full of frustration.  The responsiveness is sluggish compared to any halfway decent blog software and far outclassed by Notepad, to say nothing of useful text editors.  I felt like I was spending as much time struggling against the platform (2500 character limit for paragraphs?  Bad programmer, no twinkie!  No, it is not an acceptable workaround to tell me how many characters I have left!) as I was creating content.  That perception was probably inaccurate but it doesn’t bode well for the tools’ adoption with less motivated users.

Anyhow, rather than bury you in a description of what widgets are available, I’ll link you to a lens or two.  My lens on teaching dolch sight words is fairly basic: text, lists, and a widget which lets you vote on links related to the topic.  I have handily preseeded it with two links controlled by myself, which is the payload of the entire lens for me.  (I suppose if my lens gets very popular theoretically I could make about a dollar or so in Squidoo’s quirky revenue sharing arrangement.  Yay.)  The lens is not quite complete yet, and its very text heavy and content focused.

On the other hand, Gavin’s lens on tools for your microISV is basically just a collection of links.  Some of the more popular lenses mix links, text, and whatnot in a pretty multimedia fashion.  Unfortunately, and I really hope Seth Godin is not suprised by this although something inside said he might be, most of the lenses on top of the popularity metrics are Repair Your Credit And Make Lots of $$$ Online With No Money Down with a very high shady factor.  I’ll spare you the links, but feel free to take a gander at them: many of them are fairly effective marketing and I’d be decently happy if they weren’t in the service of separating poorly informed people from their money.

Comments Off

"Thats Funny, No One Has Bought a CD In Weeks"

I’ve had my best month of sales ever, but only 1 CD in that time.  Typically about half of my customers get the CD.  I had a vague feeling that there were fewer CD orders than usual this month but it didn’t raise any flags with me.  Then I got a fairly typical email saying “How do I purchase your software?”  Thanks for your interest, click the big red button which says Purchase Now.  “That doesn’t say it comes with a CD.”  Thanks for your continued interest, you need to click the one next to the text Purchase a CD.  “That doesn’t work.”  Thanks for your continued interest, you need to… oh, wait.  It actually doesn’t work. 

It seems that when I switched the item numbers in e-junkie (to accomodate SwiftCD integration) I forgot to also switch the item numbers in the e-junkie links on my page.  For some reason this actually didn’t cause a problem for at least the first two weeks.  It had to be working for one of my customers to get an order for a CD through on March 3rd.  At some point after that the e-junkie system began saying “Oh, wait, the item number that link references doesn’t exist anymore” and bailing when you tried to use it to add things to the cart.  I assume that most of my customers who saw this error either shrugged and said “OK, I’ll take the download!” and some, more worrisomely, probably left.

This is one of those bugs that just makes me want to die inside as a programmer.  The systems involved have well-understood interfaces but the inner workings are complex and totally opaque to me.  As a result, bugs are hard to predict except by seeing them, and if their visibility is obscured by whatever system interaction happens its likely that I’ll be the last to know.  I guess the only solution to that is regular monitoring and applying enough concentration to know when the process is out of control. 

As long as I’m on the subject of CDs: if you’ll excuse my own HTML coding errors, the integration of SwiftCD and e-junkie has been flawless in every respect.  Its also cut the amount of customer support I had to do literally in half — back when half of my orders were CDs I spent as much time retyping addresses and invoice numbers into cd-fulfillment.com as I did answering customer emails.  Now delivering a CD takes as much marginal work as delivering a registration key: nothing.  Granted, at my level of sales thats probably 5 minutes saved 3-4 times a week, but for some reason minor repetitive nuisances like that grate on me far more than their absolute time required would suggest.

Comments Off