July 4th, 2024

The magic of small engineering teams

Small engineering teams at PostHog, a startup, operate autonomously in 15 groups, focusing on specific tasks. Teams have leaders, encourage collaboration, and prioritize individual impact, despite tradeoffs like potential overlap.

Read original articleLink Icon
The magic of small engineering teams

The article discusses the benefits and structure of small engineering teams at PostHog, a startup aiming to maintain agility and innovation as it scales. The company organizes its 47 employees into 15 small teams, each focusing on specific products or functions. These teams operate autonomously, running their own sprints and making decisions on features without external control. Each team has a leader responsible for performance, and team members are encouraged to take ownership and collaborate across teams. The small team structure aims to maintain a flat hierarchy, with minimal management layers and a focus on individual impact. Despite the advantages, the article acknowledges tradeoffs such as potential overlap, fuzzy ownership, prioritizing speed over seamlessness, and the need to hire individuals who align with the team's working culture. The company emphasizes clear communication, goal-setting, and flexibility within the small team framework to ensure efficiency and productivity.

Related

Software Engineering Practices (2022)

Software Engineering Practices (2022)

Gergely Orosz sparked a Twitter discussion on software engineering practices. Simon Willison elaborated on key practices in a blog post, emphasizing documentation, test data creation, database migrations, templates, code formatting, environment setup automation, and preview environments. Willison highlights the productivity and quality benefits of investing in these practices and recommends tools like Docker, Gitpod, and Codespaces for implementation.

A dev's thoughts on developer productivity (2022)

A dev's thoughts on developer productivity (2022)

The article delves into developer productivity, emphasizing understanding code creation, "developer hertz" for iteration frequency, flow state impact, team dynamics, and scaling challenges. It advocates for nuanced productivity approaches valuing creativity.

Bad habits that stop engineering teams from high-performance

Bad habits that stop engineering teams from high-performance

Engineering teams face hindering bad habits affecting performance. Importance of observability in software development stressed, including Elastic's OpenTelemetry role. CI/CD practices, cloud-native tech updates, data management solutions, mobile testing advancements, API tools, DevSecOps, and team culture discussed.

The magic of small engineering teams

The magic of small engineering teams

Small engineering teams at PostHog operate autonomously, focusing on specific products or functions. Each team has a leader, encourages collaboration, and aims for a flat hierarchy to enhance individual impact and innovation. Challenges include communication management and hiring alignment.

Link Icon 30 comments
By @psim1 - 3 months
Counterpoint: Being on a small team in a large organization sucks.

