Visceral Advice

I’m now sure that most advice is wasted.

I’ve ran into several problems recently, after which I thought Gosh, so-and-so’s advice was right! The problem is that I never remember so-and-so’s advice when I’m actually in the situation. There’s a bug somewhere between hearing the advice and recalling it in the situation.

I’ve been trying to fix this bug. I’m going to try to imagine two things whenever I hear advice: the experience that generated it, and myself in a situation that calls for the advice.

I think this exercise will help me generate better questions for the advice giver, too.



A Great Day

Yesterday was a tough day. We were distracted by hiring and long meals and meetings.

Today was great. Gabor and I had lunch and coffee for two hours. We talked about how we can improve our hiring process and how we feel about the way things are generally going. We exchanged lots of ideas. It was fun.

Afterwards we got a large shipment from Dell. That was fun too.

I also played some squash tonight with Greg from Snipshot and two guys from XuQa.com who frequent the Bay Club. I won three out of six games. I’m quite a beginner. It’s so much fun when you get to play with someone at your level!

Other than that, I just hacked away. I worked on some code that’s pretty fundamental to a new direction of our product. After refactoring and refactoring to get the right interfaces, I spent lots of time optimizing memory and run times. It’s hella fast.

I have a few emails to respond to, and then I’ve got to convince myself to go to sleep. I hate ending days like today.



Startup Advice and Lookup Tables

(This post is partially derived from some things I said at Startup School 2007.)

Startup founders really need advice, especially first timers. It’s like you’re put in a big dark room with booby traps, and your only hope of survival is to draw upon the wisdom of those who came before you.

The good news is that you’ll be bombarded with advice. It comes from everywhere – investors, advisors, blogs, books, users, and rap artists. [1] Most startup advice, though, is not relevant to your current situation. You might be thinking about finding a cofounder, but the blog you’re reading is discussing corporate bylaws.

What you’ve got to do is build up a hash table in your head to store the out-of-context advice. The hash table is a map from situations to what you should do in each situation.

Hash table

The person giving advice has a hash table in their head, mostly built by learning the hard way. The point of advice is to copy their hash table over to your hash table. [2] This copy is very hard to do. How can you internalize all of that knowledge?

I can give you two hacks.

First, use repetition. Download the audio versions of Paul Graham’s essays, burn them on a CD, and listen to them over and over again. Read books once, identify the ones you like, and then read those again and again, every six months.

The second hack is to get the stories. Punch lines are harder to remember than plots like “We faced this problem, chose this action, and it blew up.”

My two favorite startup books are 100% stories. Jessica Livingston’s Founders at Work is filled with interviews of successful founders recalling the Good Ole Days, in full color.

My other favorite startup book is High Stakes No Prisoners by Charles Ferguson. [3] It’s the story of Vermeer, the company that made Frontpage and sold to Microsoft for $140M. The book is only moderately insightful; it is a real win because Charles tells the story in gross detail. He names names, and trash talks everyone for their ugly actions, including himself. It’s remarkably raw.



No Storage

Of course, the real win is if you don’t have to do the hash table copy from books and other data sources. Instead, when you face a challenging situation, just ask your advisors. Essentially, do a lookup in their hash table instead of making a copy.

Having access to these kinds of resources is incredibly valuable. It’s yet another reason that you should be in Silicon Valley to start a startup: experienced advisors are at hand. [4]



Notes

[1] For example, Master P relates some wisdom: “Nigga told me, ‘C, leave that dope, cause rappin is yo thang.’”

[2] This blog post is an example of such a transfer. Most of my thoughts are unoriginal, though, so you’re getting a second hand copy.

[3] Used copies are available on Amazon for seventy nine pennies.

[4] Having great investors also helps. And, okay, maybe Boston qualifies too. : )




Physics at the Symphony

I really enjoy going to the symphony. I’ve been to the San Francisco Symphony twice since moving here last October. My favorite part is watching the violinists stroke their instruments in unison. This would be artful even without the music, but with beautiful music as a side effect – oh the glory!

Xobni is staying lean, though, so I buy the nose bleed seats. If I’m 300 feet from the orchestra pit, the music is delayed about 300 milliseconds behind what I’m seeing. (Sound travels at about one foot per millisecond.)

