How I “failed” at a YC startup, worked at early Stripe, and then raised $20M
Lessons (for those who don’t care for my rambling narrative account):
Figure out what great looks like.
You have to get lucky, but you also have to capitalize on the lucky opportunities.
It’s ok to miss out on your top choice. Your optimization function might be different in a couple of years.
It’s hard to spot great businesses, but if you can spot great people to work with, you can narrow the window.
Failing gives you better perspective than being told that you will fail.
Great engineers aren’t defined by years of experience. They need to care deeply about the product and have the technical prowess to build a great experience.
Early decisions at a company have compounding effects.
Contributing to Ruby on Rails
Lesson: Figure out what great looks like.
In my junior year of MIT, I took a class on open source software. By far my favorite memory was going to an open source conference and meeting Aaron Patterson (aka Tenderlove). Aaron is a legend: a member of the Rails core team and an incredibly fascinating person (just take a look at his website and you’ll understand why). I had never seen someone fix bugs as quickly as him or have such deep knowledge of knowledge of Linux, Rails, and Ruby.After I met Aaron, I knew I wanted to be just as good as him at programming. So I started contributing to Rails and fixing as many small bugs as I could find. For the next 6 months, I spent my extra hours before class (and during my least favorite classes) working on Rails bug reports. By sheer luck, my first taste of professional software development happened to be on one of the most influential and widely used web frameworks. The core team members held every pull request to a very high standard, and I learned a lot about how to write good code.
Lesson: You have to get lucky, but you also have to capitalize on the lucky opportunities.
Over the summer, I got assigned to my first big project. I was asked to complete a major refactor of the structure of the Rails application. Unfortunately, my patch ran into many issues and never made it into Rails. I learned that making big changes in heavily used code usually leads to bad outcomes (especially when you don’t fully understand a system).
However, I persisted and kept making smaller patches. As the summer came to a close, I had climbed up to become one of the top 50 Rails contributors (to this day, I’m still in the top 100). But my commits started petering out as the school year started and I began looking for jobs.
Looking for a job in Silicon Valley
Lesson: It’s ok to miss out on your top choice. Your optimization function might be different in a couple of years.
As I started job hunting, one company stood out amongst all the others: Meteor. I was incredibly excited about Meteor’s team and product. They were a team of ex-Asana engineers building a new open source web framework that automatically pushed database changes out to the frontend. Meteor combined my love of open source software with the new exciting technologies of the time. The only problem was that I didn’t get the job.
I was devastated at the time, but looking back, this ended up being a good thing. I was lucky enough to get job offers from a range of small to large companies. I decided to accept an offer from a little known company called Stripe.
At the time, Stripe wasn’t an obvious choice. My parents had never heard of it, nor had any of my friends (and it would be years before any of my friends had any idea what Stripe did). It was hard to square Stripe’s salary with the money and stability offered at larger tech companies. When I tried to negotiate, I was given the party line: “all engineering salaries are the same.” And I still wanted to work on open source software (ya, I was pretty bummed about Meteor).
I loved the excitement of Silicon Valley and wanted to be a part of it, so I was determined to find a company where I could be a sponge. There were a lot of companies doing exciting things, from big data companies started by world renowned professors to companies producing the next cutting edge frontend web framework. Every startup seemed to be growing. But it became apparent that external factors were lagging indicators of great companies.
Lesson: It’s hard to spot great businesses, but if you can spot great people to work with, you can narrow the window.
Stripe was ever so slightly different because it had intelligent people doing things with humility and care. Everyone I talked to genuinely cared about their job and about me as a person, and everyone was high powered. I remember being in awe of Nelson Elhage and Evan Broder who worked on technology to hot-swap a linux kernel without rebooting. They were always excited to talk about problems and how to solve them.
I also remember the care Stripe put into the recruiting process. Patrick Collison went on a coffee walk with me, chatting about everything from Stripe’s machinations to acquire a defunct bank to the economic drivers of productivity growth. They introduced me, a random college student, to their investors. I was in awe and quite literally shaking when they had Michael Moritz and Paul Graham do 20 minute chats with me.
In the end, it was the thoughtfulness and drive in Stripe’s culture that set it apart. Many companies had one or the other, but very few had both.
Starting a YC company
So there I was, ready to start working at Stripe in the summer, when Max Kolysh (now the CEO of Dover) sat me down for lunch at Chipotle. It was November of my senior year in college and I was excited to spend my last semester learning and not having to care about grades.
I listened intently to Max talk about how he and Doug Feigelson had gotten into YC to build an API to connect online shopping. I thought the idea was a bit ridiculous, but Max and Doug were incredibly smart, driven, and humble people. I’ve always optimized my environment for learning and being around great people, so next thing I knew I was signing incorporation documents and flying out to Mountain View. I had no idea what I’d do about the Stripe offer come summer, but I would figure it out when the time came.I packed up a duffel bag of clothes and headed out to Palo Alto to start Zinc. During this time, I learned to grind. Each morning, we’d wake up around noon and code until 8pm. We’d eat a quick dinner and go to the gym before returning at 11pm to continue coding until 3 or 4am in the morning. Many people would say we worked too hard, but I loved it. We were doing something exciting and I poured my heart and soul into it.
Lesson: Failing gives you better perspective than being told that you’ll fail.
However, as YC came to an end, we still hadn’t come up with a real product. We had been instilled with the YC mentality that growth is paramount and we did everything we could to achieve growth. This led us to create a consumer app that lost money on every transaction. YC was a great forcing function for us to focus exclusively on growth, but we didn’t spend enough time figuring out the fundamentals of what we were doing. What’s more, I learned that coding 13 hours a day doesn’t guarantee anything.
These were hard lessons that I’d carry into the future. As we shut down our product, I knew my startup experience was coming to an end. I had already accepted Stripe’s offer and I was going to stay true to my word. So in June of 2014, I had a somber meeting with Max and Doug and went to work for Stripe.
Working at early Stripe
When I started at Stripe, I asked to delay my start date until after a family vacation, but my manager just told me to start sooner and take time off later (Stripe was just shy of 100 employees and moving incredibly quickly). I now had an artificial deadline of one month to ship my first project.
I was assigned to improve email receipts with Michelle Bu. We spent the month touching different parts of the Stripe infrastructure and writing a ton of code. Just before launch date, we stayed up the entire night fixing polish items. I remember going to sleep in a phone booth and waking up early in the morning to try to finish out some last edits while Michelle worked on the blog post.
Lesson: Great engineers aren’t defined by years of experience. They need to care deeply about the product and have the technical prowess to build a great experience.