We've got a new project going on, and at the moment developers have been split into two teams, team A and team B. This project has 2 parts to it which require development throughout the development stack. Very simplified sample of our stack shown below:
Each part of the project requires development across the entire stack, so I would typically expect a full stack developer approach which is how we have been breaking down our work within team B, designing and working out the interactions between different parts.
I've recently learnt however, that team A want to be in charge of certain parts of the stack, and they are proposing a divide between the two teams, where the Data Abstraction Layer (and putting content in the Data layer) is handled by themselves with no development from Team B. The divide would look something akin to this:
To me this feels very un-natural. Each team has different distinct objectives and timescales to achieve these on, but Team B will have a dependency on Team A to implement features. The proposed solution is that common interfaces are defined up-front (there is probably a 2 year timescale on the project so they could be numerous). Team A will then develop the required bits to these interfaces early on despite having their own set of goals, while Team B stub out all calls for the immediate short term so they can progress.
I have concerns about this approach regarding:
- Interfaces may change and Team A may not have the bandwidth or time to accommodate changing requirements.
- Bugs in Team A's code could prevent Team B progressing, and again they may not be the priority to fix these due to Team A having a different prioritization queue.
- Lack of knowledge spread across the teams - Team B may not fully understand what goes on under the hood and may make poor design decisions because of this.
It has been suggested that many companies in the industry have sub-teams and must be able to handle this. From my understanding, generally teams are either split how I initially expected (Full Stack) or by breaking up the technology stack like below:
So I'm interested in knowing what the rest of industry is doing. Are most splits vertical/horizontal? Does a diagonal split make sense? If a diagonal split were to occur do my concerns seem valid and is there anything else Team B should be concerned about? To note I'm probably going to be held responsible for the success or failure of Team B.