Humans can typically observe delays over 100ms. I might just be imagining it, but I’m pretty sure I can actually notice the delay between what I see and what I hear!



The Life of an Entrepreneur, in 33 Seconds

I was listening to my MP3 collection, and heard one of the theme songs from Aladdin. Its lyrics at the end of the song personify the life of an entrepreneur:


One jump, ahead of the hoofbeats,
One hop, ahead of the hump,
One trick, ahead of disaster,
They’re quick, but I’m much faster!

Here goes,
Better throw my hand in,
Wish me happy landing,
All I’ve gotta do is juuuuuuuump!



Here’s the audio:

tiny avatar One Jump Ahead




Reinventing Code

When it comes to ideas or products, you want to cover new territory. It’s the same in the programming world. You want to build on others’ abstractions.

Sometimes, though, you just can’t help it.

We’re writing our software on the .NET platform. In .NET, all user interface elements have their own window handle in the operating system. Window handles are expensive resources. Parts of our user interface needed a lot of user interface elements, but we couldn’t afford to allocate so many window handles.

sunset.JPG

So I started writing what a critic would call a reimplementation of the System.Windows.Forms namespace [1], but using a windowless model. Whereas the .NET top level interface element is called Control, ours was called LightControl. We also had LightButton, LightPictureBox, etc.

I was only implementing about 2% of the namespace, but I was still nervous. It should set off alarms whenever you’re doing something that is both low level, and similar to something that already exists. But I just couldn’t think of any alternative.

This was a few months ago.

I was relieved yesterday when I randomly stumbled upon a blog post by Raymond Chen in which he validates my strategy. Raymond Chen is the man.

This isn’t the first time this has happened.

I wrote our own file system about eight months ago because NTFS didn’t have the right performance characteristics. We needed to store lots of small files, but traditional file systems have horrid performance in this scenario. They seek the disk like crazy! We also didn’t need directories, shortcuts, or any operations other than { create, append, read entire file, delete }. Surprisingly, a good open source implementation didn’t exist, so we bit the bullet.


The Point

First, don’t be afraid to code a variant of something that already exists. Do your homework first, but do what you’ve gotta do.

Second, if you’re making something new, don’t hide power. You might be able to save someone from having to write new code. [2]



Notes

[1] This would take a hundred developers two years to finish. Luckily we don’t need all of the functionality, but more importantly we don’t need an uncrashable API.

[2] I’m not blaming MS on this one. Although many criticize them for not providing a windowless control framework, they couldn’t have done so just by exposing an extra option. They’re not hiding power; it’s just not there.




Reinventing Ideas

About two years ago, I was in the shower. [1] I had an idea: genetic algorithms modify data so as to optimize for something you care about. Lisp encourages programmers to think of programs as data. Why not use genetic algorithms to find the optimal program to achieve something? For example, find the program that is the best at playing checkers! [2]

showerhead.jpg

I enthusiastically proposed the idea to my machine learning professor at our next meeting. She said Ah, that’s a great idea. It’s called evolutionary programming. People have written PhD theses on it. They haven’t gotten much traction because the search space is way too large, unless you’re working on a small problem with a specialized programming language.

Well, then. There goes that idea!

I felt proud to have thought of the idea, but moreso I felt disappointed that the idea had already been explored and found fruitless.

Whenever I have a new idea, I find myself hoping that I’m the first to think of it. You’ve got to check with alumni, though, to make sure you’re not spending cycles rediscovering something that’s already known.

We’ve met several times with Eric Hahn to discuss what we’re doing. Eric is the universally acknowledged email expert in Silicon Valley. He did cc:Mail, Lotus, Netscape, Lookout Search, and probably a few others. He has been a great source of wisdom when it comes to our product.

The other lesson from this experience? Take plenty o’ showers.



Notes

[1] Okay, wise guy…

[2] Paul Graham has spoken to this exact method of coming up with ideas. It’s actually kind of eerie. He talks about making familiar mental gestures against a new substrate in the shower. In my case, I was in the shower, thinking about programs as data, and the genetic algorithm gesture got invoked.




Y Combinator, Should You?

I encourage most startups or would-be startups to apply to Y Combinator, our first investors. Most people are really excited about the possibility of getting YC funding.

Of the people who are lukewarm, the number one objection I hear is that the valuations are too low. The number two objection people give is that “We’re too late stage for them.”

