Sunday, March 18, 2012

Patterns and The Storytelling Animal

I had the good fortune to be involved in the early days of the Software Patterns.  In brief, patterns are about capturing solutions that people have developed organically over time, which have proven to be the best ones for the context at hand. What's interesting about patterns to those who are used to more academic approaches to learning about software,  is that a good pattern isn't novel. If you've been working in a domain for a time you are likely  to recognize solutions you have used before. If you've struggled with the problem in the past, you are likely to appreciate that the "common solution" is now documented.

By writing patterns, and hanging around people who studied and and worked with patterns, I learned to appreciate that the value of context: it's not enough to have a toolbox of solutions; you need to understand which solution makes sense given the specifics of your problem. In that way, Patterns fit into a set that includes agile engineering practices and software configuration management: Things that help you to focus your energy on the solving the hard problems that apply to your specific situation.

A good pattern is something that other's have used successfully. When trying to understand whether something is a pattern or just a "cool idea" you often find your self trading stories with others who have worked in a similar domain. My work with "Patterns People" also helped me appreciate the value of story in sharing knowledge. The books that inspired the first writers of software patterns, The The Timeless Way of Building , and A Pattern Language: Towns, Buildings, Construction (Cess Center for Environmental), are about building and architecture, fields in which there is a long history and much tradition. Traditional approaches to building evolved organically over time, and the ones that worked were shared and persisted. To understand the difference between a solution that works and one that is adequate you need to know more that just what to do. You need to understand the story behind the solution, and the story behind your current situation.

The value of story in learning and transferring knowledge seem to make sense on the surface. But it also seems to contrast with the way that we sometimes apply business and engineering processes. We want highlights, key points, and simple rules. But we often don't have the patience for the story that describes why (and when) these rules apply. And applying rules without context can sometimes be uncomfortable.  I recently read a review copy of The Storytelling Animal: How Stories Make Us Human, and this book shed some light on why stories work well for learning, and why avoiding story can make us uncomfortable.

The Storytelling Animal a well written, compelling book that explores the science, history, and future of stories and storytelling. Among other things, the book covers why children and adults create and consume fiction, the science of dreams, the role of stories in influencing (and defining) history, and what technology means for the future of stories. Not just full of interesting facts, many chapters start out in the manner of a compelling story, drawing you into learning about the science and history of story telling, proving the point stories are a great way to learn.

In our quest for answers,  it is important to not ignore that there is a always a context to a problem. What worked in one situation might not be generally applicable, and a framework or tool that solves one (important) problem well, but not your problem is not de-facto a bad tool or a bad solution. Just not the right one for you. While it's good to be skeptical when presented with a solution (especially if someone claims it to be a pattern), it's also good to not be dismissive of attempts to capture solutions in context.  Solving technical problems well isn't just a matter of applying technology. You also need understanding and a knowledge of what others have done in similar situations. Your situation may well be unique. But it is also likely to be similar to ones others have encountered.

Saturday, March 10, 2012

Have the Orders Changed?

One of the great things about being a parent is that you have an excuse to re-read some classic books. My five year old and I have been reading The Little Prince, and the story of the Lamp Lighter reminded me of a common problem teams have with organizational inertia when trying to transition to agile software development.

For those who haven't read the story, or who don't recall the details, the Little Prince relates the story of his journey to various planets. One one planet he encounters a Lamp Lighter who lights and extinguishes a lamp every minute, not having any time to rest. When the Little Prince asks how this absurd situation came to be, the Lamp Lighter discussed this with the Little Prince:
"Orders are orders..." "It's a terrible job I have. It used to be reasonable enough. I put the lamp out mornings, and lit it after dark. I had the rest of the day for my own affairs and the rest of the night for sleeping." 
"And since then orders have changed?" 
"Orders haven't changed," the Lamp Lighter said. "That's just the trouble! Year by tear the planet is turning faster and faster, and the orders haven't changed!"
This is a very apt metaphor for many teams which are trying to adopt agile without re-examining their entire application lifecycle. The team may be developing using good technical practices, but the requirements management process is too heavy weight to keep the backlog populated, or the release management policies discourage frequent deployments, leading to code line policies that place a drag on the team. In addition to organizational resistance to change, some team members might also be using using development tools and practices that make it hard for other agile practice to work as well as they could.

It's important to remember three things when you are trying to be more agile:
  • Agile is a system wide change. Changing practices in one part of the development lifecycle will quickly reveal roadblock in other parts.
  • It's important to periodically examine how well your team is doing. Iteration retrospectives are a an important part of improving how you work.
  • When reviewing how you work,  the practices that are now problematic are not often not "bad" per-se, they just don't apply  to your current situation.
Jerry Weinberg makes a great point about old rules in his Quality Software Management: First-Order Measurement where he says:
Survival rules are not stupid; they are simply over generalizations of rules we once needed for survival. We don't want to simply throw them away. Survival rules can be transformed into less powerful forms, so that we can still use their wisdom without becoming incongruent. 
"Survival" sounds a bit strong until you consider that the motivation behind working a certain way is often a desire not to fail, and sometimes, "failing" is scarier when you fail when not following established practices. That's why applying techniques such as those in Agile Retrospectives: Making Good Teams Great can make it easier for teams to consider how they can improve.

Standards and conventions ("orders") can be helpful to working effectively, but it's important to review those orders from time to time to see if they still apply.

Sunday, March 4, 2012

Paper v Electronic Dashboards: Goals and Values

It's almost a matter of dogma that, for agile teams, low tech project tracking tools and artifacts are superior to electronic ones. The usual reason you might hear for preferring a physical task board to an electronic issue system are are that a physical task board is more visible and encourages communication and collaboration. I appreciate this, and have seen it, but I've also seen teams do well with issue tracking systems. From time to time I see a discussion of this "physical v electronic  tracking" issue and I find myself frustrated by it, but not sure why.

Reading Scott Kirshner's article Incubating ideas from the rank-and-file in the March 4, 2012 Boston Globe led me to think more about this. The article is about the value of listening to people in your organization when seeking ways to work better. This in itself seems aligned with agile values. In particular, this quote caught my eye:
Many of the ideas presented were dazzling. And almost every one sprang from frustrating experiences. Why, in the 21st century, was the hospital still manually updating whiteboards with information about patients’ health status and the teams taking care of them, Lynn Darrah wondered. So she developed a digital display that was just as easy to update, but the information was visible on any computer in the hospital.
While I take issue with the premise that using whiteboards is too low tech for the 21st century in all cases, I wondered how it was that a computer system for tracking patient status could work in a life critical situation, while it might not on a software project. The problem is that the "paper v electronic" discussion focuses on the wrong thing. The issue for agile teams is not about paper v electronic, it's about collaboration, visibility, improvement, and results.

I do believe that, when you are trying to change a culture, introducing a radically new approach can be a way to encourage people to think about how they work. And it's certainly true that "we've always done it that way" isn't a reason  to continue doing something. But you need to focus on goals and results, not the tools you use. Changing tools should be a result of the tool not helping you to meet your goals.

Yes, I do prefer a physical task board in many cases. And if your team does a sprint review and isn't meeting goals, and communication seems to be an issue, try a physical task board for a sprint or two and compare. But is the if the team has a good sense of where things are during a sprint, communicates frequently, and meets goals, insisting on a physical task board might actually be contrary to the agile value of  putting individuals and interactions over processes and tools.