As I mentioned in Don’t Miss Deadlines, an important key to delivering on time is to tackle the tasks that have cross-team interaction first. More broadly, this is referred to as vertical slicing or vertical integration. While there are some very specific concepts to vertical slicing, I like to stick to the general idea: for any feature that touches different sections of code, different teams, or different physical components, define a minimal, bare bones end-to-end operation and implement that first so that it is operational. Then build out the features horizontally. Any issues, especially issues that necessitate a change to design or architecture, almost always are found in the linking between the disparate components. The team will be much more likely to succeed and deliver on time if these major issues are identified earlier in the project.
Vertical slicing sounds easy in concept, but it is not. As a team lead, you must really push the various teams to aim for that initial deliverable, that initial vertical slice. Take for instance a new feature that has components A, B, and C that need implementation in the database layer, business logic layer, and user interface. The standard approach would be to complete components A, B, and C for the database layer, while in parallel completing components A, B, and C for the business logic layer and again in parallel for the UI. Each layer conforms to a spec and so when you glue all pieces together, everything “should just work”. Instead, for vertical slicing, finish component A end to end first. Then work on component B, followed by component C. Working for a vertical slice will likely be less efficient, it will create waste, to complete a vertical slice first. Sometimes there will even be portions of code that are written solely for the vertical slice that will then be thrown away. Thus, it’s up to the team lead to use their experience and common sense to define how the vertical slice is carved up. Personally, I have found the initial vertical slice is the most important, after which tasks can be worked on horizontally. In the above example you could finish component A end to end (get the all important initial vertical slice), followed by component B/C completed together rather than finishing B end to end before working on C. Each project will be slightly different.
While the initial, common sense instinct is to break up tasks horizontally by component, because this is often how teams are organized, an initial vertical slice is an important milestone to identify issues early and to achieve working features. Vertical slicing is a natural result of following agile methodologies and when a vertical slice can be demoed to a customer and an issue is identified early, you’ll realize quickly the value of vertical slicing.