A little progress

April 8th, 2012 Comments off

(Part of the One Month to the 1% series of posts)

Services like consulting are great ways to get cash, but their huge drawback is that they produce income only while you’re on the clock.  I’d love to have a product that sells itself even while I’m asleep or out of town, like I was today for Easter.

Fortunately, I have at least three such initiatives in progress for my $30k goal:

One of them, the ebook, managed to move the needle off of zero yesterday!  Specifically, it now stands at — brace yourself —  $0.70.  Amazing, right?

The ebook was produced only as an experiment to see what it would take to produce an ebook.  It’s simply a reformatting of content from one of my blogs, and it’s not the still-being-written version of my hockey trip.  As such, I haven’t promoted the ebook at all, lest it become confused with a proper book-writing effort.

A variant of this photo has been my most popular stock image to date

My inclusion of the ebook exposes one of my interpretations about the one-month challenge: I can use product that I’ve already put in place or put forth effort developing.  I need not start precisely from scratch.  Don’t worry about that making the challenge too easy, since the total revenue from all three of the aforementioned income sources has been less than $100 — not per month, but in total.

Clearly, there is room for progress.

Status: $0.70 (0.0023% to the goal)

One month to the one percent

April 7th, 2012 Comments off

It’s normally poor form in Western culture to talk about one’s income with acquaintances, but I did it anyway.

Earlier this year I was visiting with a good friend, a fellow Stanford engineering alumnus.  Our meandering conversation eventually passed through his side business.  Somehow, the topic of his revenue arose, and he pulled up the figures.

It wasn’t really a surprise.  I’d known for a while roughly how much money he was making. Still, having the glowing numbers placed before my eyes was like a getting bucket of ice water dumped on my head. The reality became undeniable: my friend was in the much-maligned 1%, the top tier of earners in America.

From last fall's Occupy Boston protest. I wonder how many of these people actually were in the 1% but pretended to be in the 99%?

I’m not proud to admit that I felt a bit jealous.  The fact that much of it was coming from a lifestyle business, not just his regular salary, made it even more painful.

Sure, my friend was a smart guy.  He had identified a niche problem, built a good solution, and was reaping the rewards.  He deserved his success.  Still…  why not me?! Arg.

That’s when I got the idea.

What if I used his success as inspiration for a new project?  Stunts seem to have been my thing lately, and time was on my hands: my most recent contracting client mothballed my planned project due to budget constraints.  I thought about it for a while, and then I hit on an intriguing challenge:

I will go from zero to $30,000 in non-salary, non-consulting income — and do it in a month.

In exactly 30 days, on May 7, I will turn 30 years old.  How numerically alliterative it would be to earn $30k from entrepreneurial activities in that time: 30 in 30 by 30.

I get giddy just thinking about it.  It melds well with a goal I set almost three years ago, in which I wrote that I’d like to be either wealthy or poor when I turned 30, not somewhere in the “mushy middle”:

“When I turn 30 in three years, I want to be either rich or penniless.  The outcome doesn’t matter so much to me as long as it’s not the mushy middle; that would be indicative of a failure.” — Me in 2009

That was in the context of a post about the launch of my since-failed startup, but the sentiment remains. I’m not exactly broke, though spending most of last year gallivanting around America and Canada has left my bank account in sore need of replenishment.

But what would it take to be rich?  The median annual income for Americans is — you guessed it — $30,000.  If you change that from an annual income to a monthly income, the result you get is $360,000 per year.  And that, conveniently, is the threshold for rarefied air. At that level, you join the 1%.  Thus, the name for the project:

“One month to the 1%”

Impossible to achieve?  I disagree. One way to look at it is that it’s only a factor of two from where I was while consulting. I feel that I’ve provided positive value to my clients in the past; presumably, they were making money off of what I developed for them, and probably much more than a factor of two. Why can’t I capture that value for myself?

Hell, I might even be shooting low.

Of course, it’s relatively easy to make a bunch of money as a consultant, but that would feel like cheating, and that’s why I’m not allowing myself to meet the challenge through consulting.