Baloney.

405514957_9bacafa5c7_small.jpg

When someone says that the valuations are low, they’re comparing YC to a traditional investment. The rule of thumb usually doesn’t apply because the stage is super early (more on this later) and YC isn’t investing very much. But even from a higher level, valuations are a tactical matter; you should be thinking about grand strategy when making this decision. If Y Combinator funding increases your expected outcome by 2x, you should be willing to give up 50%, right?

I have a lot of empirical evidence about the entrepreneur’s upside so far. On average, Y Combinator will increase your expected outcome by at least 5x. They usually take 2-10% of your stock in exchange. That’s a great deal! (I think it’s really 20x or higher, but I’m being on the safe side.)

How do they increase your outcome so significantly? It’s not about the money at all; it’s about the advice and connections. These things seem fluffy before you’ve experienced their significance. I applied to Y Combinator mostly to be around Paul, not to get introductions to important people. I didn’t have any use for important people. Boy, have things changed. I can also say very empirically that the network really matters. More details and proof on that in a few months.

YC doesn’t just casually introduce you to investors, reporters, and potential employees. They really work their tails off to make it happen. Your job is to only give equity to people who are going to contribute to the company. You don’t want to give shares to investors who are just going to give you money and not help you out. You want to give shares to investors who will give you their cell phone number, who will write emails to recruits encouraging them to join, and so on.

I mentioned that YC also gives you great advice. There was a YC dinner last summer when we went to Paul and said Paul, we’re ready to launch. He said, very simply, No you aren’t. I went home demoralized. As Steve Jobs said, It was awful tasting medicine, but I guess the patient needed it. We weren’t ready to launch.

I could go on and on about this, but I’ve got to get to work on the second objection: We’re too late stage for YC.

dscn1384_small.JPG

This objection might be true for some. YC doesn’t invest in $20M series B rounds. Usually, though, I hear this retort from people who have been working on the product without funding for one or two years. They’ve built a lot of technology, and are afraid that their valuations won’t reflect that.

I can see why people might think this way. For years YC’s web site said that they take 5-7% of the company. Only recently did it change; now it says 2-10%. (You can use the Internet archive to see old versions of their site.)

What’s going on here? YC is seeing more teams that have already made something, and they’re accommodating those situations. Their #1 goal is to work with great people and companies, not to own the largest possible percentage. So, no, you probably aren’t too late stage for them.

The founders of Weebly were working on their site for a year before taking YC money. They were on TechCrunch the day of their YC interview. They still took the money, and I am sure they haven’t regretted it.


panorama_small.jpg




The 2006-2007 Pumpkin is Dead

I always buy a pumpkin around Halloween to keep, uncarved, until it dies. They’re festive and can really brighten up a room.

This year’s pumpkin lasted for about four months.

Rest In Peace, 2006-2007 Pumpkin. (Maybe next year I’ll name it something more creative than by year!)


dsc01038.JPG




Complaints About Visual Studio

I love Visual Studio 2005. Microsoft repeatedly hits home runs it comes to IDEs. But it isn’t perfect; it has two thorns that prick me every day.

First, Visual Studio doesn’t have multimon support. I have three monitors, and only get to write code on one of them. You can open the same solution on multiple VS instances, but that doesn’t work because editing a file in one instance will confuse the other instance.

In contrast, Eclipse really nailed multi monitor support. You can have the same project open in multiple windows, and you can instantly see any edits in all the windows.

It’s funny that this bug impacts our hardware purchase decisions. Because VS 8 lacks multimon support, we prefer one huge monitor to multiple average ones. I’m running 1600×1200 vertical now, which means I can see 80 vertical lines of code at a time. I’m looking forward to getting even more in the near future.

Second, Visual Studio doesn’t have Edit And Continue support for anonymous functions. The code below executes as you would expect.

anonymousfunctions.png

Except that I’m from Texas. We don’t say “hello” in Texas; we say “howdy!” I didn’t see my mistake until I ran the code in debug mode, so I hit Pause and change “Hello” to “Howdy.” I hit Continue, but…

anonymousfunctionsbroken.png

I think that anonymous functions should be rarely used, but this bug really hampers my willingness to use them when they would otherwise make sense.

I am proud that C# has anonymous functions, though. Many languages don’t.