A lot of people warned me not to walk away from my great position at Andreessen Horowitz to pursue software engineering.
…And now that I’m leaving my dream job engineering at Coinbase to co-found a startup, you can bet that “a lot of people” have been reminding me how many startups fail.
It was my Mom’s reaction, though, that stuck with me:
“Why would you leave the best job in the world… again?”
It’s a good question — and I’m writing this post to answer it.
As those of you who’ve been following along know, the past year and half has been a wild one for me, from falling passionately in love with programming, to leaving an amazing job to pursue this passion, to enduring Hack Reactor’s intensive coding program, to tackling complex problems as an engineer at a major cryptocurrency startup.
Long story short, it was an exhilarating journey with countless late nights, early mornings, and moments of self-doubt.
Today, I’ll pick up where I left off, sharing some of my ups and downs as an engineer at Coinbase… and reveal some of the exciting projects I’m diving into now!
It was April of 2016 when Coinbase offered me a software engineering role on their Brokerage team. The team was brilliant, the industry was cutting edge. Needless to say, I accepted immediately!
The days before I started were nerve-wracking. (If you’ve ever waited to start a new job before, you know how fear and anxiety can make you second-guess everything.) I haven’t been so nervous to walk into a building since the first day of middle school. 😳
My internal monologue as I rode the elevator up their towering office building in San Francisco’s Financial District went something like this: “I’ve never been a full-time software engineer at a company before. Do I even know what I’m doing? What if I get asked to build a micro-service within 48 hours? Or to rebuild the entire website within a week? I’m surely doomed…”
I stepped out of the elevator, took a deep breath — and stood there frozen for two minutes, trying to build up enough courage to ring the buzzer. “Buzzzzz”
Naturally, my nervousness was misplaced. The receptionist was warm and kind. The recruiting coordinator was more worried about how I liked my workspace than what I would be doing at it. I’d barely put down my backpack before the CEO, Brian Armstrong, came by to say “Welcome! Glad to have you on board!”
“Phew, no micro-services just yet,” I thought.
By then, my nervousness turned into excitement — I couldn’t wait to get hacking. Perhaps I’m not ready to build a micro-service on my first day, but I sure was ready to build something!
The next few weeks were a steady build of responsibility and familiarity — getting comfortable with the code bases, merging my first few pull requests, and integrating with the workflow, team, and culture. The challenge of diving into a completely new code base, gaining momentum in fixing bugs and implementing features, and building relationships with new friends kept me engaged and excited.
Fast-forward a couple months later, and I was firmly settled in. By then, I had two major projects under my belt — one where I A/B tested and implemented a new fee structure, and another where I built a new React/Redux front-end for supporting Ethereum buys and sells. I was ready to start on my third and largest project, which was to rewrite the existing monolith Rails front-end in React. Four months later, we shipped v1 of that massive rewrite. Phew!
By then it had already been six months and there were lots of things that I was really enjoying about working at Coinbase:
My gut instinct about the team was right. I couldn’t have asked for a smarter bunch of engineers to work with everyday.
From infrastructure, data science, fraud, payments, web and mobile, I had infinite opportunity to learn and grow from engineers across different engineering domains.
Beyond their strong technically chops, I admired that they were also well-rounded. (Not to mention mature thoughtful and independent thinkers.)
I loved that Coinbase gives engineers a high degree of autonomy and ownership over the implementation details of the features they build, rather than a top-down regimented system.
Being invested in my projects and tackling problems independently helped me learn and grow more quickly as an engineer.
Another thing that I appreciated was that the company deeply cares about continuous feedback and learning. Nothing we did was ever perfect — in fact, disorder was the norm.
Regardless, the team would make sure to have retrospectives after every project to discuss what did and didn’t go well.
…And let me tell you, we didn’t hold back. We criticized and laughed at ourselves, and then thought carefully about how we could avoid those mistakes the next time around. Personal and team progress is hard but important work.
I don’t really have to explain this one — who can resist the fully stocked kitchen, lovely office staff, pleasantly decorated bathrooms, and catered meals — all with a 360-degree view of beautiful San Francisco?
As with everything, every pro comes with cons. Here are a few things that I personally didn’t like about plugging into the corporate engineering structure:
Unfortunately, the reality is that maintaining old monolithic software is a core part of what we, as software engineers, must do when we’re working in a large engineering organization. Those are just the facts of life!
Open offices are wildly popular in the tech world — in spite of the the many studies showing how they can kill creativity and make focus impossible.
The constant human traffic and frequent interruptions made it feel like I was coding on live television. I found it difficult to be productive and eventually found myself working from home more and more frequently — it was the only place I could focus and get deep work done.
Alright, enough complaining Preethi! Time to get honest about why I felt restless — the truth is, my unhappiness had nothing to do with Coinbase as an organization.
At the end of the day, it was because I wasn’t passionate about the product Coinbase offers.
First, it wasn’t something that fired me up to get out of bed in the morning. It was difficult to care deeply about the features we were building, when financial products and services wasn’t a passion area for me personally.
Second, I realized that being at a company with separate roles for product management, project management, engineering management, design, and engineering inevitably meant that the role I served was purely engineering — to implement and engineer solutions and fix bugs.
Those of you who know me can probably imagine how neglecting the entrepreneurial part of my mind would leave me unsatisfied. I wanted to do everything from identifying the business purpose, to building the product, to maintaining and advancing the codebase.
I needed to be both the entrepreneur and the programmer.
At this point, I knew that the career trajectory I was on needed to change course. Maybe not as drastically as leaving finance for engineering — but something that engaged me as both an engineer and an entrepreneur needed to happen. Soon.
Nights and weekends became my “entrepreneur-programmer” time, and I meticulously planned my schedule so I’d have 1–2 hours every day to explore, learn, hack, write, and have fun. Soon, that 1–2 hours grew into 2–4 hours a day. At a certain point, side projects like writing and hacking on app ideas began to seem more “real” than my 9–5.
Did I feel guilty for wanting to leave a perfect team to work on another crazy dream? Of course.
Rather than make a spur of the moment decision, I decided to take some time off to reflect on what I was feeling. It’s tricky to figure out what truly makes you tick. But I needed to figure it out so I could answer the burning question: where can I contribute to this world in the most meaningful way?
I treated this time like a “test drive” to see what it’s like to wake up every morning and do whatever my heart and mind desired. Was this just a phase, or could I turn my ideas into a full-time reality?
Two weeks turned into a month. And then three months. And then to this moment, writing this post: the conviction that I’m ready to leave Coinbase and pursue new, more personal coding challenges and entrepreneurial endeavors.
One of the biggest things we struggle with as entrepreneurs is knowing when “the right time” is — the right time to pursue that passion, the right time to shun reason in the name of fulfilling our dreams.
But I’ve come to realize that there is no rule book that will give us the answer. That the “right time” never comes — you can spend your whole life getting your checks and balances in order and it’ll never feel “just right.” There’s always more you can do to prepare, get more experience, and minimize risk.
…But that doesn’t mean we should. Our minds will always rationalize the fear of the unknown.
So is now the right time for me to leave Coinbase? I honestly don’t know for sure. In fact, a few of my close friends and mentors said that waiting until I get “2 years of experience” seems more appropriate. Or that “testing the waters” by working at a small startup would be a better way to ease into it.
Is it really, though? Or would that just be an excuse to escape the fear and uncertainty of doing it now. And here’s my conclusion:
I don’t believe another six months or two years will make the answer any more clear.
What I do know is that I feel more confident than ever in my skills as a software engineer. I’m proud of everything I’ve been able to learn and improve my skills at thanks to Coinbase, such as:
- Version control (git)
- Deployment (Docker, circleCI)
- Monitoring (New Relic)
- Error reporting (Bugsnag)
- How to refactor legacy code into a new framework (Rails → React)
- How to refactor from one state management library to another (jQuery → Redux → Mobx)
- How to give thoughtful, constructive code reviews
- How to efficiently and effectively collaborate with designers in going from idea → mockup → wireframe → code
- How to test code using unit tests and integration tests
- Knowing when to choose between the “correct and thoughtful” solution that takes longer to implement but is more robust and scalable vs. a solution that is quick and “does the job” but isn’t robust or scalable
- How to handle situations where you deploy a really terrible bug that causes the entire application to crash in the middle of a big product launch 🙃
- How to collaborate with a team of engineers to build a production-grade application that scales to millions of users
- … and so much more
And of course, there are tons of things I haven’t learned yet — and all the tantalizing things I’ll probably never learn about programming.
Ultimately, it’s okay, because the most important skill I’ve learned over the last two years is how to learn — the master key to learning and conquering any tool, framework or language I need.
This is all I ever wanted when I set out to go “learn to code,” and now I have it at my finger tips.
Why wouldn’t I use these skills to build my own products full time? The answer is simple: “why not.”
Life is too short not to experiment — and the time to see what value I can create through those experiments is now, while I’m young, driven, and the worst case scenarios aren’t really that bad.
As Leo Tolstoy puts it so eloquently:
“Once we’ve thrown off our habitual paths, we think all is lost; but it’s only here that the new and the good begins.”
There’s so much in the world of software that I’ve been exploring and hacking on —and I’m particularly interested in a few problems I’d love to tackle. I couldn’t be more excited to have the opportunity to go deeper into these problems with my entrepreneurial hat on.
Any experiment comes with the risk of failure — particularly high when it comes to startups since, after all, nine out of ten startups fail.
That said, I believe that the personal and career “risks” of taking time to build a startup idea are way, way lower than we’re lead to believe.
Particularly as an engineer with no major family obligations, the worst case scenario for me is that I crash, burn, and take a new engineering job a few months later. Starting salaries are higher than most other industries, and there are always more engineering jobs available than qualified candidates to fill them.
So yes, my startup ideas could totally fail. Or I could end up losing interest in my passions. Or I could get hit by a bus tomorrow. The list goes on.
Do I have control over any of these events from happening? If I try my hardest, are any of them my fault? Probably not.
If there’s one thing I’ve learned through the major transitions in my life — from moving across continents, countries, and cities, to becoming financially independent at 18, to hustling my way into Silicon Valley, to conquering my dream of becoming a programmer — it’s that uncertainty motivates me to succeed. In a way, it’s almost comfortable.
In my eyes, the only true failure would be not starting in the first place.
I spent the last two years building a strong foundation as an engineer and more importantly, finding myself — my passions, interests, strengths and weaknesses. The next stage of my growth will be all about taking that experience and creating something meaningful for the world out of it.
I love the saying by Sidney A. Friendman:
“You can achieve anything you want in life if you have the courage to dream it, the intelligence to make a realistic plan, and the will to see that plan through to the end.”
I’ve dreamt it, sketched out a realistic plan, and now it’s time I see it through to the end.
Now it’s your turn: tell me about your journey.
Have you ever felt unhappy with your day-to-day? What doubts keep you from chasing your dream — or what steps have you taken to overcome them?
Your story is just as important as mine. I can’t wait to hear it!