The Agile Team
To be able to implement in vertical slices and be efficient, agile teams are often composed of generalizing specialists. Generalizing specialists can work on multiple aspects of the system, though they have expertise in a particular area. This means that all work that touches the UI is not blocked if your UI developer is overly busy. It also allows a first pass, end-to-end implementation by a single developer. As a generalizing specialist, you are not abandoning the idea that there are no “experts,” but you are encouraging team members to learn about and work with other aspects of the code. Having such a cross-functional team not only reduces bottlenecks in the development process but can also improve code quality by increasing the number of people who work with—and thus implicitly review—code.
Agile Code at the Center
To be successful at agile, you need to consider the entire product lifecycle, from planning to execution. You also need to be very aware of the challenges that the difference in approach will present to teams that have a different initial mindset. In many ways, implementing agile technical practices may present less resistance than planning practices, and, as long as your organization wants to be more agile, working on the technical practices can help identify the other bottlenecks to agile.