(If that surprises you, here’s the reality: it’s relatively easy to bill in the $100/hr neighborhood as a consultant, but it’s much more difficult to go to $200/hr, which is what would be needed to meet the challenge.  I have reason to believe that many regular employees have no idea what the billing rates are like for engineering consultants.  Consider your eyes opened.)

I have yet to figure out how I’m going to pull this off, but it seems likely that it will hinge on my ability to sell and promote as much as anything else.  That will certainly push the bounds of my comfort zone, I’m more comfortable writing code than selling products.  And what would I sell, anyway?

Uff-dah. The good news is that I have some ideas brewing.

Here are the rules in full:

  • Accrual accounting
  • Can’t be illegal
  • Money made from consulting doesn’t count
  • Neither does money made from being an employee
  • Anything else is fair game
  • Deadline: May 7, 2012
  • Daily progress updates Change of plans: progress updates when there is progress to report

And so, we start Day 1 at $0.

Transparent static text in wxPython

March 15th, 2012 5 comments

For my non-geek friends, feel free to bail now.  This is a nerd post.

I’ve been spending a lot of time lately on a project that uses wxPython for its GUI.  Yesterday, I spent about five hours trying to figure out how to have a static text widget that would have a transparent background.  My application had a gradient background, and I wanted that to show through under the text.

After a bunch of Googling, I found lots of requests for such a widget, but I didn’t find any good explanations on how to do it.  Fortunately, I did figure it out, and as is often the case, the solution was straightforward in hindsight. In the hope that I’ll save somebody a headache, here’s some code for a transparent static text widget:

"""
Static text with transparent background
"""

import wx

class TransparentText(wx.StaticText):
  def __init__(self, parent, id=wx.ID_ANY, label='', 
               pos=wx.DefaultPosition, size=wx.DefaultSize, 
               style=wx.TRANSPARENT_WINDOW, name='transparenttext'):
    wx.StaticText.__init__(self, parent, id, label, pos, size, style, name)

    self.Bind(wx.EVT_PAINT, self.on_paint)
    self.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None)
    self.Bind(wx.EVT_SIZE, self.on_size)

  def on_paint(self, event):
    bdc = wx.PaintDC(self)
    dc = wx.GCDC(bdc)

    font_face = self.GetFont()
    font_color = self.GetForegroundColour()

    dc.SetFont(font_face)
    dc.SetTextForeground(font_color)
    dc.DrawText(self.GetLabel(), 0, 0)

  def on_size(self, event):
    self.Refresh()
    event.Skip()

A couple of key things: First the style of the widget is wx.TRANSPARENT_WINDOW (all controls are windows).  Second, GCDC is used in on_paint(), because the normal DC doesn’t support transparency very well.

Unfortunately, many of the other widgets in wxPython have a similar lack of transparency support, so I ended up punting and redesigning without a gradient background. However, if I want to go back in the future and create more custom transparent widgets, this approach seems viable.

How I got my mom on the internet

January 16th, 2012 Comments off

I knew it would take drastic action.  Nearly two decades of attempts had fallen flat.  It was the 21st century, and my mom was still not on the internet.

I first got online in 1994.  Seventeen years later, my mom still had a paralyzing fear of even turning a computer on, let alone surfing the web.

More time went by with no progress.  Excuses begat more excuses.  I needed something so compelling that she would have no choice but to capitulate.

Finally, I hit on a solution: I would play to the fears of a parent being disconnected from a child’s life.  It was the spring of 2011, and I was about to leave Minnesota on a 6-month trip to every state and province.  I told my mom that I would not tell her anything about the trip on the phone. She would need to read about it on my blog.

It’s possible that she thought I was bluffing (I wasn’t), but regardless, she quickly got on board with the idea of acquiring internet access.

My sister gave her an older laptop, I did the initial system setup, and my mom subscribed to Clear.  In no time at all, she was leaving mom-esque comments on my trip blog.

Success!

My startup’s main product is dead, and that’s OK

September 12th, 2011 4 comments

(This is the third in a three-part series. It was originally going to be named “Startups are not simple, part 3 of 3”. You may want to start at the beginning)

Blurity, my startup‘s main product, is dead.  It will go offline when the server it’s on gets pulled in early October.  Poor Blurity. I had such grand visions at the start.

