I set out to write this article by interviewing 40+ engineers at companies of all sizes.
The main learning here was that organizational design and culture are a fascinating topic, and that they might be as important then company size when picking a job.
Let's say you're early in your Software Engineer career.
You're a competent programmer looking for a change in working environment.
You’ve got 4 offers from four companies at different stages.
All offers have “Software Engineer” as a title.
They even have the same job requirements:
- 2-4 years experience in a high level programming language
- Experience with modern frontend tooling
- Experience with designing and scaling REST APIs
- Experience with microservices based architectures
- Looking for a self starter, that takes ownership of projects
Are these the same job?
Which job should you pick?
My research is taking me towards how organizations scale in general.— Ferruccio Balestreri (@0xferruccio) August 25, 2019
But my post will focus on answering: “What is it like to be an IC at different scales? What’s the org size that fits with your goals?” pic.twitter.com/Ojz3nSkRka
There’s a lot of literature and blog posts around how to pass the job interviews, how to negotiate a great salary, but few people talk about the difference in what you’ll end up working on in the day to day.
Depending on the scale of a company you'll have to solve different problems.
The incentives and expectations on your output will also vary extremely.
So the answer to “Are these the same job?” is no.
The rest of the article will focus on answering “*Which company should you pick?".
An engineer's quest to find the right company size
A great proxy to understand what kind of work a software engineer will do is company size.
So before looking for work opportunities it's worth spending time understanding where does one belong.
Not doing this will result in getting positions that aren't a good fit.
Leading to bad morale, poor performance and unhappiness.
Let's start small.
The smallest unit in an organisation is an Individual Contributor (IC).
Around 7-10 ICs can communicate and work together without needing much coordination.
When you reach the 10-16 people mark its starts to get a bit harder to have in mind what each person is doing.
At this point teams are split in groups, with managers, that start reporting to C-Level.
In some organisations the EM is more of a tech lead, and the PMs and Designers report to PM and Design managers
The next level
As soon as you have 8-10 Managers it becomes harder for leadership to understand what's going on.
So another layer gets introduced.
Every time an organization adds a layer, we have a critical point.
Here's a table showing a breakdown of when this happens:
|📦 Size Name||👥 Engineer Count||🕸 Number of Layers|
|Mid Market Enterprise||64-512||3|
At each point we add a new layer of bureaucracy.
Bureaucracy means shittier communication and less nuance, but larger scale.
Companies like Render, Tandem and Al.ta Cucina
I have some experience in early stage companies and wrote a blog post about my most recent one.
Here is the best part of it:
- Direct Communication with the leaders
- You go from idea to feature in a couple of hours
- There's no political manoeuvring within the company. Very little careerism, people are just focused on doing their job well.
- No part of the development process is not your responsibility
- You're innovating and building something new, you don't have a lot of bug fixing or maintenance work to do
- You'll likely have to directly do some Customer Support work, which will increase your understanding and empathy with the problem you're solving for users.
- After interviewing you know who you'll be working with.
Here are the worst things:
- Unless you're disciplined you lose track of time because of work (forget meals, sleep and physical activity). Every hour of every day is work.
- You don't have much guidance or someone to look up to (which is also a good thing). You'll actively have to look for mentorship outwards.
- It's quite stressful
In this role you’ll make questionable choices around introducing new technologies you read about on Hacker News.
I once created a Rest API and called it using GraphQL queries 🤦♂️
Companies like Notion and Superhuman
I have a lot less experience with companies of this size, but talked with around 10 engineers about this and these are some key notes from our conversations.
The best parts of working at companies of this size:
- Leadership can still have a clear vision of what's going on
- There aren't many meetings at this stage and you know everyone in the office by name and know what they're working on
- Things are structured enough for long term planning
- The distance between your work and measurable outcomes is still very small
- After interviewing you know who you'll be working with.
Here are the worst parts of working at companies at this size:
- Bad leaders might be still be micro-managing and making decisions they shouldn't be making
- You won't have as much autonomy as you'd have in a smaller organization, and you won't have the resources and mentorship a structured company will have
- You'll have to find role models on your own and learn from them.
Resource allocation becomes a problem here. You might have to share a designer or PM with other teams, but things are still flexible enough that you'll be able to do their job.
Mid Market Enterprise
Companies like Intercom and Brex
At this stage there are three layers of management.
This is where work done on organizational design and culture starts to pay off.
This is where leaderships that micromanage crash.
There is enough work going on for you to not know about big projects.
It becomes important for teams to have clear KPIs and missions. Ideally each team here should have an exciting end goal.
The best parts of working at a company of this stage are:
- Mentorship and support become a formal part of work
- You start having the resources of a larger organization (eg. a content team that can help you define and refine your blog posts)
- Your work starts to become highly specialized, you'll have to proactively find time and space to work on things that aren't your job
- You'll most likely have very relaxed working hours, so lots of free time and holidays to grow as a person
The worst parts of working at a company of this stage are:
- If the company is well staffed you won't be wearing many hats
- A lot of energy will be spent on keeping up with what other teams are working on and coordinating
- You might have to work on getting rid of a lot of technical debt and cleaning up bugs things that you don't fully understand! If risk isn't handled properly this can be highly stressful. This kind of work is also less rewarding than creating something new from the ground up.
- You're likely not doing any customer support. In many cases you might not even use the product you work on a daily basis. You have to actively make an effort to get a better product vision and understanding, or be a code monkey (and perform poorly).
- After interviewing many times you won't know who you'll be working with, so your perceptions on how the people are might be wrong
If the organisation has a good engineering culture a lot of technical decisions will be made trying to reuse technologies that engineers are already familiar with. So you won't be working with the newest and shiniest tools.
Large Enterprise & Mega Corporations
Companies like Stripe and Pinterest
Currently I haven't had any interest or experience in working in an organisation like these, but I have many friends that work for companies like this.
Working at a large enterprise the best parts will be:
- You'll have a lot of benefits
- Most of your life and interactions within the company have been designed and thought about
- As the organisation is mature, and few people actually care about the company your working hours will be relaxed
The worst part will be:
- Everything you do at work as about “impact”, and the only thing that counts is your performance review. There's no human side of things.
- Your career path is planned from the top. If something is not within your title responsibilities you won't get the opportunity to pursue it. Or if you are, you won't get much credit for it.
- You have no idea of who your customers are, the only way you can understand the impact of your work will be reading data from dashboards.
- Leadership reasons about you as a fungible resource that can and will be reallocated and reorganised
- The people that interviewed you aren't the ones you'll work with on a day to day basis, so the risk of ending up in a toxic environment are greater
- As the stakes are high, your way of working will be extremely conservative and risk averse.
Depending on what stage you're at in your life, you can add this list of pros and cons when making a decision about what company you should join!
That being said writing this sparked a personal interest in organizational design, so I'll likely follow up with a blog post on that!
If you have some constructive feedback, or some comments feel free to reach out via email at “hi” at this domain. Or DM me on Twitter :)
Do you think a role in a great Mid Market Enterprise company would suit you? You can join me at Intercom, we're hiring!.
Alternatively if something else excites you I still might be able to help!
Thanks to everyone I've talked to when writing this. And special thanks to Tom McCarthy, Rory Hughes and Pietro Capece Galeota for reviewing drafts of this post.