251 lines
14 KiB
Markdown
251 lines
14 KiB
Markdown
---
|
|
layout: post
|
|
title: Ten Lessons from GitHub's First Year
|
|
---
|
|
|
|
{{ page.title }}
|
|
================
|
|
|
|
<p class="meta">29 Mar 2011 / 29 Dec 2008 - San Francisco</p>
|
|
|
|
**NOTE: This post was written in late December of 2008, more than two years
|
|
ago. It has stayed in my drafts folder since then, waiting for the last 2% to be
|
|
written. Why I never published it is beyond my reckoning, but it serves as a
|
|
great reminder of how I perceived the world back then. In the time since I wrote
|
|
this we've grown from four people to twenty-six, settled into an office,
|
|
installed a kegerator, and still never taken outside funding. In some ways,
|
|
things have changed a great deal, but in the most important ways, things are
|
|
still exactly the same. Realizing this puts a big smile on my face.**
|
|
|
|
The end of the year is a great time to sit down with a glass of your favorite
|
|
beverage, dim the lights, snuggle up next to the fire and think about what
|
|
you've learned over the past twelve months.
|
|
|
|
For me, 2008 was the year that I helped design, develop, and launch GitHub.
|
|
Creating a new startup is an intense learning experience. Through screwups and
|
|
triumphs, I have learned some valuable lessons this year. Here's a few of them.
|
|
|
|
## Start Early
|
|
|
|
When Chris and I started working on GitHub in late 2007, Git was largely unknown
|
|
as a version control system. Sure, Linux kernel hackers had been using it since
|
|
day one, but outside of that small microcosm, it was rare to come across a
|
|
developer that was using it on a day-to-day basis. I was first introduced to Git
|
|
by Dave Fayram, a good friend and former coworker during my days at Powerset.
|
|
Dave is the quintessential early adopter and, as far as I can calculate, patient
|
|
zero for the spread of Git adoption in the Ruby community and beyond.
|
|
|
|
Back then, the Git landscape was pretty barren. Git had only recently become
|
|
usable by normal people with the 1.5 release. As for Git hosting, there was
|
|
really only [repo.or.cz](http://repo.or.cz/), which felt to me very limited,
|
|
clumsy, and poorly designed. There were no commercial Git hosting options
|
|
whatsoever. Despite this, people were starting to talk about Git at the Ruby
|
|
meetups. About how awesome it was. But something was amiss. Git was supposed to
|
|
be this amazing way to work on code in a distributed way, but what was the
|
|
mechanism to securely share private code? Your only option was to setup user
|
|
accounts on Unix machines and use that as an ad-hoc solution. Not ideal.
|
|
|
|
And so GitHub was born. But it was born into a world where there was no existing
|
|
market for paid Git hosting. We would be _creating_ the market. I vividly
|
|
remember telling people, "I don't expect GitHub to succeed right away. Git
|
|
adoption will take a while, but we'll be ready when it happens." Neither Chris
|
|
nor I were in any particular hurry for this to happen. I was working full time
|
|
at Powerset, and he was making good money as a Rails consultant. By choosing to
|
|
build early on top of a nascent technology, we were able to construct a startup
|
|
with basically no overhead, no competition, and in our free time.
|
|
|
|
## Adapt to Your Customers
|
|
|
|
Here's a seemingly paradoxical piece of advice for you: Listen to your
|
|
customers, but don't let them tell you what to do. Let me explain. Consider a
|
|
feature request such as "GitHub should let me FTP up a documentation site for my
|
|
project." What this customer is really trying to say is "I want a simple way to
|
|
publish content related to my project," but they're used to what's already out
|
|
there, and so they pose the request in terms that are familiar to them. We could
|
|
have implemented some horrible FTP based solution as requested, but we looked
|
|
deeper into the underlying question and now we allow you to publish content by
|
|
simply pushing a Git repository to your account. This meets requirements of both
|
|
functionality _and_ elegance.
|
|
|
|
Another company that understands this concept at a fundamental level is Apple.
|
|
I'm sure plenty of people asked Apple to make a phone but Steve Jobs and his
|
|
posse looked beneath the request and figured out what people really wanted: a
|
|
nice looking, simple to use, and easy to sync mobile device that kicked some
|
|
serious ass. And that's the secret. Don't give your customers what they ask for;
|
|
give them what they _want_.
|
|
|
|
## Have Fun
|
|
|
|
I went to college at a little school in California called Harvey Mudd. Yeah, I
|
|
know you haven't heard of it, but if you remember those US News & World Report
|
|
"Best Colleges" books that you obsessed over in highschool (ok, maybe you
|
|
didn't, but I did), Harvey Mudd was generally ranked as the engineering school
|
|
with the greatest number of hours of homework per night. Yes, more than MIT, and
|
|
yes, more than Caltech. It turned out to be true, as far as I can tell. I have
|
|
fond memories of freaking out about ridiculously complex spring/mass/damper
|
|
systems and figuring the magnetic flux of a wire wrapped around a cylinder in a
|
|
double helix. We studied hard--very hard. But we played hard too. It was the
|
|
only thing that could possibly keep us sane.
|
|
|
|
Working on a startup is like that. It feels a bit like college. You're working
|
|
on insanely hard projects, but you're doing it with your best friends in the
|
|
world and you're having a great time (usually). In both environments, you have
|
|
to goof off a lot in order to balance things out. Burnout is a real and
|
|
dangerous phenomenon. Fostering a playful and creative environment is critical
|
|
to maintaining both your personal health, and the health (and idea output) of
|
|
the company.
|
|
|
|
## Pay attention to Twitter
|
|
|
|
I've found Twitter to be an extremely valuable resource for instant feedback. If
|
|
the site is slow for some reason, Twitter will tell me so. If the site is
|
|
unreachable for people in a certain country (I'm looking at you China), I'll
|
|
find out via Twitter. If that new feature we just released is really awesome,
|
|
I'll get a nice ego boost by scanning the Twitter search.
|
|
|
|
People have a tendency to turn to Twitter to bitch about all the little bugs
|
|
they see on your website, usually appended with the very tiresome "FAIL". These
|
|
are irksome to read, but added together are worth noticing. Often times these
|
|
innocent tweets will inform a decision about whether an esoteric bug is worth
|
|
adding to the short list. We also created a GitHub account on Twitter that our
|
|
support guy uses to respond to negative tweets. Offering this level of customer
|
|
service almost always turns a disgruntled customer into a happy one.
|
|
|
|
If you have an iPhone, I heartily recommend the
|
|
[Summizer](http://fanzter.com/products/download/summizer) app from Fanzter, Inc.
|
|
It makes searching, viewing, and responding to tweets a cinch.
|
|
|
|
## Deploy at Will!
|
|
|
|
At the first RailsConf I had the pleasure of hearing Martin Fowler deliver an
|
|
amazing keynote. He made some apt metaphors regarding agile development that I
|
|
will now paraphrase and mangle.
|
|
|
|
Imagine you're tasked with building a computer controlled gun that can
|
|
accurately hit a target about 50 meters distant. That is the only requirement.
|
|
One way to do this is to build a complex machine that measures every possible
|
|
variable (wind, elevation, temperature, etc.) before the shot and then takes aim
|
|
and shoots. Another approach is to build a simple machine that fires rapidly and
|
|
can detect where each shot hits. It then uses this information to adjust the aim
|
|
of the next shot, quickly homing in on the target a little at a time.
|
|
|
|
The difference between these two approaches is to realize that bullets are
|
|
cheap. By the time the former group has perfected their wind detection
|
|
instrument, you'll have finished your simple weapon and already hit the target.
|
|
|
|
In the world of web development, the target is your ideal offering, the bullets
|
|
are your site deploys, and your customers provide the feedback mechanism. The
|
|
first year of a web offering is a magical one. Your customers are most likely
|
|
early adopters and love to see new features roll out every few weeks. If this
|
|
results in a little bit of downtime, they'll easily forgive you, as long as
|
|
those features are sweet. In the early days of GitHub, we'd deploy up to ten
|
|
times in one afternoon, always inching closer to that target.
|
|
|
|
Make good use of that first year, because once the big important customers start
|
|
rolling in, you have to be a lot more careful about hitting one of them with a
|
|
stray bullet. Later in the game, downtime and botched deploys are money lost and
|
|
you have to rely more on building instruments to predict where you should aim.
|
|
|
|
## You Don't Need an Office
|
|
|
|
All four fulltime GitHub employees work in the San Francisco area, and yet we
|
|
have no office. But we're not totally virtual either. In fact, a couple times a
|
|
week you'll find us at a cafe in North Beach, huddled around a square table that
|
|
was made by nailing 2x4s to an ancient fold-out bulletin board. It's no Google
|
|
campus, but the rent is a hell of a lot cheaper and the drinks are just as good!
|
|
|
|
This is not to say that we haven't looked at a few places to call home. Hell, we
|
|
almost leased an old bar. But in the end there's no hurry to settle down. We're
|
|
going to wait until we find the perfect office. Until then, we can invest the
|
|
savings back into the company, or into our pockets. For now, I like my couch and
|
|
the cafe just fine.
|
|
|
|
Of course, none of this would be possible without 37signals'
|
|
[Campfire](http://www.campfirenow.com/) web-based chat and the
|
|
very-difficult-to-find-but-totally-amazing
|
|
[Propane](http://productblog.37signals.com/products/2008/10/propane-takes-c.html)
|
|
OSX desktop app container that doubles the awesome. Both highly recommended.
|
|
|
|
## Hire Through Open Source
|
|
|
|
Beyond the three cofounders of GitHub, we've hired one full time developer
|
|
(Scott Chacon) and one part time support specialist (Tekkub).
|
|
|
|
We hired Tekkub because he was one of the earliest GitHub users and actively
|
|
maintains more than 75 projects (WoW addons mostly) on GitHub and was very
|
|
active in sending us feedback in the early days. He would even help people out
|
|
in the IRC channel, simply because he enjoyed doing so.
|
|
|
|
I met Scott at one of the San Francisco Ruby meetups where he was presenting on
|
|
one of his myriad Git-centric projects. Scott had been working with Git long
|
|
before anyone else in the room. He was also working on a pure Ruby
|
|
implementation of Git at the same time I was working on my fork/exec based Git
|
|
bindings. It was clear to me then that depending on how things went down, he
|
|
could become either a powerful ally or a dangerous foe. Luckily, we all went
|
|
drinking afterwards and we became friends. Not long after, Scott started
|
|
consulting for us and wrote the entire backend for what you now know of as
|
|
[Gist](http://gist.github.com/). We knew then that we would do whatever it took
|
|
to hire Scott full time. There would be no need for an interview or references.
|
|
We already knew everything we needed to know in order to make him an offer
|
|
without the slightest reservation.
|
|
|
|
The lesson here is that it's far easier and less risky to hire based on relevant
|
|
past performance than it is to hire based on projected future performance.
|
|
There's a corollary that also comes into play: if you're looking to work for a
|
|
startup (or anyone for that matter), contribute to the community that surrounds
|
|
it. Use your time and your code to prove that you're the best one for the job.
|
|
|
|
## Trust your Team
|
|
|
|
There's nothing I hate more than micromanagers. When I was doing graphic design
|
|
consulting 5 years ago I had a client that was very near the Platonic form of a
|
|
micromanager. He insisted that I travel to his office where I would sit in the
|
|
back room at an old Mac and design labels and catalogs and touch up photographs
|
|
of swimwear models (that part was not so bad!). While I did these tasks he would
|
|
hover over me and bark instructions. "Too red! Can you make that text smaller?
|
|
Get rid of those blemishes right there!" It drove me absolutely batty.
|
|
|
|
This client could have just as easily given me the task at the beginning of the
|
|
day, gone and run the business, and come back in 6 hours whereupon I would have
|
|
created better designs twice as fast as if he were treating me like a robot that
|
|
converted his speech into Photoshop manipulations. By treating me this way, he
|
|
was marginalizing my design skills and wasting both money and talent.
|
|
|
|
Micromanagement is symptomatic of a lack of trust. The remedy for this ailment
|
|
is to hire experts and then trust their judgment. In a startup, you can
|
|
drastically reduce momentum by applying micromanagement, or you can boost
|
|
momentum by giving trust. It's pretty amazing what can happen when a group of
|
|
talented people who trust each other get together and decide to make something
|
|
awesome.
|
|
|
|
## You Don't Need Venture Capital
|
|
|
|
A lot has been written recently about how the venture capital world is changing.
|
|
I don't pretend to be an expert on the subject, but I've learned enough to say
|
|
that a web startup like ours doesn't need any outside money to succeed. I know
|
|
this because we haven't taken a single dime from investors. We bootstrapped the
|
|
company on a few thousand dollars and became profitable the day we opened to the
|
|
public and started charging for subscriptions.
|
|
|
|
In the end, every startup is different, and the only person that can decide if
|
|
outside money makes sense is you. There are a million things that could drive
|
|
you to seek and accept investment, but you should make sure that doing so is in
|
|
your best interest, because it's quite possible that you don't _need_ to do so.
|
|
One of the reasons I left my last job was so that I could say "the buck stops
|
|
here." If we'd taken money, I would no longer be able to say that.
|
|
|
|
## Open Source Whatever You Can
|
|
|
|
In order for GitHub to talk to Git repositories, I created the first ever Ruby
|
|
Git bindings. Eventually, this library become quite complete and we were faced
|
|
with a choice: Do we open source it or keep it to ourselves? Both approaches
|
|
have benefits and drawbacks. Keeping it private means that the hurdle for
|
|
competing Ruby-based Git hosting sites would be higher, giving us an advantage.
|
|
But open sourcing it would mean that
|
|
|
|
<b>NOTE: This is where the post ended and remained frozen in carbonite until
|
|
today. I intend to write a follow up post on our open source philosophy at
|
|
GitHub in the near future. I'm sure the suspense is killing you!</b>
|
|
|
|
[Discuss this post on Hacker News](http://news.ycombinator.com/item?id=2384320)
|