A challenge that returns on every agile project is the strive for generalization instead of specialization.
In order to be able to deliver working software every iteration, impediments need to be removed quickly.
When your team is set up of specialists (dba, java programmer, UX designer, …), a lot of dependencies are created.
If the java programmer wants to start working on a user story, he has to make sure the dba has altered the database accordingly.
The UX designer has to wait for the java programmer to complete the business logic, …
And now I’m not even talking about absences, such as illness or vacation.
I believe it is worth the cost to start moving away from specialism to form a team of generalists with their own specialties.
This may slow down the team in the beginning, but over time, the team will be able to work more continuously and handle unforeseen absences quicker.
Off course everybody will still be the expert on one specific domain, but at least the others will be able to do the tasks as well.
You don’t have to worry about planning an equal amount of dba, java and UX work each iteration. Instead your focus can change to were it should be, delivering the features that have highest business value.
What about the bus factor? When working with specialists, this is often equal to 1.
Working with generalizing specialist, this is rarely equal to 1.
This often raises dilemma’s on a personal level:
- Should I give up my specialist status?
- What about my career plan? Isn’t generalization lowering my market value?
I believe most certainly not!
You will learn so many new things, become more complete as a software developer, have a broader perspective.
Software developers that have experience working in an agile team are desperately searched for. And that demand will only increase in the future.