I was reading an article about Agile development where the author proposes the concept of work slicing to divide and organize the work and tasks to be done. When following Agile development one of the most difficult things is how to break down the workload into small and concrete tasks that can be tracked in the product backlog of the project as the Agile process takes place.
I have done quite a few Agile projects following Scrum methodologies. There are people that spend a lot of time learning and preaching the theory of Agile development, but in my experience I have found that teams tend to fall into a hybrid approach, where the Agile development mixes a bit of Waterfall and other development practices. I’m not saying strict Agile development is not possible, or that one approach or another is better. I actually believe that it will always depend on the combination of team members, project type, client approach and company strategy. However, Agile hybrid approaches tend to be more comfortable for development teams and are more flexible to changes and constant evolution of business and technical requirements.
Anyways, I’m taking the tangent here. As I was saying, when teams start creating the backlog of an Agile project is when agile development and backlog tracking become difficult and confusing. In the article mentioned, the author proposes vertical slicing as opposed to horizontal slicing. Traditionally software development is approached by horizontal layer architecture, which encourages object oriented practices and separation of concerns. Now, when you try to think about a vertical slicing approach, it can be hard too, as the author also states. Getting feature A from start to end, without knowing how B and C will require and how they will affect A’s implementation can be hard and risky.
Now, I believe that this is not the case of advanced software development techniques. I think the author misses the recent years trends in software development where architects have been following a different approach: modular development. Any mature modern framework will provide you with tools to go further and use dependency injection, inversion of control, dynamic typing and reflection to empower modular development. When you follow a modular development pattern you basically focus on the core modules functionality which must be quite basic at the beginning and then you continue the implementation in a way where modules can be created, attached, interconnected or removed from the core modules without affecting other module’s functionality.
This is actually a fact, and has been the trend for a couple of years now. With .NET you have the Enterprise Library modular approach, the Unity Application block for dependency injection, several modular design patterns, and full blown solutions like MEF (Managed Extensibility Framework) and hard-core modular architecture techniques like PRISM. This type of approach fits Agile and Agile-like development approaches in the best way.
If you are into Agile development and want to actually work in practice with Agile methodologies, I encourage you to look into modular development patterns and frameworks. I can guaranty you that it will make your life easier and more satisfactory.