August 01, 2008

Octopart

I think that great startups make you go, "wow.  that's much better than the old way."  Having spent a decent chunk of my undergraduate education (electrical engineering at the UW) looking up datasheets for electronics components, I have to say that this is 100 times better than Googling.

http://octopart.com

I don't think most people will get it.  After all you need to know you're looking for an LM348N chip.  But you're immersed in that world, then its a perfect startup.  They should be wildly successful if they can figure out how to market their product.

July 26, 2008

Encoding an Amazon ACL in Perl

S3 is Great
Amazon S3 is a pretty cool way to store data online, for just 15 cents a GB/month.  The bandwidth's pretty expensive at 10c per GB up, and 17c per GB down but still viable depending on what you're planning on doing with it.

They also have a really slick API to get files to and from the server.  One in particular allows clients to directly upload files to your storage space from their machines via HTTP post (so via the browser, Flash, etc.)  This is great since your server doesn't have to proxy them to S3.  But wait!  If you have to authenticate into the service with a secret key on the client side, then you're basically giving away your key.  No good.

But this is not the case, and their solution is really well implemented.  To do this, you essentially sign an policy that specifies what can be uploaded -- maximum file size, key name, etc.  The policy is in a standard format, you base64 encode the policy and send it with a HMAC-SHA-1 hash encrypted with your secret key and encoded using base64.

Perl is Great
Athleon's written in Perl, which I've been extremely happy with on this project.  The code below is to encode a policy, generate the SHA-1 hash, and base64 encode it.  It uses the MIME::Base64 and Digest::HMAC_SHA1 modules, and looks like this.

my $key = 'my_secret_key_from_amazon';

utf8::encode($acl);
my $base64 = encode_base64($acl); $base64 =~ s/\n//igs; #Perl adds newlines
my $hmac = Digest::HMAC_SHA1->new($key); $hmac->add($base64); #encrypt
my $signature = $hmac->b64digest() ; #generate signature

S3 + Perl is Almost Great
Quick and easy, right?  Alas, though.  This code doesn't work.  What gives?  I didn't see any documentation anywhere that says this, but looking inside some modules on CPAN, everyone's adding a '=' to the end of the signature.

So I . '='  on the end of the signature, and everything works great.  Maybe it has something to do with a spec I don't know about.  Or maybe its something obvious that I missed.  If anyone knows why, I'd appreciate a comment.

Still though, Amazon did a good job with AWS, and its been an absolute pleasure working with the S3 API so far.

Just a random technical post...

 

July 03, 2008

Decisions in Real Time

Back from Silicon Valley fundraising.  Blogging should resume regularly.  For my first post back, here's a second quote on Harrah's from Winner Take All, the casino run by math-types.

When Loveman realized that losers are miserable, he figured he could keep them gambling longer if he could reduce their perception of losing. [...]  Harrah's began tracking gamblers' losing streaks in real time while they were still sitting at the slot machine.  As soon as a gamlber stuck their Total Rewards frequent gambler card in the machine, the computer started comparing their actual losses and winnings against the predicted odds.  Big losers were flagged in the system.  A "luck ambassador" was then dispatched to perk them up with friendliness and a token gift.

Arguably, web apps have any real-time usage interaction data that they want.  Are there any that use this info in real-time to make users happy?

June 21, 2008

What does your audience want?

The title of this post bears repeating.  What does your audience really want?  If you're going to be best in the world, then you ought to be able to figure this out.

It's not what they tell you they want.  And if its a feature of your product, you're most likely wrong.  You're supposed to sell the benefits, not the features, but I don't think the benefits are what you think they are.

As I mentioned in my last post, I think Steve Jobs is one of the most in-touch founders out there.  Here's one of my all-time favorite quotes by him, in an interview with Newsweek (via SVN).

Q: Microsoft has announced its new iPod competitor, Zune. It says that this device is all about building communities. Are you worried?

