Over a million developers have joined DZone.

Keeping Sight of the Bigger Picture

With an agile development approach, there is no big spec and no big design up-front. Scope is variable. Requirements emerge and evolve. Features can be added, changed and removed throughout the project lifecycle.

So, with this moving target, how do you keep sight of the bigger picture?

Although agile development is all about breaking things down - breaking things down into micro pieces and delivering on a piecemeal basis - it is also very important to have some overall guiding context.

From my perspective, this context comes in 3 major forms:
  • Business Context
  • Project Context
  • Solution Context

Business Context

What is the business vision? What are the challenges and opportunities from a business point of view? What are the business goals - short, medium and longer term? Who are the customers? Why do they buy, and what do they use the solution for? What do they like and dislike about the product? Who is the competition and what are their solutions like?

Without this over-arching contextual information, any product development team is working with a major disadvantage.

In my experience, development people can be quite innovative. With this information - if development teams have a real insight into the business context - people on the development team can be proactive. Without necessarily being asked to work on a problem, or without being asked to come up with an idea, solutions to problems and new innovations will come to mind.

Project Context

If the development team is working on a project, many of the things defined in a more traditional project initiation phase are just as important in an agile development environment.

What is the specific problem or opportunity that the project is seeking to address? What is the vision for the project? What are the project objectives? What is the scope (broadly speaking)? What is the likely cost and timeframe? What are the benefits and how will they be realised? Who will work on the project and what is the project structure?

The answers to these questions (and more, of course) give people important guidance. And that guidance is more important than ever in an agile development approach, because of the freedom to change things along the way.

With this guidance, the project team has some parameters to work within, and a clear understanding of the expected outcomes.

Solution Context

I'm a big fan of User Stories. I've written quite a few entries on my blog about them recently, and how to write good User Stories. I love the fact they are so small. So self contained. So manageable. It really does keep things simple. But what should you do before you get down to the detail of individual User Stories?

It is important to look at individual User Stories in context of the overall solution. So what artifacts help us to do this? There may be others, but here are some things I certainly like to see before getting down to User Stories on a Sprint-by-Sprint basis:

  • High-level Product Roadmap - broad timeline across the top, perhaps in months or quarters; highlighting key product features or milestones. Unlike a plan, a Product Roadmap is indicative and evolves as things change. This provides the team with some structure around Sprint Planning, with the Product Roadmap helping to inform the priorities of each Sprint and set Sprint Goals.
  • High-level Visuals - this could be wireframes for key screens, Creative visuals of a web site, a conceptual story board for the UI (User Interface), etc. Whatever form it takes, it's a high level outline of how the solution will hang together from a user's perspective. The visuals don't need to cover every single screen. They don't need to show every feature. And the solution may not look exactly like the visuals when it's finished. In fact it almost certainly won't. But it's a guide to what's intended at the outset, and should cover the main scenarios for an everyday user.
  • High-level Solution Architecture - this doesn't need to be a detailed design, but you do need some architectural guidance in order to understand key technologies, product structure and how the overall solution hangs together from a technical perspective. In my view, this can be an evolving picture, the kind of thing that is sketched on a whiteboard at the start of the project, with more details being filled in as the project progresses and as technical decisions are taken.


So, in summary, an agile development team might break things into small pieces and deliver incrementally, but this makes it even more important to have the overall context always in mind. My advice would be to keep key guidance artifacts (such as project objectives, product roadmap, solution architecture) high level, lightweight and visual, and stick them on the wall along with the team's User Stories and daily tasks.

Kelly Waters is Head of Web Solutions for Reed Business Information (UK), the world's largest business-to-business publisher. Implementing agile development has transformed his department of more than 90 people. Prior to joining Reed Business, Kelly was CTO for Glass's Information Services, Europe's leading provider of information to the automotive industry, most famous for Glass's Guide, the UK's bible for used car prices. Kelly has been in software development for more than 20 years. He is a well-known narrator of agile development principles and practices, as a result of his popular blog 'All About Agile' (www.allaboutagile.com). He is also a voluntary business advisor for Young Enterprise, an organisation that helps young people gain valuable business experience through practical projects.


Published at DZone with permission of Kelly Waters, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}