Today was my last day at Andreessen Horowitz.
I feel deeply fortunate to have worked with some of the smartest people in technology — people like Marc Andreessen, Ben Horowitz and Chris Dixon among others — and to have learned so much from them while serving the a16z mission of helping entrepreneurs reach their dreams.
So why am I leaving? The answer might surprise you: I’ve decided to become a software engineer.
This isn’t the typical choice for professionals with my background. You might be thinking I’m crazy, or even a little foolish. But before you jump to any conclusions let me explain why this is a great move, and share some of the inner journey that lead me to depart from a track record of high-level finance positions to jump headfirst into the world of engineering.
The story begins with the “obvious” choices for someone in my position, and my reasons for not wanting to pursue them:
After many conversations with HBS and GSB grads, it became evident to me that business school is less about the learning experience and more about building a strong professional network. In my case, I am already fortunate enough to have one of the best networks around: Andreessen Horowitz.
Even if this weren’t the case, the main problem with business school for me is the sectors it leads to: consulting and finance. I know I don’t want to go into consulting, so why should I spend $200K and 2 years of my life on an MBA when I’ve already gained the education and network it would offer me through real-world experiences?
This question is a little trickier to explain away. I’ve had a few very interesting opportunities come up during my time at a16z, including roles like Head of Growth and Head of Biz Dev/Operations, yet I’ve turned them all down. While they were exciting roles, I was yearning to do something more technical.
The thing is, my involvement in finance after graduation actually came about because of the opportunity I got to join Goldman Sachs, in spite of my degree being in Industrial & Systems Engineering.
Within a month of Investment Banking, I quickly realized that I didn’t want to pursue that career path for the long term. While fascinating, it didn’t capture me the way engineering had during college. Regardless, finance didn’t let me go so easily; the chance for a position at a16z came up, and I knew it would be a mistake to pass up.
Fortunately, all this leads me to where I am today: at the end of a successful experience in finance and finally ready to get back to engineering.
I considered graduate school very seriously, particularly given the many programs in Computer Science, Data Science and Machine Learning available at great schools like Stanford, UC Berkeley and MIT.
I did a lot of research on various Computer Science programs at Stanford, UC Berkeley, MIT and others. Eventually, I decided that I didn’t have the patience to spend many months studying for the GRE and completing applications and then waiting another two-to-four years to get a degree. I would much rather use that time to learn these technical topics through real world experience. I simply don’t believe that a degree is the only way to get into a new field.
Now, you might be wondering why I wouldn’t just follow my major and go into Industrial & Systems Engineering, rather than diving into the entirely new field of Computer Science. And honestly, if I’d known any better in college I would have declared a Computer Science major as soon as possible.
The reason I didn’t is because, when I was younger, my idea of what a software engineer does was completely outlandish. I imagined dimly-lit sweatshops filled with unpopular nerds, returning home to their parents’ basements after a long day of staring at screens and writing code. I didn’t see software engineering as something for creative, passionate people. Simply put, it wasn’t for me.
Even my mom was against me doing software engineering. Like every typical Indian parent, her dream was for me to become a doctor.
Arriving at college and meeting actual Computer Science students completely changed my assumptions about software engineering. I started dabbling in Computer Science by taking a couple courses in C++, and to my surprise I really enjoyed them. But I was too nervous about switching majors in Junior year to pursue it head-on, and anyway I was enjoying my Industrial & Systems Engineering classes enough to convince myself to take the “safe road.”
In summary, I’m not one of these programmers who’s been tinkering with computers since she was a kid. I wasn’t “destined” for Computer Science — my story is a little different.
My story started after graduating college and moving to Silicon Valley, the tech capital of the world, where I found myself surrounded by some of the best engineers in the business. I started to learn about the things they worked on and the problems they solved, and it blew my mind. I became fascinated by Computer Science topics like Machine Learning, Computer Vision, AI, Robotics, and Knowledge Representation, and was reading everything I could to learn more about them. I reached out to software engineers, data scientists and machine learning researchers to pick their brains and learn more about what they do day-to-day, and what I learned was all incredibly exciting, and gave me immense respect and admiration for them in the process.
It was only natural that before long I wanted to become one of them.
How does a computer compile code? How does a programming language get created in the first place? How do you build machine learning algorithms What makes a “good” systems design versus a “bad” one? How do great digital products get built? I began my journey into Computer Science with an endless number of questions like these. Along with these questions came the need to learn code. So I went for it.
I distinctly remember the first time I made an attempt to “learn code.” It was winter of 2013 and I was home with my parents and siblings for Christmas. My first step was a day spent researching what language to start with. After stumbling through lots of forums and blog posts, I settled on Python. I picked up “Learn Python the Hard Way” by Zed Shaw and started practicing. Sadly, the experience only lasted two weeks. It was hard, uncomfortable and frustrating and I gave up too early.
“Who likes this stuff anyway?” I thought to myself.
Exactly a year later my interest in learning to code reappeared. I convinced myself to give it another try, and this time my resolve lasted twice as long: one month. Unfortunately, I had just started a new job and was struggling to find a livable work-life balance. Coding is unlike picking up a new hobby, like dancing or yoga, that can be acquired casually. Few people find themselves saying “I’m going to code and take my mind off work.” I hadn’t yet reached a high enough comfort level with the basics for the nitty-gritty aspects of coding to become fun. Once again I set it aside.
“I’ll do it later on when I’m more settled in at work,” I thought to myself.
I wasn’t just struggling to reach my goal — I was failing. Coding stayed on the back burner for another year while I struggled with negativity, convinced the only thing I could excel at was repressing my feelings of self-hate. Yes, self-hate. I was ashamed. If 18 million people (according to IDC) in this world can do it, what the heck was wrong with me? Why couldn’t I? People tell me I’m smart all the time, but I was convinced they were wrong.
I started to become envious of every programmer in the world, jealous of anyone who knew how to “speak code.” I even cried to my boyfriend about how I wished I could help him code the app we’d been dreaming up together. This went on until one day the desire to learn to code was simply unbearable.
In the end, it took reaching the emotional breaking point to get me over the initial hurdles that had beat me before. It was 5am and I’d been running on the treadmill for an hour, turning over new approaches to my coding dilemma in my head. Suddenly I had an epiphany: feeling bad about coding was making me miserable, but feeling guilty about it wasn’t changing anything. I had to just either do it or forget about it.
I decided I’d stay home from work that day and hit the books. This time the momentum took hold, and after one week of nonstop tutorials and online courses like CodeSchool and TreeHouse I created my first website with HTML/CSS.
Looking back at it now, the product seems rough, hard to maintain and update and the spaghetti code is embarrassing. I recognize how much more modular, maintainable and better structured it could be written if I were to re-build it from scratch today (I do plan to rewrite this as one of my weekend projects). However, the point isn’t what I built in that one week, or even how well I built it. The point was to actually make something using code.
And I loved it.
Driven by the enthusiasm of the mini-project, I worked through late nights and unexpected challenges, yet it never once felt like “work.” I loved every minute — breaking up the project into chunks, thinking about how to design the project, figuring out what tools and libraries to use — and best of all, I loved that my brain would hurt as I tried to figure out how to get the code to work in the way I wanted it to. I finally understood why people become so passionate about coding. Programming lets you be a creator, and it’s an art as much as it’s a science. I had been doing it all wrong this whole time — I was approaching programming as something I needed to learn, and a skillset I needed to have, which made it feel like a task. But this project helped me realize that programming is not just about knowing how to code, but rather about creating something you care about and something that you want the world to see. Programming is liberating and empowering, and it enables you to create. The sparks were flying and I was fascinated.
I continued to learn on nights and weekends. Soon enough, the only thing I could think about was code. Everything else felt like a distraction. I would hold onto coding problems that I got stuck on the night before in my head and explore it during the day. Then I’d rush home from work and code a few more hours at night again. This lasted a few weeks before I finally said to myself,
“What if I could just do this all day?”
It was at this point that I decided to stop dabbling and commit myself full-time to coding, and it was the toughest decision I’ve ever had to make. Andreessen Horowitz is an incredible place to be and I knew I was leaving a lot behind.
Needless to say, my mom is completely against it. She thinks I’m absolutely nuts for leaving an amazing job and using up all of my savings to do something that I have so little concrete experience with about. I’ve even had a few people with more experience in the industry tell me it’ll be tough to get a job at Google or Facebook without a CS degree.
Sure, I don’t have a CS degree from Stanford or MIT. Sure, I might not get a job at Google or Facebook. But whether or not I get into Facebook or Google is not the point of why I want to do this. My goal is to genuinely learn. The road map I have in mind looks like this:
- Figure out what I like developing on the most: Front-end vs. Back-end, Mobile vs. Web, and what application areas I find most interesting: Machine Learning, Artificial Intelligence, Robotics, Computer Vision, etc.
- Get really good at it
- Use those skills to change the world. That could mean building a world-changing company or something else entirely.
So yes, I might not have the CS degree from Stanford, but I will as work hard as humanly possible to supplement the degree I don’t have by gaining real-world experience building real-world products. I realize that as I’m starting out some recruiters and hiring managers will still disregard me for not having a CS degree, but that’s OK. I’m confident that I will find at least one person who is willing to trust me by giving me a chance to prove myself, and fortunately that’s often all you need in the tech world. I’m willing to start from the bottom and work my way up, just as I did in finance.
As next steps, I’ve chosen to pursue a 12-week coding bootcamp in San Francisco called Hack Reactor. This will accelerate my learning and help build a strong foundation, and also allow me to get a few projects under my belt, at which point I’ll go out and recruit for a developer role.
I know this will be a tough battle. The honeymoon phase of “learning to code” is over. I’m getting into deep computer science topics like algorithms and data structures and it’s only getting harder. Hitting walls as I learn new things is uncomfortable and frustrating, and I often feel completely lost. Sometimes it takes hours for the walls to come down, sometimes days, other times weeks. I lose confidence and question my competence. In the chart below, I’m right at the beginning of the “inner contradictions” phase:
But this time, I love all these feelings because they mean I’m growing, learning and getting stronger. With enough persistence, I will get better at managing them. I will grow thick skin and learn to enjoy the struggle even more. As long as I keep pushing at these walls, they will eventually give way to me. After all, this isn’t Rocket Science, even if it feels like it sometimes.
The craziest part of all this is that I know there’s a chance I might end up not even liking software engineering in the long run — or that I might not reach the high level skill set I desire — or worse, that I might end up not liking it and being a bad software engineer. Honestly though, I don’t consider any of these outcomes as “failing.” In my mind, I’m just taking another chance in life, taking one step closer to changing the world.
So, here’s to taking another chance in life and reaching for more. I can’t promise you that I’ll end up being the best software engineer, but I can promise you that I’ll learn a ton and be better than what I am today. I can promise you that I won’t “fail” — I won’t let that happen.
Now it’s your turn. Find the thing on your back burner that’s upsetting you and take the first step.