A: In a word, no. I’ve seen the demonstrations on the Internet about how you can find another person using a Zune and give them a song they can play three times. It takes forever. By the time you’ve gone through all that, the girl’s got up and left! You’re much better off to take one of your earbuds out and put it in her ear. Then you’re connected with about two feet of headphone cable.

Wait, what?  Girl?  Hint: The chief benefit of an iPod, for the 16-25 crowd is not about how to play music.  Which is probably why they cut the FM receiver (a very cool feature, IMO) from the original design.  It's a smaller, sleeker, sexier life.

 

June 17, 2008

Who is your web application for?

I love Steve Jobs.  I think he's brilliant: in one sense, he can envision things in the "correct way" to satisfy customers, even though they don't know what they want yet.  He's a sort of personal hero, and I could definitely probably be classified as a groupie.

When I saw the book Inside Steve's Brain a few months back, I purchased and read it immediately.  Here's something interesting on what customers are willing to pay for:

Take the iTunes online music store, which launched in 2001, at the height of the popularity of online file sharing.  [...] Why would anyone spend $1 a song, when they could get the same song for free?  Jobs's answer was the "customer experience."  Instead of wasting time on the file-sharing networks, trying to find songs, music fans could log on to iTunes and buy songs with a single click.  They're guaranteed quality and reliability [...]  "We're going to offer you a better experiences... and it's only gonna cost you a dollar a song."

But the target here is clearly a Bobo audience (another book I finished recently). What's a Bobo?  Bobos are the new upper class.  And bobos don't like to spend money on "conspicuously consumption" (e.g. Donald Trump), which they consider consider vulgar.  It's showing off.  However, they are willing to spend significant money to prove their refinement of the "common necessities" of life (e.g. organic African dishware) -- here, it's alright to splurge.

From the back cover of Bobos in Paradise (David Brooks):

Do you believe that spending $15,000 on a media center is vulgar, but that spending $15,000 on a slate shower stall is a sign that you are at one with the Zenlike rhythms of nature?  Do you work for one of those visonary software companies where people come to work wearing hiking boots and glacier glasses, as if a wall of ice were about to come through the parking lot?  If so, you might be a Bobo.

After all, it is not conspicuous to shower; and if you're going to buy a pair of boots there's no point in buying something mediocre.  And everyone listens to music -- but iTunes is elegant.  ThePirateBay is crass.

I'm not sure if the majority of average America thinks like this.  You might, but you're not average.

So who's your audience?  I think that if your web application's audience is primarily bobo, customer experience is probably disproportionately important to your success.  And if you're good at user experience, if you're a future Steve Jobs, then your sweet spot is affluent "bobo" buyers.

June 15, 2008

Loading Icon

According to Yahoo, 80% of the end-user response time is in the front-end rather than code generation.  For Athleon, a large part of this is loading up static images which can occasionally be quite large (~100k).  If you believe that your users' perception of speed is more important than actual speed, here's something that can help:

This loading icon generator creates a custom "loading" GIF from templates and a color picker.

Here's the one I created for Athleon:

Loading_2

June 11, 2008

Quants

Recently finished the book "Winner Takes All" by Christina Binkley.  It's mainly about Steve Wynn, and the other big players in Las Vegas, but there were a few interesting chapters on Harrah's, the casino company run by quants. 

Gary Loveman, the CEO of Harrah's is a former professor of the Harvard business school.  The book briefly describes the great lengths his team went to, in order to quantify patron interactions with its casinos.

It is an interesting case study to read about Harrah's, and apply its lesson to Athleon.  From the book, Harrrah's was able to determine that gamblers who the least time between pushing the button on slot machines were the most likely to be convinced to gamble more:

To entice [those gamblers] to make two visits that month, Harrah's sent cash and food offers that expired in consecutive two-week periods.  The gamblers responded like maze-running rats: The group's average number of trips per month rose from 1.1 to 1.4.  Harrah's new direct mail programs were so successful that, in its Las Vegas casino alone, the rate at which people responded to mail offers more than doubled.

