Posts tagged Good Practice

Walk the dog

This is a simple technique with a marketing twist to its name. This title came to me while coaching a team that was struggling to behave cross functionally and were paralyzed at delivering working software at the end of their sprint. It is a simple mental discipline that I have often used in crafting good user stories and I wanted them to walk their user stories with me.

Everyone is not an expert at analyzing business requirements against technical complexity, but most have had practice walking a dog. So lets ‘walk the dog’, plus this is much cooler than ‘lets walk the user stories’.
Metaphors only go thus far, but a cool title goes much farther. For me, a fancy title, acts as a trigger that allows me to break from the ongoing chain of discussions and engage in an exploratory exercise.
I have used this technique a few times to address primarily two types of challenges, here are these stories:

Stories ‘not-done’ at the end of sprint:

This team was formed of team members that were experts at their part of the code. This was their second sprint as a team and they were struggling to cross-train. To their product owner’s credit, he was creating user stories that were truly vertical slices of functionality that represented end-to-end implementation of features. Their main challenge was that in their two week sprints they were unable to meet ‘definition of done’  (fully integrated & tested) on these user stories.
.
In response the team was asking the product owner to further split these user stories in two to three horizontal slices that could be integrated in later sprints. The product owner, was rightly pushing back since that would mean that none of his features would be developed end-to-end in a sprint. As their coach, while I was supportive of the Product Owner’s judgement, I was not sure whether I truly understood the team’s problem. I wanted to try an exercise of discovery with the group, and was concerned whether the group would allow for space and time to go with it.
.
So I christened ‘walk the dog’ technique. “sounds like its time to walk the dog” – I said.
‘Sounds cool’ said some one in the group, others looked perplexed and few others perked up.
.
So I asked the team to bring all their user stories from the current sprint. Starting with the first one, I asked them to walk me through the changes in code base that they will have to make in order to implement this story. I clarified that changes were considered only at the component level and not at the individual class file level. Then we picked another user story and did the same for that user story. At the end when we were done with all the user stories in the sprint, the picture looked like this.
Walk the dog stories in sprint

Crude copy of white board diagram

We all stood back and after a few private moments of reflection, one of the teammembers asked why we are modifying on so many components in the same sprint? – bingo!

After this short diagraming exercise where the team literally walked each user story (the dog) through the changes in our components, the team was able to realize that the problem was not with the way user stories were split, but it was the lack of focus created by too many moving parts. The team was then able to rationalize why they were still trapped in their silo’s and why they were facing so many integration problems.

Earlier the team was asking the PO to split user stories along components so that they could manage complexity within their sprint. This exercise revealed another approach for the team. By limiting technical diversity for their in-sprint user stories the team was able to reduce complexity within their sprint and also deliver vertical slices of valuable functionality for their product owner.

Vertical Slices of functionality! – Not in my world

Another context where ‘Walk the dog’ was useful to me as a facilitation technique was when a team was locked into splitting stories horizontally across components.

Their architectural component environment was tremendously complex. Because of NDA’s with this client, I cannot reproduce their high level architectural diagram, but imagine a bunch of boxes interacting with each other. Some thing like this:

Their working context was further complicated. The team members were doing scrum and working on components A1, A2 and B. Other components X’s and Y’s were already developed by other projects. This is not to say that changes were not expected on component’s X & Y’s.

So we played ‘walk the dog’. This time however, I presented this technique as a game.

The Game:

Imagine that you have a pet dog and you are new in town. You take your dog to a park for a walk. You have never walked through this park but you have seen pictures and have seen the layout at the entrance to this park. Your objective is to enjoy your stroll through the park and get home before it gets dark.

The Park:

The actual diagram was printed and pasted next to a white board. Next we drew all the boxes (components) on the whiteboard and I purposely asked them not to draw connecting lines between the components. So the diagram on the white board looked like this:

The Dog:

Next we talked about end user functionality and picked a few functional cases.

The Walk:

We picked one end user functionality and charted its walk through all the components that would be affected.

Getting home before dark:

I then asked the team to do a quick round of planning poker style estimation, to decide whether this end-user functionality can be completed within one sprint.

In the case of our first end user functionality, the team quickly came to consensus that the end user functionality could not be delivered in one sprint.

We talked about why it is not possible to develop this slice of functionality. Over some conversation, it transpired no one in the team was confident that services exposed by component X2 will work. They said that although their platform teams have developed functionality that ‘should’ work for them, their prior experience with that group has not been good.

I asked ‘what if’ the component X2 worked as expected, would this end-user functionality still be unattainable at the end of a sprint?.

They said, there is no issue if the platform works as expected. We will be home with the dog before supper. No worries.

