Software Engineering, Project Management, and Effectiveness
In this post, I’ll share the model we used successfully for years in Microsoft patterns & practices to bake performance into an Agile Life Cycle.
One of the key challenges with building software, is how to bake quality into your process. Some teams try to do it all up front. Some try to do it all at the end. Some try to do it all in the middle. Some only do it when something bad happens.
The real key is to do some up front, more in the middle, and some in the end. Anything you do up front is about reducing high risk. So the up front exploration, testing, and spiking should concentrate on the significant usage scenarios that are high risk, or will be used often.
When it comes to baking performance into the life-cycle, teams tend to struggle with the how -- how do you actually do this in the real world? They especially struggle if they are using Agile methodologies. The reality is it’s easy, *if* you know the model. If you don’t know the model, you can be lost in the woods forever. We struggled early on, but found a groove that served us well, and we tuned and improved the approach over time.
Here is how we did Agile Performance Engineering in patterns & practices:
What's important about the figure is that it shows an example of how you can overlay performance-specific techniques to an existing life cycle. In this case, we simply overlay some performance activities on top of an Agile software cycle.
Rather than make performance a big up front design or doing it all at the end or other performance approaches that don't work, we baked performance into the life cycle. The key here is integrating performance into your iterations.
Key Performance Activities Here is a summary of the key performance activities and how they play in an agile development cycle:
The sum of these performance activities is more than the parts and using a collection of proven, light-weight activities that you can weave into your cycle help you stack the deck in your favor. This is in direct contrast to relying on one big silver bullet.
Integrating Performance into Iterations There are two keys to chunking up performance so that you can effectively focus on it during iterations:
In terms of stories, you should focus on both user and system stories. Stories are a great way to chunk up and deliver incremental value. Each story represents a user or the system performing a useful goal. As such, you can also chunk up your performance work, by focusing on the performance concerns of a story.
A performance frame is a lens for performance. It's simply a set of categories or "hot spots" (e.g. Caching, Communication, Concurrency, Coupling/Cohesion, Data Access, Data Structures / Algorithms, Exception Management, Resource Management, State Management). By grouping your performance practices into these buckets, you can more effectively consolidate and leverage your performance know-how during each iteration. For example, one iteration might have stories that involve caching and resource pooling, while another iteration might have stories that involve data and storage strategies.
Together, stories and performance frames help you chunk up performance and bake it into the life cycle, while learning and responding along the way.
For more information on performance engineering, see patterns & practices Performance Testing Guidance for Web Applications.
You Might Also Like
This is a great inspiring article. I am pretty much pleased with your good work. You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post.
This is such a great resource that you are providing and you give it away for free. I love seeing websites that understand the value of providing a quality resource for free. It is the old what goes around comes around routine.