Goodbye little startup

The demise was a long time in coming.  The viability of the product (or lack thereof) had been apparent since the spring of 2011, but it took a summer of denial to reach this conclusion.  I kept telling myself that “if only the product were better, it would take off.”  In other words, I lied to myself.

In case you’re unfamiliar with the product, Blurity removed the blur from blurry photos. The user would upload a blurry photo to the web site, Blurity would process it, and it would return the sharp photo to the user.  If the user liked the results, a small fee would remove a watermark from the image.

So what went wrong?  Let’s look at the three main problems.

#1 Poor match between market needs and product capabilities

Over the course of a year and a half, I built three totally separate blur removal engines.  While the first version was worse than useless (and super slow), the third version was pretty good at removing motion blur.  If only the market cared about motion blur.

Before Blurity (click for full image)

After Blurity (click for full image)

Over that period of time, I talked with friends and strangers, professional and amateur photographers alike, about the idea of blur removal.  The frustrating consensus was that the blur removal was a neat trick, but it wasn’t something that they would use.  Most said that they either didn’t have problems with motion blur or that they captured enough frames to mitigate the risk of having some be motion blurred.

I also did some limited Adwords advertising, which drove a few thousand people to the site.  About 45% of people who arrived at the site from the ads gave Blurity a try: they uploaded a photo and kicked off the deblurring.  (I was surprised by the high visit-to-trial conversion rate.) More importantly, that gave me a great sample of what users considered to be blurry photos.

Unfortunately, my idea of a blurred photo did not correspond well to the users’ ideas of blurred photos.  Here’s a breakdown of the user-submitted photos by the most significant fault in each image:

  • 40% Focus blur
  • 30% Trying to enlarge a small image
  • 10% Motion blur
  • 10% Horribly over-/under-exposed
  • 10% Other (including pixelation of faces, JPEG compression artifacts, and large sharp well-exposed images)

Since Blurity worked best on motion blur, that left a lot of disappointed users.  Some people made purchases, but often times those “successful” results were no better than the user might have gotten from “unsharp mask” in Photoshop.

# 2 Unsustainable cost structure

The funnel looked like this:

  • 45% of visitors to the site tried uploading a photo
  • 2% of visitors who uploaded a photo made a purchase
  • 5% of visitors who made a purchase asked for a refund

You might be thinking, “Those numbers aren’t really that bad.  A 0.9% conversion from visit to purchase is decent.”  True, but with a purchase price per image of $1.99, which became $1.8405 after payment fees, I wasn’t exactly rolling in cash.  I wasn’t even covering the hosting fees, let alone any advertising costs.

I could have made it if I had traffic, but I didn’t have traffic.  I needed thousands of visitors every month, ideally tens of thousands, but I had only hundreds. Blurity was not getting traction.

#3 I lost interest

As the months wore on, I began to get discouraged.  Then I ran low on money and turned to consulting to earn more.

I’m tempted to blame my loss of interest on the distraction of a full-time consulting gig, but that isn’t true.  I managed to put together a total redesign of the site and build an entirely new deblurring engine during the evenings and weekends in late 2010 and early 2011.  What’s more, after my consulting gig ended but before my road trip to every state and every province began, I had all the time in the world — but I felt almost no motivation to work on Blurity.

No, I simply lost interest.  I no longer believed that Blurity would change the world, and I no longer saw a way that Blurity would lead to financial independence.

As I mentioned earlier, I was battling a bit of denial, too.  I didn’t want to admit to failure.

But you know what?  I feel fine.  I learned a lot about image processing, multithreaded programming, Ruby, and Rails along the way.  I came to understand that the rules about product-market fit do apply to me.  I met many other interesting entrepreneurs, investors, and journalists.

I took a shot, I missed, and life will go on.

So what comes next?

Put simply, I’m not sure what will come next.  I learned a lot about image processing while building Blurity, so with the coming rise of computational photography, including lightfield cameras, I might make another play in that area.  Or I might punt and go back to doing consulting.  We’ll see.

The important thing is that I will no longer be weighed down by the sinking ship that was Blurity.