At 37signals, three is a magic number.
Nearly all new product work is done by teams of three people. A team of three is usually composed of two programmers and one designer. And if it’s not three, it’s two or one — not four or five. We don’t throw more people at problems, we chisel problems down until they can be tackled by three people, at most.
We rarely have meetings, but when we do, you’ll hardly ever find more than three people on a call. Any conversation with more than three people is typically a conversation with too many people.
What if there are five departments involved in a project or a decision? There aren’t. Too many dependencies. We don’t work on projects like that — intentionally.
What is it with three? Three is a wedge, and that’s why it works. Three has a sharp point. It’s an odd number so there are no ties. It’s powerful enough to make a dent, but also weak enough to not break what isn’t broken. Big teams make things worse all the time by applying too much force to things that only need to be lightly finessed.
The problem with four is that you almost always need to add a fifth to manage. The problem with five is that it’s two too many. And six, seven, or eight on a team will inevitably make simple things more complicated than they need to be.
Just like work expands to fill the time available, work expands to fill the team available. Small, short projects become bigger, longer projects simply because all those people need something to do.
You can do big things with small teams, but it’s a whole hell of a lot harder to do small things with big teams. That’s a disadvantage of big teams! Small things are often all that’s necessary. The occasional big thing is great, but most improvements come as small incremental steps. Big teams can step right over those small moves.
Three keeps you honest. It tempers your ambition in all the right ways. It requires you to make tradeoffs, rather than keep adding things in. And most importantly, three reduces miscommunication and improves coordination. Three people can talk directly with one another without introducing hearsay. And it’s a heck of a lot easier to coordinate three people’s schedules than four or more.
Three is all-in for us.
A new exciting case has landed on Elixir's web site: "Scaling a streaming service to hundreds of thousands of concurrent viewers at @Veeps", with @vinniefranco and @whatyouhide: https://t.co/GaubRx03WR
We also migrated off #nextjs to @elixirphoenix (on @flydotio) and have been loving it so far. Speed out of the box, realtime features, operational simplicity, all with no extra services/infra required.
@danielberg_ @flydotio@supabase To have a managed Postgres I think it's worth it. Another option to @supabase is @ElephantSQL . I'm using the basic plan and it's working well for me.
Elixir LiveView makes e2e tests SO fast. Remove the browser but still cover 99% of the logic under test.
Here's a synthetic test with 1000 cases running in ~3 seconds.
Each is interacting with multiple DOM elements, loading data, and saving a form to the DB.
#myelixirstatus
Language I dislike: Java
Language I begrudgingly respect: Go
Language I think is overrated: Go
Language I think is underrated: Elixir
Language I like: Ruby
Language I love: Elixir
Language I dream of writing in: Elixir
The pendulum swings again: in the past, web frameworks *were* one person. But once applications grew in complexity and JavaScript started playing a bigger role in them, it was no longer the case.
This growth in complexity was what drove me way from web-dev back then. [1/6]