So for this particular end-user functionality, lack of knowledge about exposed services was the issue. Our conversations turned to how we can gain sufficient get-your-hands-dirty type learning. Reintroducing special story types such as research, spike & tracer bullets helped to stage a spike that will allow them validate functionality in their platform and deliver end user functionality for their sprints.

Same Park, New Dog:

Methodically we walked each end user functionality through the architectural component park. Along the way, we split many stories into thin slices of end to end functionality. This exercise resulted in a product backlog with enough vertically sliced user stories for the next 2-3 sprints. Valued byproduct of this was a list of immediate project risks, action items and shared understanding.

For this team’s case, the issue was not that they were technically unable to deliver vertical slices of functionality. It was their inability to work through organizational impediments. For them all external components represented a big department that had to be wrestled with.

Focusing on thin slices of functionality, exposing component uncertainties one at a time and a good walk in the park helped them reveal impediments. Prioritization of vertically sliced user stories by the PO helped the team and ScrumMaster to prioritize their impediments against the product backlog. Products developed in increments of features/functionality as opposed to the ones developed in increments of components allow for early realization of returns on product investment. Many teams resist this path since the overhead of dealing with all organizational impediments all at once often seem unsurmountable. This exercise helps reveal and prioritize these impediments. It takes courage and tenacity on part of the scrum team to then relentlessly pursue resolution of these organizational impediments – one at a time.

Product Owner takes Vacation?

The role of a Product Owner with in Scrum teams or that of a Customer in XP teams is critical to the success of the product. What to do? – when they take vaction. What are your options? Say your product owner is going on a planned vacation for a couple of weeks, effectively unavailable to the team for an entire sprint. Based on my experience at coaching and working with Agile teams, I have found following options that do not work:

1. The business owner (PO’s boss) takes the solo role of the product owner over.

 Pro: Business Owner is the single representative voice of customer. Business Owner has the authority and the responsibility to make product decisions.

 Con: S/He is not available for much of the time, delaying decisions.

 Con: Business Owner does not have detailed knowledge of the domain.

 Your PO’s boss most often will not have time to spend with the team and lack of domain knowledge renders the business owner dangerous to provide direction for a sprint. Also, given his seniority he  may  have other important stuff to take care, like assuming non-PO responsibilities that your PO was fulfilling within the organization.

2. Hybrid: UX Questions go to Interaction Designer, Reporting Questions go to Business Intelligence Analyst, Strategic Product Questions go to the Business Owner. Scrum master is quarter back for these questions – ensuring they are routed to the right place. When there are unresolved questions, they are decided by Business Owner.

 Pro: Balances workload among contributing experts

 Con: More workload on the scrum master

 Con: Communication may break down between different members

 Con: Who accepts stories?

Too many people wearing the virtual PO hat with the real PO in vacation and the real-temporary PO behind the scenes. Too much confusion for anyone’s taste. 

3. The product owner postpones vacation.

 Pro: Team doesn’t loose their product owner

 Con: Delay in vacation causes trip prices to climb in the summer

 This option is really not sustainable, people ought to be able to take vacation and not penalized for doing a good job.

4. Get another analyst to come up to speed. Someone comes on the project two weeks earlier to understand the domain and serves as proxy during the sprint.

 Pro: Keeps the single decision maker.

 Pro: Availability of analysts is more realistic than Business Owner taking this over

 Con: Unfamiliar with the domain.

Startup time/cost to get a proxy product owner ready means effort spent by current PO and other team members during prior sprint which may cause drop in delivery of valuable functionality that would have been delivered otherwise. 

5. Product Owner answers emails from Europe with 1 day time lag

 Pro: Single decision maker is kept

 Con: Time delay for questions, reducing velocity

Then it is not a vacation and true product owners take vacations!

 

What can you do?

One of the team member assumes a dual role of Product Owner and Team member. Ensure that this is not the scrum master.

Sooner or later, the PO has to trust the team to make domain level/product level decisions. Hopefully during these previous sprints the team has had an insight into PO’s thinking process and gained insight into PO’s implicit knowledge about how the product should work and feel. There may be some Subject Matter Expertise, like biz rules, that they need from other Analysts and they can ask these SME’s for guidance however the responsibility of final product should not seep out of the Scrum team (SM + PO + Dev team). Also, having a team member play this dual role is better than

i. Training a new person to play proxy role. (option 4)

ii. Getting a less domain knowledge person make decisions (option 1)

iii. Causing identity crisis for the rest of organization (option 2)  ;)

The worst that can happen is that the person who is playing the dual roles, blows-up a two week sprint.  On the bad side, 2 – weeks’ worth time and effort is lost. However on the good side, the PO will know how well the development team has so far understood PO’s product vision and incremental steps so far (previous sprints) towards that vision. A great learning opportunity! (Above mentioned worst case can also happen with option 1, 2 and 4 however there can be tendency to cop out and blame the “outsider” rather than look inwards and see where a team can learn.) 