Unbeknownst to the gamblers, Harrah's statistical model set calendars and budgets that predicted when they would gamble and how much. [...] Harrah's computers spit out "behavior modification reports" so personalized that they could suggest that one gambler would respond best to a cash offer while another would be more motivated by a free hotel room.  [...] A gambler who was overdue for a visit to the casino would receive an "invitation" by mail or e-mail.  If they didn't respond, they got a phone call from a Harrah's telemarketer.  "We get him motivated, back in an observed frequency pattern," Loveman said.

Casinos make for an interesting real-world analogue to web applications.  In contrast to casinos, data collection is particularly easy for web applications to do, but few websites utilize that data nearly as effectively as Harrah's did.  But, coupons and mail offers are essentially the casino equivalent of alert e-mails sent to existing users.  Sending the right message to a casino patron is a subset Josh Koppelman's Lifecycle Messaging.  Harrah's Total Rewards program is like a web analytics packages, but with segmentation analysis of the highest caliber.

Sending the right message to the right group of people.  More on this in a future post.

June 05, 2008

Where's Your Javascript?

It's a technical post this time.  And here's the 500ms question:  Where on the page do you keep your Javascript?

Short Version:
Non-rendering JS should go right before the </body> tag.

Longer Version:
When I learned web programming, it was considered pretty standard fare to stick imported Javascript ("<script link=") in the <head> tag of a document.  I stopped doing this recently, and moved the JS to the end of the document, right before the </body> tag.  Athleon definitely feels a lot faster now.

Why?  Because from the browser's perspective, javascript can initiate a location.href or document.write at any point.  Therefore, it actually downloads the entire external JS as soon as it encounters it, blocking the download and rendering of all other page elements (including images, backgrounds, other JS, etc.).  So if you're loading up the prototype.js library at the top of your page, nothing's rendering during the 122KB of download time.

So, while this doesn't actually make the page and its components load any faster, moving the JS to the end definitely makes the page start rendering right away, and it *feels* faster to a user.

And perception is probably more important for users, anyways.

If you're looking for an even more optimal solution, you can load external JavaScript in parallel with everything else using some of the hacks found in the powerpoint below.  For Athleon, it was enough just to move them to the bottom to get a marked improvement, though.

Here's the PowerPoint.  I sought this out, because I noticed the blocking while using YSlow.

June 01, 2008

Go Big or Go Home

Just got back from Silicon Valley.  It was a short trip this time, specifically for the DFJ venture challenge (we were a finalist team), but we also packed it full of meetings, including First Round, DFJ, and a former Infoseek founder.

I'm again amazed at the cultural difference between Seattle and Silicon Valley.  This has been poked at a bit on the Seattle Tech Startup list, but just being there for four days this time generated a few observations.

Go work for Microsoft
Obviously, there aren't a lot of startups in Seattle compared to the valley.  But what's striking about Silicon Valley is the tone of the city, more than anything else.  Starting a software company in the valley about as common and widely legitimate as "working for Microsoft" is here.  It speaks towards Paul Graham's thoughts about the message a city sends you.

A city speaks to you mostly by accident—in things you see through windows, in conversations you overhear.  It's not something you have to seek out, but something you can't turn off.

Brent and I were sitting in Red Rock Coffee in Mountain View, and everyone was talking about executive summaries, and term sheets, and viral activation loops.  It's hard for a beginning entrepreneur to find conversation that sharp in a public place in Seattle, but in Mountain View, it was just in a coffee shop.

Advertising as a legitimate model

Pitching in Seattle, we almost always have people asking questions about our monetization strategy.  Athleon makes money in a variety of ways, but the best received here is the "application model", providing software as a desktop app or software as a service.  It's hard to ignore that a lot of the internet investors and entrepreneurs here are ex-Microsoft, and that people paying to use software makes the most sense to them.

In Seattle, we got used to our monetization model being the first thing people asked about, and we preemptively led talks in that direction to make sure we were proactive about explaining it in more detail.  In the Valley, people said "yes, we get it.  premium software + ads".  Instead, they wanted to talk about everything else -- how much traction we had, how big it could get, and how much money we needed to do it.

 

