November 25, 2010

My Road to Agile

For those of you without the patience to read yesterday's long post, here is the abridged version. My route to agile wasn't overnight.

Fist exposure to an automated regression test suite in '89 (with the IBM 3174 Communications Controller).
Many years of coding and laboriously testing stuff by hand.
Wanted to try my hand at management in '96.
Project managed wrongly what could have been a nice agile project.
Felt ignorant.
Started studying.
Went back to programming.
Fell into an XP project in '99.
Fell in love with XP.
Studied it.
Tried to spread it.
Practiced it on a number of projects.
Wrote about it.
Spoke about it.
Disappointed people didn't flock to it.
Wanted to try my hand at managing in an agile fashion in '05.
Did much better.
Wanted to practice it on more projects, so became a coach for hire.

The moral of the story:
Consider all that led up to you buying in. Then guide and encourage those you work with, but give people space to find their own road to agile. Have patience with those you coach.
photo credit: Tomasz Wiech

November 24, 2010

How I Got Into Agile

This is long, but there is a moral to the story.

I had been programming for several years when I became tired of supporting the PPP and Frame Relay code in IBM's first router. No, that's not it. What really drove me away was the threat of having to pick up support for LU6.2. Maybe it wasn't LU6.2. Maybe it was something else, but it was definitely SNA. That's not the direction I wanted to go in. I wanted to work on IP. Any part of IP. I'd have been happy supporting basic IP, UDP, TCP. Developing any of the routing protocols would have been great. That's where the future was going to be. SNA? Yuck.

Prognostication in the early '90s -- score one for me.

I pleaded with the manager of the IP group to take me on. He had no openings. Or he no likey me. Or I had no IP knowledge. Whatever.

My manager at the time was Tom, a great manager and a real character. Tom was often railing about how many worthless meetings we had and how many people we had in them. Tom wrote a program in those days to compute the cost of meetings. All you had to know was the salary bands for the various levels and what level each of the attendees were -- stuff most people knew. Today you can get a program that does this for your iPhone. I digress. Tom was disappointed by my desire to leave his group, but was supportive in helping me find a place where I could grow and be happy. We'll come back to Tom in a bit.

A good friend, Sam, was working in the same division on some Smalltalk apps. Cool stuff, I thought, but I didn't realize how cool. Smalltalk will never make it, I thought. "What you are doing is kind of hard to buy into", I thought. C++ is where you want to be. I later said the same thing about Java.

Prognostication in the mid '90s -- Although Smalltalk didn't make it in the market, it would have been the thing to learn. Score one for me against Smalltalk's market-share; But -1 for being against Smalltalk as an important language; -1 against Java.

Sam's manager, Joe, offered me a position and made hints toward his retiring soon. I was thinking that if I couldn't work on IP I just might as well go into management. So I joined up. Sure enough, Joe very soon retired and handed the reigns over to me.

Now back to Tom. Not one month into my new role as manager, something was found to be lacking in our software. I don't recall whether it was a bug or an enhancement request. Whatever it was, Tom needed it for his product. My former manager, Tom, was now my customer. So, wanting to be a strong manager with a backbone, one who could make the tough decisions and stand by them, protect his team and his schedule, I said no. I either said simply 'no', or I gave him a delivery date way out in the future, which might as well have been 'no'. Although Tom was the man who helped me get this job, had given me a promotion along the way, and was now my customer, and although his request was quite small, I said no. When I became a manager I threw out the window all I knew about being collaborative. I stopped practicing what I believed in as a developer. I did what I thought managers were supposed to do. Tom wasn't my only customer. I had bigger customers with big projects and big demands. Tom was furious.

What I didn't know then was that this team of Smalltalkers was quite agile. Of course, we didn't have that term back then. Gosh. This was in the midst of the ISO 9000 certification heyday. I had to document our process. I never new managers had to do that kind of stuff! "What have I gotten myself into?" I thought. I really didn't know how to describe our process. I kind of knew what we did, but document it? I knew I'd need help and thought the team would be as annoyed as I with this task. I dreaded asking the question and I didn't fully understand the answer: "Iterative and Incremental" with a few other words wrapped around it. So, I wrote down Iterative and Incremental on the process document, wrapped a few other miscellaneous made up words around it, then whipped out MS Project and got my project plan in shape. And it was a doozey! Spread out, the project plan covered a very large conference room table. I was so proud. (But it was really quite disgusting.) I could demonstrate when we'd be done (well after everyone wanted it), how I carefully put the plan together (with painstaking detail), and how many more expensive Smalltalk contractors we'd need (don't ask). I knew nothing of negotiating scope. I project managed wrongly what could have been a nice agile project.