There are two characteristics that I seek in my suggested solution:

1. Learning opportunity

2. Avoid diffusion/confusion of responsibility 

Many thanks to Ed Kraay, my collegue and friend at SolutionsIQ, who recently helped one of our client product owner’s to fulfill his vacation commitment.


Making sense of Best Practices

A Best Practice is a collection of tools/techniques/approaches/methods when applied in prescribed order delivers desired results effectively and efficiently. “Best” in the term “Best Practice”, to me, implies that there is no further room for improvement, ever! There seems to be an implied sense of finality, why use anything less than the best? There also seems to be an implied sense of universality, wherein application of Best Practices under all circumstances will yield desired results most effectively and efficiently.

These Best Practices have come from well minded people who have shared their successes at solving problems in a given domain. People have either intuitively found certain practices to be superior and best suited to solve some problems or they have iterated over and tried multiple solution paths, to solve a problem over and over again and optimized their approach until Best Practices for their context has emerged. This is not to say that there exists a Best Practice for all problems. In HBR’s Nov 2007 Article: Leadership Framework for Decision Making, the authors assert that Simple Contexts are the domain of Best Practices.  As per the article, the characteristics of a Simple context;

Simple contexts are characterized by stability and clear cause-and-effect relationships that are easily discernible by everyone. Often, the
right answer is self-evident and undisputed. In this realm of “known knowns,” decisions are unquestioned because all parties share an
understanding. Areas that are little subject to change, such as problems with order processing and fulfillment, usually belong here.

Best practices are suited only with in a simple context. Take for example the case of stolen/lost credit cards. The banking and credit card industry has faced this problem over and over again. Solution to this problem for both the credit card holder and the credit card company has been codified into best practices. This has been possible through simplification of the context through technical improvements in supporting infrastructure and collaboration between various credit agencies to simplify their domain. And not the other way around. Best Practices have not enabled simplification of the context, actually because of simplifications in the context Best Practices have emerged/formulated.  I believe that instead of seeking Best Practice solutions for one’s operational context, one should instead focus on simplifying the context towards achieving effective and efficient means (practices).

The solutions all are simple…after you have arrived at them. But they’re simple only when you know already what they are.

Zen and the Art of Motorcycle Maintenance – Robert M. Pirsig

My take of why Best Practices are believed to be so great is because  Best Practices carry a sense of assurance to provide, consistently, most effective and efficient results. Desirability for these benefits trigger transfer of Best Practices from one organization to another. This transfer happens via cross-pollinating agents, most likely to be consultants.

Richard Dawkins, 1976 in his book “The Selfish Gene” coined the term “meme” as an analogy to the concept of gene. A meme is any unit of cultural information, such as a practice or idea, that is transmitted verbally or by repeated action from one mind to another. Examples include thoughts, ideas, theories, practices, habits.

Within today’s corporate culture, the notion of Best Practice is a meme.

Richard Dawkins:

“If a meme can get itself successfully copied, it will”.

The Best Practices meme has a strong pull from receivers (demand), after all who doesn’t want the best. And I would argue that there is much stronger push from the suppliers (consultants) to sell Best Practice solutions in order to satisfy receiver’s need.

Richard Dawkins:

“Effective memes will be those that cause high fidelity, long lasting memory,” and not necessarily the ones that are “important or useful.”

Best Practices meme have high fidelity between both receivers and suppliers when they are simpler. Meme’s do not replicate exactly as the original when they get complex. For it to be memorable it hinges on simplified core elements that stick in the minds of people, easy to be mimicked for further replication. Either that or in the melee of buying & selling services, quick fixes to long standing problems and trivialization of complex contexts into simpler ones, unwittingly or purposely people have creatively oversold Best Practice solutions. In this process activities/practices that have no demonstrable track record for betterment have been tagged to be “the best” and effective practices are stripped of their contextual elements making them sell-able to wider domain of problem statements.

So, are there any Best Practices? – I think not. I am firmly in the camp with many others who have suggested to get rid of the term Best Practice. Few alternatives that I’m aware of are – “Good Practice”, “Current Thinking”, “Contextual Practice”. For now, as an alternative, I will personally settle for “Good Practice” since it does not carry the sense of finality and allows room for improvement. Conceptually I do believe that with in simple contexts certain Good Practices can provide effective and efficient results. However, I strongly urge that Good Practices should not be blindly accepted for its apparent goodness. All practices need to be tried out atleast once with in your own context to determine whether a given practice is good for you or not. A good practice in essence does not carry with it the assurance that what worked for me will also work for you. I am comfortable accepting practices and judging their “goodness” against my objectives and not benchmarking these against others who have apparently the best implementation of a best practice.