Archive for February, 2011

Before I Went Agile

February 25th, 2011 by amonty

A New Language

As teams adopt Agile development methods, often a new sort of vernacular emerges. To those unfamiliar with Agile, it can sound quite foreign when these groups start rattling on about this or that. I thought it might be fun to list some of the phrases or activities that may have had an entirely different meaning before I went Agile.

Agile Terms Before We Were Agile

  • XP was just the operating system running on my parents’ computer that I was constantly fixing.
  • Scrum was something done on a muddy field by people much tougher than me.
  • The term waterfall evoked beautiful memories of hikes in Hawaii instead of painful ones of past death marches.
  • The idea of pairing with another co-worker was strictly forbidden by HR policies.
  • Similarly, playing  poker in the conference room was generally frowned upon.
  • The notion of sprinting for a week or more was insane.
  • An epic story was something like Beowulf or the Iliad.
  • Lean was my signature club dance move.
  • The words burn and chart were never used in a positive sense.
  • I wouldn’t have imagined sitting in a meeting with chickens and pigs.
  • The word agile was the last word used to describe a group of software developers.

How about you?

For more information on Agile terms, visit the Agile glossary.

Agile and SCM: Avoiding Agile Merge Disaster

February 22nd, 2011 by clucca

As you start to scale Agile, code and user stories have to be merged more often. Sometimes changes may flow from one organization to another. This means that you will need to take code from one team, merge, integrate, and test those changes. Each team needs to be able to work on their own schedule, and if multiple teams want to work on different sized iterations, they can. In addition, they can deliver changes as necessary and on a regular basis, independent of other teams.

The problem? With a traditional SCM system, you have to merge these code changes daily for them to be of any use. You also need to keep visibility into what stories are shared between teams, because delivering changes from user stories that are not completed in a sprint would be disastrous.

Typically, people use a single baseline or “trunk” methodology for this configuration, where changes from each team are delivered to trunk and pulled from trunk as their iterations complete.

Working within an Agile context, your teams will have to deal with these branching and merging issues. But there are other problems that can happen when you do not use this methodology:

  1. Delivering 2 weeks worth of changes only causes isolation among teams
  2. It’s too hard to pick out each user story as it completes from our codebase
  3. Figuring out the dependencies of those user stories is complex
  4. Being able to identify what changes came from each branch becomes impossible

This “baseline pollution” is not scale-able. You can get around this by using a development hierarchy, and manage the relationship of dependencies between branches. This could also include process steps such as integration, quality assurance and code reviews. A separate code configuration can be used for each step and user stories could simply be drag and dropped between each team, state or branch instead of a merge.

Doing this will increase code stability. As a completed user story is pushed from one stage to the next, the particular change as well as the system as a whole reaches a higher level of maturity. Many traditional SCM tools do not easily support or surface a development hierarchy. An Agile SCM system supports the creation of a hierarchy, gives visibility into the changes at each stage, and enables straightforward merging between stages.

Improving Coding Standards? Start with Customer-Reported Defects

February 15th, 2011 by AccuRev

Agile teams have a focus of interest- to continuously improve product quality.  In pursuit of this end result, teams often develop and agree upon engineering process changes. And when assessing potential process changes, stricter coding standards usually make the cut. Development teams are asked to abide by a certain set of guidelines in the code they generate, refactor, or maintain.  In practice, sometimes these guidelines end up improving product quality as desired, but sometimes these guidelines have no affect on quality at all. Or worse, sometimes these guidelines add only non-beneficial incremental overhead to the development process.

While most software engineers would agree that coding standards make sense in a group programming environment, the success or failure of these standards is a function of which standards are adopted.  While popular coding standards of the day or team members previous work experiences guide this decision making process, another alternative is for customer-reported defects to guide the process.  When a root cause analysis is performed on the customer defects incurred by a software development team over time, a few prominent causes are bound to occur again and again. These causes can usually be avoided through process changes, and in particular, through coding standard changes.

Customer-Reported Defects

Looking internally at our customer-reported defects over time, we certainly discovered some recurring technical themes.  For example, there were many defects that were associated with the programmer selecting recursion over iteration in cases where the problem depth was potentially unbounded.  The result was a sleeping time-bomb for stack overflow.

Another example, there were many performance-related defects involving the selection of an inappropriate container abstraction, given the expected data access patterns and performance requirements of the problem at hand.  (Your mileage may vary, but you get the idea.)  If the same group of people is evolving a code base over time, it is likely that over time, similar mistakes will be.

Agile software development puts the accountability for product quality squarely on the shoulders of the team.  Accordingly, self-managed software teams should be continuously evaluating possible improvements to the team’s behaviors, and coding standards is a great place to start.  If you want to avoid the pitfalls of choosing the wrong standards, take a closer look at your customer-reported defects.