I knew I was missing something. I felt ignorant so I started studying. I went back to programming while trying to figure out what I was missing. Steve McConnell's Rapid Development and Steve Maguire's Debugging the Development Process and Fred Brook's The Mythical Man-Month stand out as books that began to point me in the right direction.

Then in '99 I discovered jUnit and very soon after got invited onto an XP team, thanks to Greg Houston. Greg would say I resisted XP. Perhaps I did. But I soon fell in love with it after I got used to pair-programming. That took some number of months. Then I began studying XP, writing about it and tried to spread it. I was there at the start of XP Atlanta, which was led at the time by Obie Fernandez and which we later renamed Agile Atlanta. I attended XP Universe in 2001. I practiced XP on a number of projects then started speaking about it within the company, at a local user group and at a nearby college. I also submitted an experience report and a research paper to XP 2003 in Genova. I knew I'd be using agile for a very long time.

I thought I could convert people, that people would readily see the light and that in just a few short years everyone would be doing XP. They would be won over by my passion if nothing else. People would flock to our XP user group. jUnit would lead people to XP and the XP books would convert everybody. And I knew this would happen throughout the industry.

Prognostication in the early '00s -- score one for industry wide fear, uncertainty and doubt with a big helping of resistance to change.

My Prognostication Score: 2 out of 5.

After some years of being an agile developer and advocate in an organization lukewarm to the concept, I decided that I wanted to get onto a team where everyone really wanted to do XP and management supported it. And I wanted to try my hand at managing again, this time in an agile fashion. I found such a team to manage and I did much better this time (though considering how bad the first time was, this might not be saying much). This project eventually brought me to my desire to practice lean/agile on more projects, so I became a coach for hire.

So that's how I came to agile and here's the moral of the story: I think it's important to remember the route you took and how long it took. For most of you I suspect it wasn't really overnight. It might seem that way on the surface. "I got the book, read it, tried it, loved it, all overnight." Not likely. There was a road that got you prepared for the switch. Those we work with, those we try to coach, are on their own road. Have patience with them.

photo credit: Tomasz Wiech

November 10, 2010

Getting Started with Kanban - Answers for Some Mechanics

Let's assume you've read David Anderson's excellent Kanban book. You've started using Kanban on a project. Everyone notices how much more transparency there is in the process now. Some welcome that visibility. Others are not so happy about aspects of that visibility.

If you are reading this blog, you are probably not after Mechanical Agile. You are smarter than that. You want to add real value to your organization. You know that Kanban can help your team focus on flow and continuous improvement if you can figure out, in practical terms, how to use these metrics.

Let's say you've started well, with an understanding of what is important to your business and you have an improvement goal. Maybe you want to start measuring cycle time, want to have a Cumulative Flow Diagram and want to create a frequency distribution diagram or process control chart. You are getting started but the book leaves many details about how to do that as an exercise for the reader. Rightly so. You certainly wouldn't want a specific tool to be prescribed just as Kanban doesn't prescribe which improvement model to use, of which there are many: Deming, Lean, Theory of Constraints, etc.

Thinking back on some questions I had when I started using Kanban I realize many of them had nothing to do with improvement models. They were more basic. In hopes that this may help you, I provide some of the answers I've come across or come up with. I give credit for the good answers to conversations I've had with Dennis Stevens and others. The stupid answers are all mine.

After counting days blocked, do you exclude those blocked days from each item's duration?
No. What you are after with cycle time is how long on average it takes to pull something through the system. Blockage happens. It's part of the cycle. You want to know how long it will take to get an average story through the system with average blockage. You use the days blocked as another, separate metric available for analysis and improvement.

When something has been on hold for a long while and gets dumped, do you include that item in your average cycle time calculations?
Sometimes things get blocked so long that that you give up. Or should give up. Toss that effort in the trash. Forget about it. Write it off. Maybe it will come back again someday, but when it does, you might as well start over. Just dump it. Don't directly include that item in your average cycle time. I say don't "directly" include it because it has had an impact on the metrics. It took up time and effort and caused other items to be delivered later than they could have been. So that item had an impact on your cycle time even though you exclude that item from the metrics. If you were to consider the item's end date the date it got blocked and include that item in the average cycle time, this would make your cycle time look shorter than it really is. Conversely, you could skew your cycle time towards having too much buffer if you held onto the item too long and consider its end date the date you dumped it. So, no, don't include the item in your average cycle time.