The next big thing
What seemed to be the most important to the people we talked to was if Athleon could be "a billion dollar business" (we heard this many many times.)  Andrew Chen, a popular Seattle transplant into Silicon Valley, suggested that in order to get the very best employees and the investors with the most value-add, a company could not be anything less than a game-changing 1B dollar company.  DFJ gives a full-size, solid gold frisbee to all its companies that sell for more than a billion.

A 50-million dollar business is considered highly successful in Seattle. In the valley, its called a "lifestyle business".  Yikes.

Obviously not all Valley investors are looking for huge plays like this, but I think it was substantially more common than in Seattle.


Not better, just different.
What I took away from the trip was not that Seattle doesn't understand startups (though based on our difficulties raising capital, it would be very gratifying to assert that).  Instead, the key idea is this:  If you're the next big thing, then advertising makes sense.  And if you're not going to go for the advertising play, you don't have to be next big thing.

If you're an application model, you can have 50 paying users, and you'll be making money.  It's hard to make a lot of money, though, because revenue scales up linearly with the number of users you have.  But it gives you something to bootstrap on.

In the advertising model, you have to get big, fast.  Because in most cases, brand advertising rewards having a large number of uniques in a vertical market, each new user you add increases the overall CPM of your site.  And if you're under a certain pageview threshold, nobody will give you crap for CPMs.  Revenue scales non-linearly, which gives the potential for huge revenue numbers, but those early ramp-up years really suck.


Seattle's Message
To go back to what message a city sends, I'll speculate that Seattle says "make something sustainable."  I don't have a lot of evidence to back this up, and if I did it would be another blog post entirely.  But there's a certain desire to "get rich slowly" here in Seattle, more, I think than other places.

Food for thought anyways.

May 30, 2008

Hello, World!

The first program that a beginning programmer ever learns to write is very simple, it just displays the words "Hello, World!"  Seems like a good title for the first blog post.

My first Hello, World! program was in C++ in 1994.  This may not seem like a long time ago to some of you guys, but I was 9 year old.  I've been programming ever since.

Why I'm Writing
For one, I'm starting this blog to chronicle things for myself.  I've learned a ton over the last year, running a startup, and it'll be interesting to see why I considered insightful, next year.  For two, there aren't a lot of CTO musing out there that I can find, so you might find some interesting thoughts on scaling web applications here.  Third, I'd like people to read it.  There's a certain amount of social proof that comes along with having a well-read blog, so I'll try to be as insightful as possible so that people think I'm cool.

Yes.  I'm blogging so people think I'm interesting.  :-p

Why TypePad
I'm a tech guy for sure, so I could conceivably use any number of blogging platforms to write this thing, from Blogger to Typepad to writing it up in static HTML pages.  Honestly, I'm doing this on a whim, and I'm using Typepad because (1) I've heard of it, and (2) my co-founder at Athleon, Brent, uses it and I figure he probably did his research and I trust his opinion, so it must be the best one.  This is highly unscientific, but if you're looking for double-blind studies or multivariate testing, you should wait for a few blog posts in.  :-)

What I'll Say
Some technical stuff.  I have a BS in Electrical Engineering and have been coding since age 9, so things are bound to contain some basic math.  I did terribly in differential equations, though, so we're talking multivariable calculus and below.

Some history stuff.  I read about a book a week, and I love history, so you're bound to get a few WWI or War of the Roses references.  I swear by the book Generations by Strauss and Howe, so you'll get a good dose of pop sociology too.

Economics, maybe lots of it.  I'm interested in markets and rational consumers more than those pop-economics books by Malcolm Gladwell (Blink, Tipping Point, World is Flat).  You'll get more Malthus that you'd like.  So it goes.

(Yes, that was a combination Thomas Malthus/Kurt Vonnegut reference.  Expect more of them.)

And I'm starting a company.  There's bound to be some interesting things from that.  In fact, if I haven't read anything interesting that I can comment on from Fred Wilson, or Josh Kopelman, or Andrew Chen, I'll probably say something about the startup.

Let's get started.