In a large org, small teams have no weight. Actually, we have wait - we have to wait for everything: devops resources, marketing resources, even infosec resources. We are too small to notice, not important enough to get quick attention (never mind that our small team's product is profitable).

By @rco8786 - 3 months
I'm a fan of small teams also - but slowing down as the company scales is unavoidable.

> Startups ship more per person than big companies – everyone knows this. But how do you retain that advantage as you scale?

You can't! Not really. If you could, we would see companies doing it but...we don't (barring some yet undiscovered engineering process).

Everything you ship, by definition, has an ongoing maintenance cost. The more you ship, the higher your maintenance burden. Over years, this grows and grows. Output (as defined by "products shipped") per engineer must go down, because more and more engineers must be dedicated to maintenance work.

Now, we've gotten really good at disguising maintenance work as product work/shipping things. But it's not reality. Even this post makes this mistake by referring to "data warehouse" and "analytics" as "products". But customers don't care about your data warehouse or your job pipeline.

> Right now, for example, we're in the process of scaling support by moving our support engineers out of the customer success team and into a new customer comms team.

This is not product work. This is maintenance, and is a literal example of the type of thing that larger companies have to do just to maintain their existing products and contributes to lower product output per engineer.

By @hdhshdhshdjd - 3 months
I think the inflection point between “startup” and “bureaucracy” (which is not a bad word, just a term for organizing people) is role specialization.

Early stage everybody wears 10 hats, work is distributed and prioritized on a day to day basis.

Once you have dedicated people or teams for task domains then the whole thing shifts to having a need for bureaucracy.

You can slice the number of pizzas anyway you want, but imho once people have a “this is/isn’t my job” mentality (which again, is not a bad thing), you really need to focus on role boundaries and coordination. But the “startup” part is in the rear view.

By @r0ze-at-hn - 3 months
The author is writing about the common story of how to grow and scale. Each team gets a product, spinning off teams, etc. What if like most products there is a ramp up period where you need a full team (or teams) and then a few years later the product needs at most a fraction of the people to maintain the product? All of these people are going to "do stuff" because they are paid to do stuff further increasing the maintenance burden. You run head first into the common problem of:

"I have 1000 engineers and I can't get anything done!"

In the worst case the CEO solves this by doing lay offs. Been thinking about this problem for over a decade, making effective engineering organizations that can not only grow, but change shape is difficult, but can also be very rewarding when done successfully.

By @crop_rotation - 3 months
Small teams work very very well if the team is full of competent people. Such a small team will execute much faster. The problem is that if you need to do more work at some point a small team won't be sufficient and you will end up hiring more. And as you hire more you will inevitably have quality dilution. Both communication in large team size and hiring issues make large teams much less effective.
By @habitue - 3 months
This is interesting, because at 47 people they're in transitional scaling. Like they've had to solve "too many teams for the CTO to manage directly" but not "too many teams to align effectively".

At 15 strong self-directed teams, you can have a few teams focused on the high level directives, and a few entropy repair teams that mostly self-manage.

The way to think about it is maybe like homeostasis. Self-directed product teams will implement new features, fix bugs, and generally keep the thing on track, but the efficiency drops off as the feedback mechanisms of talking to customers reaches equilibrium.

To mix metaphors, a leadership team creates a kind of current flow in that system. When you're small you can go to each of those teams and ensure that current flow is happening.

But at a larger size, that doesn't work. You have to engineer and carefully craft the feedback mechanisms the teams are working off of to induce that current. This is a hard problem, but it's where things like minimum attrition policies, OKRs, etc spring from: leadership trying to have a policy that induces current.

By @whoknowsidont - 3 months
Corporations are mostly just job programs. Most companies do not actually need anywhere near the number of people they have employed to function.

The reasons why small teams work is because the number of communication channels go down, and you spend less time simply talking about the work and actually doing the work.

By @malfist - 3 months
The whole section on managers rubbed me the wrong way. Team leads aren't managers and thus aren't responsible for onboarding, not communicating up the chain about perfomance, but is Responsible for performance of individuals on the team. And the phrasing about managers mostly care about happiness and team leads don't, makes me think this place might be very toxic to work for. Reeks of "brilliant jerk" acceptance and accountability without authority.

It also feels rich to have a 47 person company tell you they've figured out the secret sauce of people management and team formation.

By @arjunlol - 3 months
This was particularly bad at Meta pre-efficiency push Zuck. There was huge bloat that was counterproductive. Empire builders were incentivized by promotions based on the size of their orgs.

One thing the article didn't mention is how crucial it is for a team to have focus and to ruthlessly prioritize. It's easier for bigger teams to fall into the trap of doing "busy work" and people fighting for scope on their performance reviews. This is the worst possible outcome for company and employee where you have work driven by optics vs value.

By @bogdan-lab - 3 months
At large scale, when your company developed a significant tech debt (~1mln lines of code), you will especially value people who understand what is going on in all that code. I am afraid, that with smaller teams "renewing teams" will be too quick for new joiners to grasp what is going on. I mean, everyone from "old" team will leave before newcomers are ready to own the product.
By @binary132 - 3 months
Buried lede: software engineering doesn’t scale.
By @goosejuice - 3 months
but it has worked best for our company with these rules

Sharing is good, but as others have pointed out, folks publishing such things could use a bit more intellectual humility. At this point perhaps authors just expect others read it as opinionated anecdotes.

Typical thought leader dogma aside, using pizza as a metaphor for team size has always been silly to meaningless.

By @ttyyzz - 3 months
I have to disagree with the "2 to 6 people" - even for small projects I feel like 4-6 people is great. This way you can ensure that everyone has a “tandem” and e.g. It's not just a frontend developer doing some mischief that someone has to clean up afterwards :D
By @swader999 - 3 months
4-6 is ideal, over 6 people and the communication and coordination overhead starts to cost too much.
By @siliconc0w - 3 months
4-6 is reasonable but for I feel 5-8 is a bit more sustainable to add some redundancy- though that should include a technical lead who also serves as the manager (50-50) and ideally a product/program person who can maybe float between teams. It's also important that everyone is using the same standardized toolkit and shared infrastructure so each team doesn't invent their own ways of working or tooling. Some flexibility and experimentation is good but it should be clearly segmented until it's clear the innovations are worth the adoption and maintenance costs of both the 'new' and now 'legacy' system.
By @jmward01 - 3 months
In a nutshell this is all because of math. Scheduling is NP complete and the only good algorithm we have is divide and conquer. Team size generally matches task size and tasks should be small enough so that all options can be effectively explored in order to find a (local) optimum solution. Larger teams generally mean larger problems which mean the exploration space can get too big to effectively explore before time runs out. On big teams with big problems you eventually have to ship something so you are forced to pick the option you are currently exploring which may or may not be good. The only time this really isn't true is when the solution is standardized so that the main blocker is just 'doing' the solution and not finding it. (An assembly line is probably a good example of this).
By @drewcoo - 3 months
> Startups ship more per person than big companies – everyone knows this.

Startups can quickly change alignment to make the company work. They can throw more spaghetti at the wall to see when it's done.

> But how do you retain that advantage as you scale?

Once the company figures out what works, you'll want to put people and processes in place to keep it working. That means bureaucracy. That slows change. Intentionally.

In big commercial kitchens no one throws spaghetti at the wall. That's waste.

By @xorcist - 3 months
This could be put more succinct: Trivial problems are trivial.

Of course you can keep splitting your teams when you are delivering a well defined product to customers. You could probably also have not split those teams. 50 people is trivial to manage, you could all meet in a room, should you have kept them geographically close. You may even have succeeded despite neutering those teams into triviality. You simply don't know.

Try doing something even slightly more complicated: Build a bridge. Or run a hospital. Or even a pension fund. Or just a software company with a lot of products. Those nice trim teams would quickly run into the brick wall of human communication.

That's the tough part of any organization. And we as a society needs to organize on large scale to get the important things done, unfortunately. Getting the easy things done is not enough.

By @osigurdson - 3 months
I never really understood the "pizza" metric. Why not just state the range instead?. Two pizzas can "feed" a lot of people (perhaps 16 - 20 even) if they aren't very hungry, aren't very big or aren't very young.
By @hartator - 3 months
> Startups ship more per person than big companies

Are they?

Apple revenue per engineer is $2.4M. It seems hard to beat.

By @mp05 - 3 months
>> Small teams are effectively one-pizza teams, as opposed to the two-pizza teams idea popularized by Amazon.

They don't know how much pizza I can throw down, especially when the company is paying.

By @angarg12 - 3 months
> Startups ship more per person than big companies – everyone knows this. But how do you retain that advantage as you scale? Our answer is small teams

> Right now we're 47 people

I'm sorry, but you haven't solved scaling small teams.

By @greatest69 - 3 months
Small engineering teams are usually because there is no architecture team and the organization is “not yet mature enough” or their IT management sucks. Also this is marketing for consultants.
By @flappyeagle - 3 months
For a product like PostHog this might make sense. But YMMV.

Their product is a collection of micro products which is pretty unusually especially for a company at their stage and size

By @Scubabear68 - 3 months
A 47 person company with 15 teams sounds like a nightmare to me.
By @shishy - 3 months
Is this similar to single threaded owner (sto) models? I'm curious how they handle things like career management and promotions but this structure overall seems great
By @esafak - 3 months
Left unsaid is that smaller teams mean more hierarchy. You're not getting something for nothing.
By @jWhick - 3 months
man posthog is one of the shittiest companies there is out there.
By @skywhopper - 3 months
God, I hate the pizza as a unit of team size. It tells me nothing.