We have been grateful to have Kevin Wang work with us for the past month, during MIT’s January period. He wrote good code and learned a lot about startups in the process. The other day Kevin asked us to read a draft of an email he plans on sending to his classmates back at MIT. The email is Kevin’s perspective on what skills are important to a startup founder. We thought it was pretty cool, so we decided to share it on the Xobni blog. Enjoy!
Dear friends and fellow CS people,
I’ve spoken with many of you over the past few months, either informally or formally, about doing a startup in the near future. It’s something that I’ve always been interested in, and, now after working for one during [MIT’s January period], I am convinced that it is the right way to go. I’ve been learning a great deal from my few weeks here, garnering small bits about what it takes to build a successful company from the ground up.
The most import thing I’ve realized over the past month is that my focus in school has been wrong. During my first two and a half years at MIT, I’ve been spending considerable effort focusing on my grades. This is understandable, since at the time I didn’t have a clue as to what I wanted to do, so the safe thing was to buckle down and study. Looking back though, I believe my time could have been much better spent learning practical skills, such as becoming a better programmer and designer, and gaining experience with databases and servers. These are skills and tools that will be essential in building a successful startup, and I have been negligent of them. It’s interesting to note that a fair number of the young entrepreneurs around me are college dropouts (all out of volition to follow their dreams). It doesn’t take a straight A student to create a successful startup—it takes someone with vision and practical know-how.
That brings me to the first big ingredient: the idea. The idea is paramount. A company without a theme is like old-style canned soup without a can opener—you just can’t get anywhere with it! “Well duh,” you say. You’re right, but let me explain.
Adam Smith, the co-founder and lead developer of Xobni (www.xobni.com) has been thinking about startups for many years now. His wrote his first email application when he was thirteen years old, and continued to hone his development skills since then, working on a plethora of personal projects for profit and experience. The email platform that Xobni is building was realized after spending a lot of his undergrad years at MIT thinking about opportunities where technology could address an issue present in our lives—in this case, how to communicate more effectively via email. On top of that, he’s spent much of his spare time reading about startups and how to make them work, especially the writings of Paul Graham, who I’ll get to later.
So clearly, you can tell Adam’s been brainstorming over startup ideas for many years now. But that’s not the only thing he’s been doing right. He’s also spent a fair share of his spare time improving his programming skills. How? The only way: writing code. Lots and lots of code. This is the second big ingredient: practical skills. Taking 6.046 this past semester was loads of fun and extremely interesting. However, out of all the development I’ve ever done for a company (in my very limited experience, albeit), I have never had to use anything more complicated than a sorting algorithm. And of course, those are built into every modern day language haha. Trees? Forget about it, never touch ’em! I’m not saying that things like 6.046 are a waste of time, but rather that it seems most of what they teach us in class brings us about 3% closer to real-life success in industry. I’m writing a GUI right now for their application, and most of the issues I run into aren’t about how to solve a problem, but rather how to solve “problems caused by the language”. Sorry, that was too pessimistic. Most of the issues I’ve been running into are how to use the language at hand to help me solve the problem.
I’ve come to realize that being a good programmer is about 5% algorithms, 15% perseverance, 40% design [patterns], and 40% knowledge of a language, and its platform and libraries. I think most of us are fine with the first two, but in terms of the latter two, I’d rate us as mostly abysmal. It’s not that we don’t have the capacity to learn. It’s just that we’re not taught these things at school, and we don’t spend substantial extra time on our own to learn them. Hence, we don’t know jack about design patterns, and if you ask me a real Java or C# question, it’s unlikely that I could give you a satisfactory answer. In short, when it comes to programming skills that matter, we have no experience. We are noobies.
As a quick example, did you know that scrollbars in C# never let the user scroll to their maximum theoretical value? Suppose you have a scrollbar whose minimum value is 0, maximum value is 100, and large change interval is 20 (equivalent to clicking in the blank space on a scrollbar). If the user grabs the slider and moves it as far as he or she can in the positive direction, the value your program will see when it checks the scrollbar value is not 100, but 100 – 20 + 1 = 81. This behavior is documented on MSDN, but is not immediately obvious or even intuitive. Alas, a day’s time was lost figuring this out. I guess what I’m saying is, modern languages like Java and C# that are very rich and powerful in their capabilities are also replete with nuances. Being efficient will actually require you to know many of the esoteric details of the platform, such as the aforementioned fact. If we ever hope to be run a successful startup, we’re going to need to know a language rock solid. We want C# to be a help, not a hindrance.
To amend this, I will be tackling C# and Java in my spare time, as well as doing some reading about software design. But book learning only goes so far. I need to code more and work on large scale projects. Adam recommended contributing to an open source project, which is a great idea. I urge all of you to join me in this endeavor.
I know this has been long, but please stick with me. The last part of my rant is about a guy named Paul Graham. Paul is a fellow computer scientist, much like you or I. Unlike you or I, he is a multi-millionaire. He got his start as a Lisp hacker (he’s big on Lisp), and started a company called Viaweb, the first platform of its kind that lets you build your own online shop. You could say that every online store you see nowadays (which is no doubt ubiquitous), stems from the original work that Paul did. Or rather, Paul had the vision for a new service that would cause a paradigm shift in the way people transact business. Maybe I’m being overstating facts, but you get the idea. I want to tell you about Paul, because Paul is our friend. Paul has vast stores of experience. Paul can help us.
He maintains a site that I strongly urge, no, that I ask you to drink earnestly from, to imbibe. http://www.paulgraham.com/. There are three main sections of interest.
1. Essays (http://www.paulgraham.com/articles.html).
This is probably the most important. Here, Paul shares much of his wisdom about startups, programming, technology, success, and life. He’s a good writer, and he has great insights. A quick glance at the essay titles and you may begin to see the value of the content. They topics range from technical to business, which is great because I think most of us are too enamored of the tech side to even consider the equally important business side of things. I’m planning on attacking these essays vociferously over the coming semester, and I’d love to talk with many of you about the issues he brings up.
2. FAQs (http://www.paulgraham.com/faq.html)
In particular, I’d recommend the Programming and Startup FAQS. They’re sort of like his essays, but containing only a few morsels and nuggets of goodness. Nevertheless, appetizers are served. Eat up!
3. Lastly, and important in another sense, is the Y Combinator (http://ycombinator.com/).
You may remember the “Y Combinator” from 6.001 and Scheme. As they succinctly state in their FAQ: “[The Y Combinator is] a program that runs programs; we’re a company that helps start companies.” Basically, Paul (and a team of other noteworthy individuals) have come together to build a new type of seed funding company. They provide initial funding, classes, advice, and connections to help young startups (*cough* us in the future? *cough*) get off the runway.
It’s hard to get their support though. They get hundreds of applications every year from teams with ideas, and they only accept about ten or so into that year’s Y Combinator Class. Xobni made the cut for the Class of 2006 (Y Combinator’s second year), but we can be sure that competition will grow as the program gains popularity and prestige, and as more people hear about it. Right now, Xobni is doing well. They are expanding and hiring. This is where we want to be 2-4 years down the line.
As a mental exercise, take a quick peek at their (very open ended) application. They ask pretty deep questions, so when we apply, we’d better have our act together.
What do you understand about your business that other companies in it just don’t get?
What are people forced to do now because what you plan to make doesn’t exist yet?
How will you make money?
Who are your competitors, and who might become competitors? Who do you fear most?
For founders who are hackers: what cool things have you built? (Include urls if possible.)
The purpose of this message was fivefold.
First, I wanted to share my experience with you, to explain to the sources of my views on programming, startups, and success.
Second, I wanted to highlight what I see as deficiencies that I have (and perhaps some of you share) in terms of real programming ability and experience. I do this, of course, so that we may improve our weaknesses once we have identified them.
Third, I wanted to introduce you guys to important literature and ideas that I think you should be aware of. Reading those essays by Paul Graham and always thinking about startup ideas will no doubt prove invaluable in the future.
Fourth, I wanted to highlight the characteristics that I would expect of myself and fellow cofounders of a startup. We need to be well versed and knowledgeable in one if not many languages, and our design skills must be strong. The only ways we can achieve this is through experience coding—we need to find projects to work on in the meantime. Not only that, we will need experience in dealing with databases, servers, development platforms, and operating systems. I’ll be the first to admit that my knowledge of these topics is next nothing, but that will change with time. I hope those of you who are serious about startups in the future will work on improving your programming and practical skills, as I will.
Lastly, I wanted to inspire you! Doing a startup is a fun, rewarding experience, with the potential to make us very well off! Even if you fail, you’ll have learned valuable lessons and gained a great deal of confidence in your abilities, whether you were working on software or business development. More than that though, I think we’re a smart group of people who actually have a good shot at doing something fantastic and making a large impact in the way people live their lives in the future. It’s going to be a long road, but I believe we have what it takes to make it. Excelsior!
Your fellow busy beaver,