Featured Whitepapers
- Java Deployments in an Enterprise Environment
- Challenges & Characteristics of Enterprise Continuous Integration
- Build Release Plans That Deliver Customer Value!
- Improving Traceability and Auditability Across the Development Lifecycle
- Requirements-Based Testing: Collaboration Through Traceability
- Strategic Quality Assurance - Steps to Effective Software
Upcoming & Recent Webcasts
|
Teams practicing Agile
Software Development value working software over other artifacts. A
feature from the release plan is not complete until you can demonstrate
it to your customer, ideally in a shippable state. Agile teams strive
to have a working system ("potentially shippable") ready at the end of
each iteration. Thus Release Management should be easy for an ideal
agile team, as agile teams, in theory, are ready to release at regular
intervals, and the release management aspect is the customer saying
"ship it!."
Agile teams work under the same constraints as other software development teams, having to address issues of maintenance and support, the need for external artifacts like documentation and training, and the reality that not every customer can accept change at the rate that an agile team can (in theory) deliver it. To attain the goal of a shippable product at the end of every iteration, an agile team must manage the flow of change from a customer, and maintain high discipline and good engineering practices. In the paragraphs below we will discuss how release management works in an agile project, and explain how even non-agile teams can benefit from applying aspects of an agile approach so that you can deliver value to your customers in a more predictable fashion. Agile Principles Agile Project Management Practices enable you to manage schedule risk in a project. In a sense, many are simply good practice:
An agile approach enables better release planning by combining planning discipline, which helps you to focus on the highest value work, and engineering (including SCM) discipline, which helps you to identify and fix problems early, giving you more predictability. Agile practices make shipping a release a decision that the product owners can make without worrying if the team will meet a date far in the future. The role of the agile team is to enable allow the product owner to make the decision on short notice if need be. Realities The IT Process Institute's report Change Configuration and Release Performance Study (full report costs $1,695 but the summary is available for free if you register) says that:
While the focus of much of the literature on agile methods is about single codeline development, 'Release Management' often refers not merely to managing a single release, but to the overall discipline and methods of managing multiple releases at the same time. There are all sorts of valid business reasons why you might need to support multiple releases. Maintaining multiple codelines doesn't always mean you're not being agile - particularly if each one of those is generating (or preventing the loss of) additional revenue. While it may seem that having only a single stream of development is very restrictive, in practice it can work surprisingly well. That generally means having to deal with a change or a fix where you first have to determine which releases need it, and then how to inject it into (propagate to) possibly multiple release streams. For these cases, agile teams can use a traditional Release Line approach, with an agile twist. An agile process also makes it easier to manage the disruptions to day-to-day development caused by bug fixes. The key to managing multiple release streams in an agile environment is to prioritize all the work for a team together. The product owner needs to decide how important a "bug fix" is compared to a feature. Agile planning techniques make the cost obvious. All teams, not just agile ones, work best in an environment where change is managed. When additional work is introduced mid-iteration, the performance of the team can suffer. The iteration approach of agile methods gives the product owner a choice when an issue presents itself: "do I fix this immediately, and forego feature work, or do I wait until the next iteration (2-4 weeks hence)." Laura Wingerd discusses some of the basic "rules of the road" for "channeling the flow of change in software development collaboration" in chapter 7 of her book, Practical Perforce. where she discusses the "flow of change rules" and the "tofu scale". The Tofu scale and change-flow rules/protocol are concerned with the relationships between codeline policies across the entire branching structure when it comes to making decisions about stability -vs- speed: One codeline's policy might make a certain tradeoff, but it is the presence of multiple codelines and how they work together, and how their policies define the overall flow of change across codelines, that is key to release management across multiple releases+codelines. These change-flow rules (which also relate to the Mainline pattern) advise us on exacvtly how and when to do this. The change-flow rules are also well aligned with Lean principles ideas of minimizing the form of waste known as "inventory" or "work-in-progress" - functionality that has been developed but not yet released. We have had experiences where applying an agile approach helped manage the flow of bug fixes. One team commented that their agile method involved a 2 weekly release cycle and they didn't need to rush bug fixes out - it had always been OK to wait for the next release. A key factor in the success of their development method was the trust that the rest of the organization had in the process - work got done (and released), and if a feature was scheduled to go into a release it almost invariably did. While agile teams pride themselves on their ability to be responsive, being agile does not mean being chaotic and undisciplined. Change has its cost, and agile methods provide ways of making the cost of change explicit. An agile project works best when there is some sort of rhythm for release cycles. Notice that we mentioned that a codeline is "potentially shippable." Whether or not to ship is a business decision. (Which is how it should be!) Even though the codeline is always supposed to be "potentially shippable" all throughout an iteration, the decision to ship (or not) occurs at the end of an iteration. This is important, and emphasizes that the rumors that agile processes are chaotic are not true. You need to plan your releases and iterations to align or you risk hurting the efficiency of the team. Agile Release Management Enablers They key enabling patterns for an agile project are
Once changes are committed an Integration Build serves as a gatekeeper for more exhaustive verification. The integration build is run on a build server that may be using some sort of Continuous Integration tool such as Anthill, Cruise Control or Team City. Since the exhaustive testing is run asynchronously from the development team, tests that you expect will pass will not delay commits. An agile team often has a discipline that a failed Integration Build is an "all Hands" even, thus ensuring that integration problems are addressed quickly. The combination of small commits, and frequent integration means that the cost of change is small, enabling rapid development. A Release Build and a Release-Line may seem like odd beasts to mention in an agile context. Release builds typically have a few extra requirements that aren't strictly necessary for all Integration Builds (see our our October 2003 article on "Build Management for an Agile Team"). And Release Lines are structured to have policies that limit change because you want to be extra cautious with released software. On the other hand, having a Release Line frees the Active Development Line to move forward and risk mistakes. Likewise, moving "almost ready to ship" code to a Release Prep Codeline means that new feature work can move forward, while still enabling the team to address integration issues that may come up in final testing. While an ideal agile team will not use a Release Prep Codeline, it is a very useful pattern in practice. Also the agile mindset is to think about what is possible, and decide whether or not to actually do something based on cost and relative value. Not to attempt improvements because the changes seem unattainable is an obstacle to improving your release process Most any team can benefit from incorporating some of what we call Agile SCM Practices into their release management plan. Common Questions about Agile Releases Like many processes that work, an agile approach to release management raises some questions. Here are some common ones, along with some answers. What does "deliver at the end of each iteration really mean? Being able to deploy or deliver working software at the end of each iteration is an agile principle. It is also a principle that many projects, agile and not, seem to treat as unreasonable. Let's talk about how you can think about this practice in a way that makes practical sense, and also address some common concerns people have about this idea. What if my customer can't accept changes every 2 or4 weeks? The fact that you have "Working Software" does not mean that you need to actually deploy it into production. The benefit of having software in a working state is that your can make the "release" decision at each iteration, as business needs dictate. Documentation, Integration Testing and the Meaning of Done Many organizations worry that they can't have a fully shippable release each iteration. There is documentation. One thing your team needs to decide on when adopting an agile process is what it means to be "done" with a feature for an iteration. When you are using a non-agile process, "done" may mean that you have a complete distribution package. This is an excellent goal for an agile team, and it is attainable, but starting out with this as your done threshold may end up frustrating you. Agile practices are an excellent tool for risk management, so consider what the riskiest parts of your application are: Is it documentation, or is it the software? A perfectly valid definition of complete software is:
There
are also ways that you can get closer to a completed documentation set.
While certain things, like final screen shots, may not be able to be
done until a product is "finished" there is much that you can do, such
as the basics of online help, overview documentation, etc. Part of the
challenge of adopting an agile approach is adopting an agile attitude.
The usual question one asks is to emphasize what is impossible. An
agile attitude is to ask what is possible. Brad Appleton is an enterprise SCM/ALM solution architect for a Fortune 100 technology company. He is co-author of Software Configuration Management Patterns: Effective Teamwork, Practical Integration, the "Agile SCM" column in CMCrossroads.com's CM Journal, and a former section editor for The C++ Report. Since 1987, Brad has extensive experience using, developing, and supporting SCM environments for teams of all shapes and sizes. He holds an M.S. in Software Engineering and a B.S. in Computer Science and Mathematics. You can reach Brad by email at brad@bradapp.net brad@bradapp.net Robert Cowham has been in software development for over 20 years in roles ranging from programming to project management. He continues his involvement in development projects but spends most of his time on SCM Consultancy and Training. He is the Chair of the Configuration Management Specialist Group of the British Computer Society, has a BSc in Computer Science from Edinburgh University and is a Chartered Engineer (CEng MBCS CITP). You can contact him at rc@vaccaperna.co.uk rc@vaccaperna.co.uk Steve Berczuk is a Technical Lead for an Agile Software Development consulting company. He has been developing software applications since 1989, often as part of geographically distributed teams. In addition to developing software he helps teams use Software Configuration Management effectively in their development process. Steve is co-author of the book Software Configuration Management Patterns: Effective Teamwork, Practical Integration and a Certified ScrumMaster. He has an M.S. in Operations Research from Stanford University and an S.B. in Electrical Engineering from MIT. You can contact him at steve@berczuk.com steve@berczuk.com .
Set as favorite
Bookmark
Email this
Hits: 8182 Trackback(0)Comments (1)
|
| Last Updated on Friday, 04 July 2008 10:22 |

Teams practicing Agile
Software Development value working software over other artifacts. A
feature from the release plan is not complete until you can demonstrate
it to your customer, ideally in a shippable state. Agile teams strive
to have a working system ("potentially shippable") ready at the end of
each iteration. Thus Release Management should be easy for an ideal
agile team, as agile teams, in theory, are ready to release at regular
intervals, and the release management aspect is the customer saying
"ship it!."

