Back to The Psychology of Agile Software Development

Interpersonal Patterns of Agile Software Development

Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice. --A Pattern Language, p. x
Agile software development teams value individuals and interactions over processes and tools. This simple value, when embraced by a team, has people interacting more frequently and intimately than they may have previously been accustomed to. This pattern language can be used to handle some of the interpersonal challenges that Agile Software Development presents.
You find patterns by looking at what people do, observing things that work, and then looking for the "core of the solution." --Patterns of Enterprise Application Architecture, p. 10

Always remember that every pattern is incomplete and that you have the responsibility, and the fun, of completing it in the context of your own system. --Patterns of Enterprise Application Architecture, p. 13

All human activity is subject to habitualization. Any action that is repeated frequently becomes cast into a pattern, which can then be reproduced with an economy of effort and which, ipso facto, is apprehended by its performer as that pattern. --The Social Construction of Reality

In a town where buildings lean against each other physically, the sheer fact of their adjacency forces people to confront their neighbors, forces them to solve the myriad of little problems which occur between them, forces them to learn how to adapt to other people's foibles, forces them to learn how to adapt to the realities outside them, which are greater, and more impenetrable than they are. --A Pattern Language, p. 533

Faced with such elbow-to-elbow activities as daily stand up meetings, pair programming, frequent planning sessions, and ongoing conversations at a white board, the software developer stereotype (introverted, aloof, nocturnal, unkempt) is in need of an overhaul. Tried and true individualistic patterns such as AFTER HOURS CODE CLEANUP, INJECT CAFFEINE FOR CODING MARATHONS, and ARROGANCE REDUCES INTERRUPTIONS are being replaced with new patterns that facilitate developer-developer, developer-manager, and developer-customer interactions.

BREATH MINTS

...agile teams talk all the time, using high bandwidth, low tech channels of communicaton. Frequent face-to-face interactions present new challenges for software developers.

♦   ♦   ♦

Fresh breath gives people social confidence and encourages communication.

The first of the pair programming etudes [Jeffries] is "Have, use, and share breath mints."

Therefore:

Keep an ample supply of breath mints in the workspace. When it comes to oral hygiene and team communication, be proactive, rather than reactive.

♦   ♦   ♦

A useful example of TEAM SNACKS...

TIMEOUT

...software development requires DEEP CONCENTRATION EPISODES. When faced with a complex task, it is important to have the ability to think deeply, yet freely. Agile Software Development encourages teams to talk all the time. The level of collaboration in agile teams can wear people out.

♦   ♦   ♦

Periodically interrupt episodes of deep concentration or intense interaction.

Software developers regularly face tasks that are difficult to solve. As you hypothesize solutions, it is easy to find yourself stumped, or in an intellectual rut. Jerry Weinberg describes the required intelligence: "Being intelligent is not having some magic formula which one can apply to every problem. It is, rather, having a number of 'formulas' and not being so much in love with one that it cannot be dropped for another."

The abililty to "drop" one idea for another can be facilitated by changing your surroundings. Stand up, walk away from your computer, go outside. Every software developer has experienced the power of this pattern. After spending an hour on a difficult problem, something pulls you away: a trip to the bathroom, a meal beckons, a colleague in another room needs help on a task -- A DIFFERENT SLANT. During your time away, the solution presents itself.

Sometimes you concentrate so hard you can't think. How many times have you paused for a cup of coffee and figured out the problem on your way to the coffee machine? ... If you're...making no progress, once you've tried all the options, let it rest. Go for a walk. Work on something else. Let your subconcious mind tease a solution out of the problem. [McConnell:635]
On agile teams, this pattern has an additional purpose. Jim Highsmith [Highsmith:90] states: "Working with process and tools pales in simplicity when matched with the frustration, messiness, difficulty, and fun of working with people and relying on people to ge the job done." Anyone who has worked on an agile project can attest to its intensity. The energy required for 3 hours of continuous solo programming feels much less than 3 hours of pair programming with frequent team interactions.

Apply this pattern explicitly, creating an environment that inspires. "Anyone who has to work in noise, in offices with people all around, needs to be able to pause and refresh himself with quiet in a more natural setting" [Alexander:302].

Therefore:

To avoid fatigue and to give yourself the opportunity for novel ideas, put explicit boundaries around your development episodes. Even if it is for just a minute or two, get away from the computer, change your setting.

♦   ♦   ♦

BREATH MINTS can be used as an opportunity to take a break, an opportunity to transition out of the room...

[Alexander] Alexander, C. et al A Pattern Language: Towns, Buildings, Construction, 1977
   See: Timeout

[Highsmith] Highsmith, J. Agile Software Development Ecosystems, 2002
   See: Timeout

[Jeffries] Jeffries, R. Etudes at XProgramming.com, 2002
   See: Breath Mints

[McConnell] McConnell, S. Code Complete: A Practical Handbook of Software Construction, 1993
   See: Timeout


Back to The Psychology of Agile Software Development