Chiming in here with my 2c. There’s a lot of discussion going on here, so sorry if I’ve missed bits. I’m also a relatively junior developer, so keep in mind.
When I joined OpenCraft, the team was way smaller, the number of clients was less, and everything felt more manageable. It wasn’t long before I felt like I knew where everything was, where to find docs, what did or didn’t exist, which projects were next on the horizon, etc.
Since then, the company has grown massively. During the time, I spent most of my time focusing on a small number of projects, and quickly lost touch of what was going on in other cells or even other projects in the same cell.
Now, in the last month or so, I’ve been forced to spread out to other projects due to budget issues and lack of tasks. Never before have I felt so lost. I’ve studied and trained to do software development, but I’ve been having discussions about topics I thought was out of scope for what I was hired for and that I’m trying to learn on the fly: budgeting, prioritizing projects, sustainability, scheduling, new concepts like accelerated epics, management. And It’s not just me; whenever I ask questions about these topics, I’m met by multiple conflicting answers, confusion, links to partially completed documentation, etc… Something is really wrong.
I think we desperately need specialists now. Almost everyone should be a specialist of some kind. We can’t all be ‘I’ shaped specialists (do one thing only), but ‘T’ shaped specialists who are excellent at one thing but also with a breadth of skills for that bigger picture, and ability to work on other things if required. We need members who can dedicate most or full time to bigger picture planning, prioritising projects, managing and allocating budgets, etc. And they should be hired for those skills.
I think it was probably a good thing earlier on for everyone to be generalised and for everyone to know what was happening everywhere. It allowed for sharing the load, more redundancy (no chance of a specialist in X to be on holidays when X is on fire). But now, that isn’t really a problem. There are plenty of members so redundancy isn’t a problem. The company is also way too large for everyone to keep track of everything.
This sounds awesome!
In response to the comments about centralization and middle management: I’m not sure this would necessarily need to be the case. We already have roles for sustainability, epic management, sprint management, etc. so if a large subset of these roles were all taken by a single person, then they become a specialist, specialising in planning, prioritization, or whatever. They would be hired for taking on these roles, but not necessarily hired to be the ‘boss’ or ‘middle manager’ of a cell.
So it would remain the same as now - a collection of roles. In fact, why not make developer-related things roles as well? - ‘ops engineer role’, ‘full stack developer role’, ‘linux server management expert role’, ‘devops specialist role’, ‘aws expert’, etc. Then every member would be defined by their selection of roles and the percentage of their time that goes to each role. A ‘cell lead’ would take the sustainability manager, sprint manager, epic planning manager roles. A member who’s a dev and also likes mentoring could take ‘backend developer’ and ‘mentor’ roles. A devops specialist could take ‘devops’ and ‘ops’ roles. etc. I wonder if something like that would retain the decentralised flat structure, while allowing for devs to get on with dev, and experts in planning/management to ensure all that works smoothly?
We can still have decentralisation, but instead of a situation where ‘every member must know everything’, it could be ‘for each role or area of specialisation, at least N members must know everything’ where N is however high we want the bus factor.