thoughtbot currently consists of 14 developers and 5 designers. This summer, we organized into 4 smaller teams. We rotate teams every 2 months.
We started our third rotation this week, a moment which prompted the designers to create movie posters for their new teams.
The benefit of team rotations to clients is increased quality.
From the developer perspective, each time we've rotated, I've noticed the new folks immediately find code that drives them nuts. The existing team had built up a tolerance to some normally offensive code after seeing it every day.
In that way, the rotations keep the designers and developers sharp.
By seeing more projects, we're able to build better pattern recognition. What's the same on every project? How should Suspenders evolve? What's the boring stuff that we're doing frequently and can be extracted?
When a project continues across a rotation, we try to keep one person on the team for consistency. We do lots of pair programming right after the rotation. I've found a nice side benefit of those pairing sessions is I've learned as much about vim as the application under development.
We manage our sales pipeline so that we don't start new projects right before a rotation.
Another goal is for teams to work on as few simultaneous projects as possible. With our previous free-for-all, some people had to work on 3-4 projects a week. That's too much context switching. With the rotations, it's easier to schedule fairly and easier to keep the weekly projects down to 1-2 per team.
We think we've introduced a virtuous cycle that benefits clients, makes us stronger designers and developers, and makes everyone a little happier. We're only four months in, though, so if you see us around, ask us if it's still working.