Do you include weekends in your lead time calculation?
Eh, do whatever you want. If your average lead time is greater than a week and if your business thinks in terms of calendar time, include them. If your average lead time is around a week or less and if your business thinks in terms of business days, then exclude weekends. Excel has a networkingdays function you can use.


=NETWORKDAYS(B34,C34,'KanBan.xlsx'!holidays) 

For quick items that start and end on the same day, should I count it as a day or as a half a day?
If your average cycle time is much greater than a day and this happens rarely, count it as a day. It's not worth the effort to do differently. If it's rare that any item takes 2 days to finish, then consider measuring at a granularity finer than a day -- measure in hours. If your average cycle time is a couple days and this happens often enough, count it as a half-day -- measure in half-day increments.

How do I graph a frequency distribution using excel?
Use a bar chart. I put the cycle time durations I care about in a column: .5, 1, 2, 3, 4, 5, 6, 7, 8, etc. These are the "bins" that feed the FREQUENCY formula. Name the binsRange and name the durationsRange. Next to those bins, is an array formula: select the range, type in the formula =FREQUENCY(durationsRange,binsRange), and press ctrl-shift-enter. Then I graph the bins and frequency as a bar chart as shown in the image at the top of this blog post.

How do I graph a Statistical Process Control Chart using excel?
I'm assuming you already have columns for completed date and duration. There must be a better way, but the quick and dirty approach is to add a column for the mean and upper and lower control limits and upper/lower spec limits. These columns will have the same value (the mean, or the mean plus/minus three standard deviations, or the spec limit) in all rows. Select those 5 or 7 columns: date, duration, mean, upper/lower control and upper/lower spec limit. Insert a X Y (scatter) chart. Select the mean series, right click, and Change Series Chart Type to a Line chart. Do the same for the other control lines. VoilĂ !


I hope this has been useful. If so, let me know.

What questions of this sort have you resolved or do you still have?

November 8, 2010

Looking Ahead

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDBeeVqCFE-r_uPynje941QLoNjheModtkh7lLfdouWGBYopQs9ZPbq_yfnolyUl-1SxXSKPAabE2O2WLJ7bSZnXX5uxjrmLiPjEgyLeW4G0gAQoYTIJGhliPzUPEFghUAWneAFW0uPBS4/s320/DSCN0324+reduced.jpg

I like to pass along my thought process and habits to those I work with. (Which is good because, well, it's what I get paid to do.) For example, I'm always looking ahead to the next planning or the next estimating meeting. I teach this behavior to my clients whenever I'm coaching a new Scrum Master or Product Owner.

I start off by involving them in what I'm doing, showing what needs to be done and by explaining my thinking. The teaching is very experiential, yet incomplete in a way. If I explained everything in my head, everything I was looking out for, I'd be doing too much telling and not enough involving.
Tell me, and I will forget.
Show me, and I may remember.
Involve me, and I will understand.

- Confucius, 450 B.C.
Yet there comes a point where I'm about to push them out of the nest and let them fly solo when I become more explicit about teaching my thinking. This leads me to throw down a list of things to remember, to refer to later, always tailored to the local context. Experience tells you what to look for and this is somewhat different in each situation so please don't expect this to be an effective checklist for your organization. But in general I keep the following questions in mind.
I look at the stories that haven't been estimated as well as the next iteration or two.
Can the team estimate the story?
Can the team plan the story?
Are the descriptions good?
Are the acceptance criteria sufficient?
Is the story too big?
Does the team need to do a spike first?

How does the next iteration look?
Too many points? Not enough?
Are there un-estimated stories in there?
Are the stories prioritized?
Have we given the team some advance notice as to what we have in mind for the next Sprint?

If we have specialization or multiple teams for one backlog, should we think about which team should take each story?
Does the next iteration look balanced between the teams/specializations?

How does our release burn-down look?
How does the release backlog look?
Will we have stories ready and estimated in advance of the start of the next release?
How much lead time do we need to need?

If I'm using an online backlog management tool, am I overlooking some stories not in my standard filter because they haven't yet been slotted into an iteration or assigned to a team?

When using an online tool for backlog management, I set up views or queries to help us answer those questions:
  • No Estimate
  • No Team
  • No Sprint
  • This Sprint
  • Next Sprint
  • Release Plan
That's provided naturally by some tools, can be set up with a little work in other tools, and is downright impossible in others.

Looking more than one iteration ahead, are there holidays coming up that will fall on a regularly scheduled estimating or planning day (or a pre-planning/pre-estimating day)?
The Scrum Master can help keep an eye on things and point out what is lacking, but the bulk of the decision making of course belongs to the product owner.

I hope you find this useful.
photo credit: Tomasz Wiech