As a software developer for 6 years, I've had a range of experiences with different teams, from negative to positive.
One of the best experiences I had was in a certain project team at a financial organization.
There were a number of factors that made the project successful, but I think the team structure was a key aspect of it.
To summarize:
We had developers who specialized in different aspects. 2 developers who were good at UI and 2-3 developers who were good at writing business logic and database interfacing code.
The code was strictly divided into Presentation, Business and Data layers.
Every developer had a basic knowledge of the whole system. Even if they weren't experts in everything, they had a general idea of how everything hung together and could write code in any layer if necessary.
Some tasks involved the developer in a whole vertical slice of functionality (involving work on all layers).
Other tasks involved just the area of the application that the developer specialized in (e.g. just a UI task, or just a database task).
I think this worked well because:
Developers were able to learn the whole system, and jump into a different layer if necessary.
Developers retained specialization, and if a developer needed help with something he wasn't familiar with, there was always a go-to person.
The architecture was rigid, but the people were flexible, as they should be.
Is there a formal term for this kind of team structure? Does it sound like an Agile/SCRUM arrangement?
(It didn't seem entirely planned at the time.)
Any thoughts?