I am one of the many thousands of raving Paul Graham fans
out there. I’ve read most of his content (Paul doesn’t write
blog articles, he writes
essays). He
is clearly a very gifted writer. He is also very, very smart (and I
rarely use two verys). But, at least on one point, I humbly submit that
he is very wrong.
In the most recent essay, titled “
The 18 Mistakes That Kill
Startups”, Paul identifies (as you might expect from the title) the
common causes of startup failure.
I’d like to focus on point is #17: Choosing The
Wrong Platform
I agree with Paul that picking a wrong platform can indeed sometimes
kill a startup, but I’m not yet convinced that this is always the case. History
is replete with startups that picked what were widely considered to be the “wrong”
platform and still survived to tell the story (and make a ton of money in the
process). One example would be MySpace and their use of ColdFusion (not
that Cold Fusion is a
bad
platform, but most hacker-types – and particularly those that follow
Paul, would likely categorize it as a sub-optimal platform). There are other
examples of startups that succeeded (some modestly, some spectacularly),
despite having chosen the “wrong” platform. One additional example
that comes to mind is eBay’s early use of Microsoft’s platform
(ISAPI DLL written on top of IIS).
But, this is not my primary point of contention with the
article. Little harm is done by identifying wrong platform selection as a
potential mistake that startups should try and avoid (in fact, I think it helps
to raise awareness of the importance of this decision). My issue is with
how Paul advises startup founders go about actually
picking a platform.
Paul Graham: “How do you
pick the right platforms? The usual way is to hire good programmers and let
them choose. But there is a trick you could use if you're not a programmer:
visit a top computer science department and see what they use in research
projects.”
I agree with the first half. A great way to pick a
platform (if you’re not a programmer yourself) is to hire great
programmers (not just good ones) and let them choose. But, I don’t
think visiting a computer science department and seeing what they use in
research projects is an effective strategy. Here are my issues with this
particular approach:
- Being a prior computer science student
myself, I have a bit of a feel for how platforms get picked for research
projects. Rarely do these coincide with how startups in the real
world work. People in academic research projects are often solving
for a very different problem with very different motivations than a startup.
Lots of research projects are a learning
exercise. Most startups are a building
exercise. The desired outcomes are often vastly different.
- The platform selection process
is sometimes domain and/or user specific. For example, though Python
is a cool language (and I’m sure there are many academics that like
it), if you are seeking to build the next big killer desktop application
to run on Windows, it will likely prove to be a fatal choice. The
reason is simple. From a user’s perspective, they expect a
Windows application to look and feel like a Windows application. Chances
are, your Python desktop app won’t quite feel “just right”
(the user’s dog will bark at it). This is a case where the
users do care about the
platform choice because it actually impacts what they experience. Similar
arguments can be made for other target areas like mobile applications.
- There may be other dependencies
(i.e. integration points) that influence your decision. As a
startup, if you are building an application that will be an extension of
an existing application (or consume its services somehow), it often helps
to pick a platform that is conducive to that integration. For
example, if you’re building an Outlook plug-in, you probably don’t
want to use Ruby for that (even though it might support COM).
Basically, it seems that Paul thinks that all startups are
going after “change the world” strategies and don’t need to
concern themselves with user preferences, business domains or the need for
integration with existing systems. Though it would be great if this were
true, it’s really not.
What do you think? Am I off-base here? Are all
of you writing world-changing software applications that need to use the higher-end
languages and platforms from computer science research groups? Or, are at
least a few of you taking a less glamorous (but practical) approach?