First published on Oct 23, 2022
A disclaimer: the following thoughts are certainly not intended as advice nor are they necessarily reflective of other companies of similar size. I have verified with other developers that many of these thoughts are commonly held but regardless everything should be taken as purely subjective.
My previous role was at a fairly small start-up: a three man engineering team, lots of creative control matched with extreme velocity and pressure to deliver features and get us profitable. It was exciting and our limits were constantly tested. It was my first serious job as a software engineer and I worked long hours to rapidly progress and help the company grow. Eighteen months later I was offered a great opportunity at a large Fintech with over 1000 employees, a higher salary, generous stock options and the ability to collaborate with engineering teams across the globe. I wanted to try out the 'real' tech world, the things I had heard so much about. I wanted to be surrounded by structure and other developers with years of experience.
This is undeniably going to be the most divisive issue. A big tech company often offers a big tech salary. A start-up will usually offer decent starting salaries to entice early talent though in my experience they are unable to match the larger companies in the long term.
A start-up can, in some instances, be extremely lucrative. If you are early enough to receive low priced options and the company goes on to IPO, you could be set for life. That is a very big ‘if’. I subscribe firmly to the idea that options and other benefits are icing on the cake. They are fantastic if luck falls in your favour but I like to work on the assumption that the salary is the primary deciding factor in regards to compensation.
Undoubtedly many will take issue with this and cite examples of people making millions from joining Facebook at an early stage or similar. I would personally prefer to use my consistent salary to invest and have a semblance of control over future wealth generation.
Start-ups are notorious for poor work-life balance. I liked that. I liked the pressure, I liked knowing that putting in 80+ hours a week could alter the course of the whole company. Would I do it forever? Not a chance, but I’m glad I did it at least once. It was a formative experience, a baptism of fire. I was thrown into the deep end of software engineering and had to learn to swim pretty quickly.
At my current role I have occasionally reviewed a PR or made some minor code change on a Sunday. Almost every time somebody has reached out on Monday morning to enquire why I was working. I cannot speak for every large tech company, but here we work our core hours; it is highly frowned upon to work anything more. We have hundreds of people working in engineering; if you feel that it is necessary to work beyond the core hours it's safe to assume something somewhere has gone wrong.
Unlike at a start-up, putting in a massive shift at a big tech is unlikely to make a significant difference. Perhaps you will deliver faster, impress a manager or get to move on to more exciting tickets but we have moved from a small boat to a cruise ship. Working a few extra hours is like furiously paddling trying to make it move faster. The scale means one person's extra effort will likely make little discernible difference. Is that a good or bad thing? It puts an end to insane work hours but also puts an end to the exhilaration of knowing you have the power to affect change.
Freedom, whatever that means, is always going to vary from company to company due to a boundless number of factors. A small start-up will oft-allow you to make engineering decisions, to follow paths outside of the norm and implement ideas that may not be immediately obvious. Even as a junior engineer you can have a level of freedom that inspires excitement.
At a larger, more established company, there are far more likely to be explicit rules and regulations. We use this database, we use this messaging system, we set up microservices like this, we deploy with this pipeline, these are our linting rules. There is a high chance that whatever feature you're working on will follow a very set pattern of something similarly implemented before. Of course there are still plenty of decisions to be made, but you are handed far less creative control as to what the feature may be, what technology will be used and how you will go about the implementation.
This sounds like I am firmly on the start-up side; I'm not so sure. Sometimes I want to turn up to work and implement a well defined ticket that has been through product, design and engineering managers and other times I miss turning up on a Monday and having no idea what the week holds, what features have been conjured up over the weekend and what new skill I had better start learning.
Startups are usually in unceasing feature delivery mode. There is finite time and very real deadlines so meetings are usually kept to only the essential. As companies grow, so does their propensity towards meetings. Decisions are made in larger groups, there are discussions between teams, standups are more formalised and structured one-to-ones with managers become mandatory. Not enough discussion and you might yourself at sea without a paddle. You are implementing at a rapid rate and having to make decisions that have not been discussed thoroughly enough to give you confidence which leads to both undue anxiety and wasted resources. On the other hand, it is disheartening to open your calendar in the morning and see only a couple of free hours of dev time spread thinly between meetings. As Paul Graham alludes to in a fantastic essay, “a meeting commonly blows at least half a day, by breaking up a morning or afternoon.”
You should try to be always learning. Both environments allow for it in different ways. Start-ups give you no choice but to be learning. It's constant, it's intense and if you don't know something you had better learn it fast. It keeps you on your toes and you can feel the growth. Big tech is different; the intensity is ramped down but the quality is higher. There is time, there is budget. You aren't learning to be able to implement something right now. A start-up forces you to learn, perhaps at detriment to the quality of learning, whereas a large tech company gives you the tools and budget to learn properly but with far less encouragement to do so.
Since joining a company with some level of tech credibility, I have had multiple people reach out on behalf of tech companies and offer to bypass several hurdles in their recruitment process. Working at a well known and established company is seen as a stamp of quality. FAANG takes it one step further and acts like a golden ticket to almost any other company. A startup usually allows people to get in on hustle and merit rather than a series of well defined checkboxes. They allow you to progress quickly and build an impressive resume which may lead to progression faster than in a larger, slower organisation.
Ultimately I am just one engineer who has worked at one start-up and one big tech company. There is no right answer as to start-up vs. big tech and there probably is never a ‘perfect’ fit. For me, the jury is still out; I see pros and cons for both sides. Right now I am enjoying the pace, the structure and the team dynamics. Will I soon hunger after the excitement and danger of early start-up development? Only time will tell.