Archive for the 'Uncategorized' Category

Jul 06 2010

Agility in Medium Security – Pillar’s Code Retreat at the Marion Correctional Institution

Published by darylkulak under Uncategorized

Pairing at Marion Correctional Institution

Nine Pillar employees went to prison. Just for the weekend. To do some pair programming.

Dan Wiebe, a Pillar developer, has taught programming classes in prison for the past year and has been a volunteer in prison for about fifteen years before that. His efforts have been focused on the Marion Correctional Institution (MCI) in Marion, Ohio. MCI holds over 2,000 inmates and has been running a program called “Lifeline Reentry” which provides skills to inmates who are interested in learning new things. Dan’s classes in programming are part of Lifeline.

On Sunday June 27, Pillar employees from our Michigan and Ohio offices joined Dan for a special “Code Retreat” at MCI. Matt VanVleet offered his home for the out-of-towners to stay the night before, then the group got up on Sunday morning and started their day with the inmates.

Here are Dan’s comments from the events of the day.

For more photos, click here.

I got there a little early. The Ohio guys, chauffeured by Nilanjan, were right on time. The Michigan guys, coming north from Matt’s place, were about a quarter hour late.

I passed the time talking to a guy named Walter whose closely-held thick yellow manila envelope marked him as having been released that very morning. He was waiting for a ride to arrive from Cleveland, and was looking forward to finding work as a woodworker. I wish him the best, but I know that times are tough in Cleveland these days, and they’re tougher if you have a felony.

After all our preparation e-mail exchanges over the past week, everybody did everything almost completely right, except that I forgot to put Ronak’s name on the gate pass, and another of our number forgot the no-jeans rule. But I called the Deputy Warden at home on Saturday night and he added Ronak’s name for me, and the COs in the A building were in a good enough mood to be lenient about the jeans.

Once we got processed in and escorted back to the computer room by a very pleasant lady captain, the prisoners were almost excessively happy to see us. My boss, Jo Dee Davis, spent some time filling us in about the various programs involving computers that the prison sponsors, and the students had everything completely spotless, and had “MCI Code Retreat 2010″ wallpaper and screen savers installed everywhere, plus a projector constantly running a somewhat dizzying ray-traced 3D animation of the retreat logo on the wall.

Meet and Greet

We introduced ourselves and established procedures for the day. Each prisoner selected a station and sat down, and each outside volunteer selected a prisoner to pair with. I noticed that I was the only one without a pair partner; I figured I’d circulate around and make sure nobody was having any problems.

Then I thought, wait. These are Pillar guys. Who’s going to have problems?

So I noticed that one of my former students, Ezra, was in attendance: he had reluctantly left the class because he was to be transferred to a different prison. For some reason the transfer didn’t go through, but Ezra was still out of the class and back to the end of the waiting list. I’m not sure why he was able to attend the code retreat, but I asked if he was allowed to pair and was answered in the affirmative…so hey, we coded.

We decided to try an object-oriented solution to Conway’s Game of Life: with a Direction enum with values like TopLeft and Right, and a Cell object that knows whether it’s alive or dead and has an EnumMap containing all its neighbors, keyed by Direction.

By the time we had tests and code written for Cell.countLiveNeighbors (), morning count had cleared, so we trooped into the common room for a short retrospective before lunch.

The unfortunate part about the retrospective is that nobody could seem to think of anything to improve. So we were called to lunch, where we were placed in line ahead of all the other 2400 guys who were eating there. I suspect others will describe the experience, so I’ll skip over it.

After lunch, we had a mildly uncomfortable experience with the men’s room, which involves practically no privacy at all, but is still significantly better in that regard than the version the prisoners use. We talked about the prisoners who were doing the best in their pairings.

So when we got rolling again, I found myself with no pair choices other than Mark or Ezra: and the other Pillar guy looking for a pair was the guy who had paired with Mark the first time. I get to code with Mark all the time, and I was hoping to treat somebody else to the experience, because Mark is so good, but I wasn’t altruistic enough to insist, so we tried a more traditional non-OO version of Conway, with 2D boolean and int arrays. The interesting part was that instead of having the neighbor-counting algorithm constantly checking for board edges, Mark chose to waste a 1-cell border around the board and not bother checking for edges. We got almost all the way done before the bell rang again.

The third time I paired with Larry King. (Yup, I have a student named Larry King. He’s not nearly as obnoxious as the one on TV.) I was a little concerned about his progress, and I wanted to see how he did. He decided to go object-oriented again, and it turned out that my fears were completely unfounded. He needs to learn some Eclipse shortcuts because he’s a slow typist, but he understands the fundamentals just fine.

After the third session, we really didn’t have time for anything but a generous retrospective, and that’s just what it turned out to be: generous. Again, the only element of it that could possibly be called negative was that we don’t already have another retreat planned. (It was there that I made my comment: “Mark’s a front-end guy, but Lee is more of a back-end guy.” In prison I said this. Whoops.)

Group photo - Pillar and inmates

During our retrospective, the warden stopped in (well, okay, left her church service and drove to work on a Sunday) and said some very nice things about us, and we asked her about perhaps setting up something like this in a prison in southeast Michigan. She was enthusiastic about the idea, and promised to use her influence to help us in whatever way she could.

After that we pretty much said our goodbyes and were escorted out. The possibility of eating together was raised, but it was pretty early for dinner and the Michigan guys wanted to hit the road, so we just drove away.

The last I saw of the Ohio contingent, Nilanjan had just mistakenly turned them north on US 23 and was driving them toward Michigan.

3 responses so far

Jul 01 2010

TDD and Agile – What Does the Research Say?

Published by csuscheck under Uncategorized

I always hear that agile development – particularly test driven design – just takes too long and the payoff isn’t worth it. That doesn’t seem to match what studies have shown.

VersionOne’s annual survey shows, in 2010, that 64% of respondents thought agile projects were completed faster.  A full 80% thought that agile projects enabled faster or similar time to market as traditional projects.

Scott Ambler’s 2010 annual survey indicates that 47% of the respondents felt developer (as opposed to acceptance level) TDD is the most effective agile technique. TDD was a practice that 21% (second highest) of the teams wanted to adopt.

The results of a study of four projects using TDD (Realizing quality improvement through test driven development) is shown in the following table:

Project 1 Project 2 Project 3 Project 4
Defect density decrease 61% 38% 24% 9%
Increased time to code (estimated) 20% 25% 15% 20%

In other words, TDD does decrease defect density and increase time to market.

That information is confirmed in another TDD Experiment in which it was shown TDD took an average of 16% more time but showed a marked increase in quality of code. That same experiment showed that 78% of developers felt TDD increased productivity, 80% felt it increased effectiveness, but 40% felt it was difficult to adopt.

Summarizing the studies of TDD, the technique will increase time by 15% to 25% but it also decreasing defect density by between 9% to 61%.

You’ll have to decide for yourself if the additional time is worth the potential bugs your customers will find.

One response so far

Jun 05 2010

An Introduction to Mocking Frameworks in .NET

Published by kgentry under Uncategorized

Webinar on Thursday, June 17, 2010

1:00 PM – 2:00 PM EDT

The most challenging part of test-driven development is dealing with dependencies. Typically, we end up creating mocks and stubs to isolate the behavior we would like to test.  When we create all these testing classes by hand, it can get out of hand quickly – sometimes developers duplicate these classes, and other times the mocks and stubs become more complicated than the code they’re trying to test in the first place. Thankfully, we have several open source tools that can help ease the pain; frameworks like Rhino Mocks and Moq allow us to create mocks and stubs within our test method. While these tools do have a learning curve, we’ll go over techniques that can ease you into these frameworks, and soon hand-rolling a mock or stub won’t be your only option.

About the Speaker:
Michael Joseph Kramer is a passionate software developer focusing on quality agile practices and writing the minimum amount of code that he can. He has over 10 years of experience creating applications on a wide variety of platforms, and has worked as both an IT professional and as a consultant. Michael is a student of test-driven development, object-oriented design, and recently he’s been trying not to spill the Ruby Kool-Aid on his shirt. Michael lives in Columbus, Ohio, where he obsesses about bourbon and Buckeye football. He holds degrees in English and Economics from Ohio State University, and currently works for Pillar Technology.

Register at http://bit.ly/webinar9

No responses yet

Jun 04 2010

Applying a Test-First Approach to JSP and Java Script UI Testing Technologies

Published by jayaho under Uncategorized

Webinar: 6/30 1:00pm Eastern:

A look at applying existing testing technologies to testing of Java presentation components to provide a Test-First approach to Web 2.0 UI development. UI Testing has traditionally been applied after the fact to create a stability mechanism around an application. Application frameworks like Portal servers compound the difficulty of testing the UI. The techniques outlined in this presentation break the framework barrier and put UI testing back into a Test-First paradigm. This presentation specifically covers testing JSP and Java Script technologies using open source solutions.

About the Speaker:
Rich Dammkoehler has been practicing Software Development for 20 years. In the past decade he has been an Agile coach specializing in development practices including TDD, End to End Early and Travel Light. Rich has worked in manufacturing, telecommunications, insurance and banking industries. In his spare time Rich enjoys long distance motorcycle riding and spending time with his family in Central Illinois.

Register at: http://bit.ly/agilewebinar8

No responses yet

Jun 03 2010

Why Schwaber is Wrong

Published by Todd Kaufman under Uncategorized

I was excited to see Ken Schwaber speak at the COHAA Path to Agility conference last week. Ken has been a pioneer in our field and truly helped change the way in which the world builds software which is a personal mission that I share. Ken discussed in his presentation how Martin Fowler had singled out Scrum as process that commonly results in “flaccid” projects. The point Fowler makes is that a lack of discipline in the engineering practices of the Scrum team result in a wealth of technical debt that eventually cripples the project. Schwaber had intentionally left engineering practices out of the original versions of Scrum, but after being singled out by Fowler and seeing Scrum projects fail due to the poor engineering practices in place, he felt compelled to do something. Unfortunately, I left his morning keynote with a single impression. His approach to improving the engineering side of software is just flat out wrong.

Before I get into why Ken’s approach is wrong, let me first acknowledge where he is 100% correct. First, software engineering needs to be improved. I have interviewed and worked with hundreds of software developers in the past 5 years and many of them are just horribly equipped to build software that withstands a couple years of enhancements and changes, let alone 10 or 20 years as most enterprise apps should. There are far more frameworks in Java that encourage poorly layered design, a lack of testing, and over complicated designs than there are tools that encourage proper engineering. Expecting developers to produce quality software on the “standard” platforms like Java Server Faces and Enterprise Java Beans is akin to asking pigs to sprout wings and fly. Luckily, open source alternatives are prevalent even in the largely closed platforms like .NET. Many of these open source frameworks allow developers to adhere to SOLID principles and build software that is truly solid and withstands the tests of time. Given the hundreds of novice level software developers I’ve met, I’ve also met a fair share that are much smarter and better equipped than I to build really high quality software. Good developers are out there, but they are not the norm. I could just as easily say the same thing about Certified Scrum Masters however, which leads me to my second point of agreement.

The current Scrum Alliance is a “cartel” as he put it and it should be abandoned in it’s current form. A cartel is defined as “an association of manufacturers or suppliers with the purpose of maintaining prices at a high level and restricting competition”. The Columbian Drug Cartel is the example provided by the Dictionary app on my mac. I, among many others, share responsibility for the Scrum Alliance cartel though, as there is as much responsibility in the drug users as the pushers to stop the cycle of abuse. I sat through a certified scrum master training course that cost $1200 for two days and gained practically zero knowledge above what I had already learned in reading books, blogs, and practicing Agile myself. Hell, Ken’s own scrum guide can provide as much value as the course I attended and it’s a free 21 page PDF. Reading the PDF doesn’t provide the CSM at the end of your business card though and thus the closed cycle of CSMs is born. Pay for a certification based on attendance and novice managers may keep your resume on their desk in lieu of someone who is far better qualified but missing a $400 per letter acronym. While Scrum the process has advanced our industry, Scrum the Alliance is a blatant money grab and Ken is spot on, let’s stop it now.

Ken opted to stop it now by leaving the Scrum Alliance behind and consequently starting up Scrum.org. Notice the org, it is an open and ideally transparent organization which is good. Scrum.org’s first goal, judging by the website, appears to be knowledge sharing. Also good. A proliferation of knowledge in this Wikipedia era should be expected. Unfortunately, Ken and I begin to deviate at this point in our philosophies on improving the community within which we work.

“Attend a course” is the second graphic on the scrum.org website. Why must all knowledge be gained through an exchange of money for course based training? I actually believe training to be the least persistent of all forms of knowledge transfer and therefore typically the least valuable when compared to coaching or even hands on exploration. It still has a place in many areas to build interest, provide introductory knowledge, or otherwise garner momentum for a larger scale movement. But it will never be the solution to the state of our engineering practices, especially when courses range from a cost of $2,000 – $4,000 per person. Look for yourself at the outcomes of the training on the scrum.org website and tell me which you would pay $4,000 of your own money for. If you won’t do it, why should your employer?

The final graphic on the scrum.org website reads “Assess your skills”. Much has been bantered about with regards to professional certification but let me state plainly that assessments like this will never be an adequate barometer of software development talent or maturity. They may get people to study bodies of knowledge and pick up some facts, but that is a far cry from getting people to utilize this knowledge in practice. Ken provided an example question in the presentation that was asking about the benefits of layered design in an architecture. Do we seriously think that getting people to answer this question in preparation for an exam will actually cause a different behavior in their day to day jobs? Further, why is a training course (again at the $2k – $4k range) required as a prerequisite to taking the exam? This sounds frighteningly familiar to another training cartel that I’ve heard about. Finally, please explain to me how the professional scrum developer certifications are language specific, covering only Java and .NET. I’d say that of the excellent software developers I know, at least half of them are passionate about using Ruby to the point that they are finding ways to work in it as their primary language. Sorry Jim Weirich, David Heinemeier Hansson, Joe O’Brien, and Jamis Buck, no PSD for you.

If the goal of our community is to improve software engineering as a whole, we need to abandon the training and assessment portions of Scrum.org as quickly as Ken abandoned the Scrum Alliance. Instead let’s focus on changing a few things that will truly matter:
1.) Adopt an apprenticeship and craftsmanship process at each of our places of employment. Leverage this hands on coaching to elevate our less experienced community members up through the Dreyfus model of skills acquisition and cultivate better software developers through kinesthetic experience.
2.) Stop treating knowledge as a commodity that can be owned and sold. Knowledge is constructed according to the likes of Seymour Papert and Jean Piaget, so stop trying to shovel it into the heads of people in a lecture hall setting. Instead, let’s reduce training and conference costs and change our approach. $4,000 for training and $2,000 for conferences is absurd and an obvious money ploy. Charge about $100 per day for training or conferences and make sure that they are done in an experiential manner so that the attendees retain as much of the knowledge as possible.
3.) Establish a university model of computer science that more closely aligns with real world needs. Very few higher education computer science curriculum align well with what students face as they enter the workforce. Let’s begin sharing experience with universities to better shape a constructivist approach for the next generation of software developers.

I admire Ken Schwaber immensely. He has advanced the ball of software development to a much greater extent than I will in my lifetime. He is unfortunately going down a path that will repeat the mistakes of the Scrum Alliance. My hope is that he and the rest of you will help me to execute upon the three pronged approach I have outlined above. Please comment, blog back, or contact me directly at toddkaufman at gmail dot com if you would like to explore alternative methods to elevate our craft. 

8 responses so far

Apr 22 2010

Trends in Mobile Computing

Published by darylkulak under Uncategorized

Read/Write Web, the awesome tech blog, has been running a series on the emerging trends in mobile computing. They are doing this in anticipation of their upcoming unconference on mobile.

I’ll outline their main points and refer you back to the Read/Write Web blog for the details.

Trend #1 – Native App and/or Browser-Based

Most of the news is around iPhone apps, which you download and run locally on your iPhone. But, as RWW points out, there are many more mobile-friendly Websites than there are native iPhone apps. As a software development person, there was a point about a decade ago where I crystallized a strong preference toward Web-based, thin client applications instead of locally-installed apps. But the reasons were mostly because of distribution problems (getting updates to the client machines), and client operating system incompatibilities. Today with mobile apps, there isn’t much difference between trying to get a browser-based app working versus a locally-installed app. Both are a headache. And the distribution problem has pretty much disappeared with these ultra-smart app stores that Apple and Google have created.

It’s hard to predict which will triumph – native app or browser-based. It certainly will be interesting to watch.

Trend #2 – Privacy

We will certainly see privacy issues come up, especially once some high-profile crime occurs due to the amount of personal information we’re disclosing. I’m not a huge privacy advocate, and am pretty open with my own personal information. But it is understandable that people might get antsy with the amount of openness that Facebook, Foursquare or other services provide to the general Internet public. This all just becomes an opportunity for companies who can provide an additional layer of privacy that people (and companies) need.

Trend #3 – Emerging Wireless Sensors

RFID and similar technologies, when applied to mobile, become a very enticing opportunity. Pillar has already incorporated RFID into our “electronic story card wall,” a prototype product that eliminates syncing between the paper cards on the wall and an electronic database.

Trend #4 – Geo-Location Services

Sites like Facebook know a lot about “who you are” but once you start adding location information about “where you are” the possibilities for new and interesting services becomes truly amazing. Forget about the “get a coupon as you walk past” nonsense. Where is there a band playing at a nearby bar that I might like? Where are my friends hanging out tonight? Which of these home improvement stores in this mall is most likely to have what I want? How crowded is the dog park right now?

Trend #5 – The Internet of Things

Mobile apps are beginning to be able to scan barcodes known as “QR Codes” that tell the phone what the item is. This is also possible, to a lesser extent, with products like Google Goggles, which can identify items by sight through the camera.

Trend #6 – Augmented Reality

Augmented reality is the ability to put a virtual layer of information on top of the existing images in a mobile camera. For instance, you might point your camera at an apartment building and see which ones are for rent and how much. We’ve already discussed the massive possibilities in augmented reality apps for business on this blog.

Trend #7 – Mobile Social Networking

Take the Facebook or LinkedIn information plus knowledge of location and think of what value you can provide to customers. Lots of people are playing with ideas for individuals with this, but what about the business implications? What about business networking opportunities?

Trend #8 – Commerce

Morgan Stanley analysts say that mobile will revolutionize commerce. Certainly for consumer commerce. What about business-to-business?

Trend #9 – Cloud Computing

Cost savings, hassle reduction, and getting back to the business you were meant to be in (as opposed to maintaining server rooms). Cloud computing is a trend that will not go away, but it involves a different set of paradigms all the way from programming to design to management of projects.

Trend #10 – Health

Mobile apps for doctor visits, jogging, trips to the gym, visits to the health food store. And what about corporate wellness programs?

What trends are you seeing in mobile?

No responses yet

Apr 22 2010

No Fair!! The Problems with Agile Training

Published by darylkulak under Uncategorized



How does someone get started with Agile? Seems like you should take some classes. In today’s blog post, I’d like to examine the problems I’ve seen trying to use training classes to get people started with Agile.

NOTE: There is much discussion in our Agile community around certification, testing, etc. This blog post does not dive into those areas (although this blog does).

Best Practices

The topics to train people in a classroom setting can either be theoretical or practical. If we use theory, let’s say the principles of the Agile Manifesto, we risk that people will finish the class and go back to their desks and not be able to put the ideas into practice. If we use practical topics, like the individual steps in creating a burndown chart, then we have another problem. I call this the “best practices problem.”

If we endeavor to teach people “best practices,” we are giving them a set of steps that is supposed to lead them to success. When the student hits a bump in the road, they have several choices. One is to come back to the instructor/expert and ask what to do. In the absence of the expert, the student can simply ask “What would the expert do?” trying to guess the “right” response. And finally, the student could adapt the practice to the situation.

Almost everyone would say that the last choice is usually the right one. So why do students so seldom do this? Why do they usually just try to second-guess what the expert would want them to do? In my experience, it is because they don’t truly understand WHY the expert was using the practice. Even if they understood every aspect of WHAT the practice involved (which itself is unusual in a short class), they don’t understand WHY. The bigger problem is, you can’t really tell someone why you are using it, you usually have to show them why you are using it. Only by someone observing the set of Agile practices being adapted into a unique situation is it possible to begin to realize the WHY behind the practices.

So, if you want some examples, why not do some exercises in the classroom?

The Nature of Classroom Exercises

Adding exercises to a classroom training session is an obvious solution to solving the adaptation problem. Give the students an exercise where they need to take the Agile practices and apply them to a “real-life situation” and they will learn the skills. Again, in my experience with training classes, this doesn’t usually happen either.

Why? It finally hit me a few weeks ago why exercises don’t help people gain adaptivity skills. It is because exercises are bounded. Each exercise has a boundary around it, a necessity if you are going to fit the exercise into a class that has a time limit and shared instructor among multiple students.

How does the boundedness of an exercise cause harm? As soon as you create a boundary around a situation, it becomes a kind of game. Figure out what the rules are, what it takes to win (instructor approval), and GO!! The problem is, this isn’t REAL LIFE. It is a game. It has rules. Real life doesn’t have rules. What I’ve noticed with people who have attended an Agile training class is that, the moment they get hit with a big bowl of “real life,” they often respond with the cry “That’s not fair!!”

As an example, let’s say a new Agile team has been through training, done all the exercises, and now is starting their first iteration. The project work is identified and the team begins. Halfway through the iteration, the Product Owner declares that this project is no longer the top priority for the team and they need to switch to a new project. “That’s not fair!!” the team says, “You broke the rules!!”

As silly as it sounds, this becomes an instinctive reaction if you’ve only trained a person using exercises and/or games. I say that the reason exercises and games can never substitute for real life is because of their bounded nature. They provide a sense of comfort and naivety that has no place in the real world. The highest qualification a team member can have on an Agile team is their ability to adapt. What is “Agile” if not adaptivity??? Training them in “best practices” using exercises and games is the worst way to help them become adaptive. The problem I see is that our training methods, using best practices and exercises/games, are actually working against our goal of achieving agility.

The Apprentice Model

Okay, Kulak, what should we do then? In order to answer that question, we have to look back at how we did training before the industrial revolution became the model for our classrooms. How did a person learn to become a blacksmith? They became an apprentice of someone who was already a blacksmith. They worked side-by-side with the more experienced person and learned the trade, bit-by-bit. This took years and years.

Today, we don’t have years and years for anything. But we can still take this model and try to fit it to our circumstances in helping people “become more Agile.” Let’s examine how that is possible.

Quick Classroom, Long Coaching
With Pillar, we have had the most success using very short classroom training sessions followed by long periods of pairing and coaching. The classroom training seems to provide the most benefit if it consists of a majority of theory, and does not focus too much on exercises. Then the follow-up with pairing and coaching lasts for weeks or (preferably) months. This involves doing the real work for the team, with a team that has some client staff and some Pillar staff, working side-by-side with everyone working towards the velocity of the team. By solving real-world problems together, and discussing why certain problems get solved. But even that is not enough. We’ve found that there need to be an additional dose of theory as the pairing/coaching continues. So we hold “Lunch ‘n Learns” or even just team meetings where we discuss the issues of the day and how those relate back to the underpinnings of Agile. In my experience with teams, these “Agile Salon” or “Agile Secrets!” sessions are quite a bit of fun. The only negative feedback I’ve had on them is that we were making too much noise during them and disturbing the surrounding teams with our discussions and laughter.

For me, this has been the easiest way to get people into the world of Agile. What has been your experience?

Photo credit mdanys on Flickr

No responses yet

Apr 06 2010

The Agile Team Lead Role

Published by darylkulak under Uncategorized

Jazz Band

Several Pillar people have been hosting a conversation about the emerging role of “Agile Team Lead.” Our initial problem was that we needed to take the “Project” out of project management, and we also wanted to take the “Manager” out of the project manager role.

But, much more than a mere name change, the Agile Team Lead is a multi-faceted person who can help the team in many ways, and can work with stakeholders outside the team room effectively.

Here are the main posts on Patrick Wilson-Welsh’s blog from a few months ago. The comments on the blog posts are also worth reading.

http://patrickwilsonwelsh.com/?p=170

http://patrickwilsonwelsh.com/?p=258

Let us know what you think.

Photo credit Professor Bop on Flickr.

No responses yet

Mar 24 2010

Five Symptoms of Mechanical Agile

Published by darylkulak under Uncategorized

Gears - Flickr - credit to gfpeck

This is another excerpt from my upcoming book “Agile in the Bloodstream: Creating Change-Ready Teams Using the Power of Systems Thinking.” It was also the basis of my talk at Agile 2009. I hope you enjoy it.

Although I’m an Agile coach by trade, I’m really a storyteller. In this article, I’d like to tell you five stories, mostly based on real life that might help you see how Agile can become mechanical. I have changed the names to something ridiculous to make sure I don’t implicate anyone.

Agile Expert Syndrome

Once upon a time, in a company called Neverland Insurance, there was a team and an Agile consultant. Together, they decided to try to build an application. The team was about ten people, and the Agile consultant had a really, really good reputation as a brilliant person and dedicated Agilist. The team felt lucky to have him. The Agile consultant’s name was Sticky LaGrange.

Sticky helped the team get started and taught them all the Agile practices. The team carefully followed Sticky’s words and asked him questions whenever they weren’t exactly sure what to do. Sticky was very helpful and patient. Not only that, but Sticky prided himself on writing more code than any other team member, even though he was spending so much time coaching people. Sticky was truly amazing.

At the end, the application was finished on-time and within budget. Everyone at Neverland was so impressed. The team was so proud.

Then the wicked king of Neverland cut budgets and the team had to say goodbye to Sticky. Surely they could they succeed without Sticky, he had taught them so well. So the team went on to another application and began work. They tried to remember everything that Sticky had told them. If in doubt, someone in the team room would inevitably ask “What would Sticky do?” The group would try to remember what Sticky would have done and then replicated it faithfully.

But things were falling apart. Different team members remembered Sticky’s advice differently. And sometimes, inexplicably, Sticky’s advice seemed to be wrong! When applied in this new situation, Sticky’s advice broke down. How could Sticky be wrong?

Some team members said that maybe they should go beyond Sticky’s advice. But other people thought this was a terrible idea. “That’s not True Agile!” they cried. Why deviate from Sticky’s advice if it had worked so well the first time?
Unfortunately, the team at Neverland had fallen into what I call the Agile Expert Syndrome. This is when people feel like they have to follow the advice of an expert, either in the form of a consultant or a book or an article.

Whenever a team gets into this compliance mode, they are in trouble. They are performing Agile mechanically. And teams that are doing Mechanical Agile always get into trouble, because they will always hit a snag that falls in between the advice they received from the Expert. And as soon as that happens, they will get into a rut where they are trying to guess what the Expert would do, instead of applying their own intelligence and doing the best thing they can think to do.

Separation of Decision-Making and the Work

Once upon a time there was a clothing manufacturing company called Cheap Green Shirts.com. The company had several Agile teams that were doing a great job and were highly productive. Their velocity was high, the teams were happy and the business was benefiting.

“I think we can juice these teams up even more,” said one of the vice-presidents. “I’ve noticed that Team A is doing significantly better than the other teams, so we should take the best practices from Team A and give them to the other teams. That way, we’ll have all teams performing at the level of Team A. It will be great!”

So the vice-president set up a group of Agile experts that he called a Software Engineering Process Group (SEPG) that was able to advice the teams. The SEPG (pronounced seepage) experts carefully examined each practice used by each team, harvested them and chose the best of the best, then gave them back to the teams.

Surprisingly, the teams didn’t use many of the new practices. The SEPG experts were incensed. “These teams don’t want to learn,” the SEPG experts groaned. “The SEPG dudes don’t understand our work,” said the teams.

So the vice-president mandated that the groups use what the SEPG experts had come up with. The groups dutifully used the new practices. At this point, velocity dropped for each and every group. How could this happen? The SEPG experts explained “The teams are doing the practices wrong!” The teams replied “These practices don’t work for us.”

The vice-president fell into a mechanical Agile problem that we call “separation of decision-making and the work.” The further the decision-making happens away from the person doing the work, the worse the result will be. The SEPG group was far removed from the teams, they weren’t familiar with the details of the day-to-day work, and so , even though they were experts, their recommendations failed miserably. At the beginning, the teams were making their own decisions about which practices to use, which ones were best for them. By removing that decision-making from the local team members and giving it to a separate group, the vice-president reduced velocity, team satisfaction and caused problems for everyone. The vice-president was thinking that the teams were machines, not people.

Blame the Person, Not the System

A company had two teams working together. One team was providing a set of requirements for the other team to implement in code. The first team we’ll call the Uppities, because they were upstream in the process. The second team we’ll call the Downers, because they were downstream in the process.

First of all, the Uppities and the Downers were both doing Agile, just different variations. The Uppities were on a longer iteration cycle of 6 weeks, whereas the Downers were using 2 week iterations. But everyone was doing some flavor of Agile.

Still, the Uppities did not get along too well with the Downers. The Uppities tended to have big emergencies and would dump high-priority work into the Downers area, even in mid-iteration. Since the Uppities work was the most important work in the company, the Downers had to comply.

One day, I was in a conversation with someone from the downstream team, the Downers. Let’s call him Donny.
I asked Donny what he thought was the origin of the conflicts between the Uppities and the Downers. “Well, it’s the Uppities, of course!” he said. “They have no respect for other teams! They think they own the place!”
I asked Donny if he could imagine what it was like from the Uppities perspective.

“Oh sure, that’s no problem. I used to work there,” Donny said, to my surprise. “And when I was an Uppity, it was pretty obvious that the Downers were the problem. But now I can see the REAL story, that the Uppities are the entire problem, and not the Downers!”

I couldn’t help wondering if Donny was falling into another aspect of Mechanical Agile, which I call “Blame the Person, not the System.” Donny, no matter which team he belonged to, was thinking that the other team was the problem, instead of thinking that the system was the problem. By system I don’t mean the software application, I mean the methods of interaction between the two teams, even the culture. There were probably problems in the overall system that were causing this conflict, and those systemic problems were being misinterpreted as “the other guy’s fault.”

If we can always take an attitude of “Let’s fix the system together” rather than getting into a blame-game of determining who’s at fault (Hint: it’s always the other guy), we can make much more progress.

Just Tell Me What to Do, Boss

My employer, Pillar Technology, has a very rigorous interview process for developers. Part of our process is that the prospective recruit has to pair with one of our Pillar experts to allow us to evaluate the person’s ability to perform as a test-driven developer.

In one case that I was able to observe from across the team room, a prospective recruit came into the room and sat down with our Pillar expert. We’ll call the prospective recruit Emo. Since this was about test-driven development, the Pillar expert asked Emo to look at some existing code, and an existing unit test, and try to figure out how to make the test pass.

The test was very simple. It provided some input and then asserted that the variable being returned should equal “12.”

Emo looked at the test, then flipped over to the code. After a quick glance at the code, Emo took the cursor and deleted it all. In its place, Emo wrote code that would make the return variable equal to “12.” Then Emo smiled at the Pillar expert.

This was both the shortest pairing interview I have ever seen, and the longest post-interview retrospective.
Emo fell into an aspect of Mechanical Agile that I call “Just Tell Me What to Do, Boss.” If our team members get into a mindset where they just want to take direction from their boss, we’re all in trouble. We need every team member to be applying their full intelligence to every problem. As soon as they get into the mode of following directions, then we get solutions like what Emo did in the interview.

Team members can get into this way of thinking quite easily. Managers who are coercive create team members like this, because people are afraid to do anything different than exactly what the manager specified. But even the presence of detailed documentation on “what you should do” can create these types of team members.

We need to do everything we can to avoid getting our team members into a mindset like poor Emo.

Competition Between People and Teams

A VP at a telecom company had six Agile teams all doing great work. Then he had an idea. He realized he could “kick it up a notch” by getting his teams to compete against each other for a monthly prize.

We’ll call this VP Emeril.

Emeril said he would offer free lunches for a week for the team that could top the other teams in velocity.
The competition began. The teams immediately started looking for ways to game the system. They found that if they made their storypoints smaller, they could deliver more of them without doing extra work. The teams went through a period of “storypoint inflation” for several months until the VP realized what was going on. Finally, he mandated that the storypoints had to be all the same size.

Then the teams realized that quality and defects were not part of the measurement, so they reduced the amount of time they spent on testing in each iteration. Sure enough, the points went up, but so did the defects.

So, the VP eventually jumped in and mandated that defects would be part of the measurement. The more defects found, the lower the team would score.

This sounded okay, but the VP didn’t realize that the testers were also part of the teams. They were also in line for free lunches. So, by making this third decree, the VP was telling the testers “Don’t find too many defects or you won’t get the free lunches.”

And on it went. You can imagine that these competitions didn’t help things much. And the cooperation that naturally was occurring between the teams disappeared. Why help the other team gain velocity at our expense??

The VP was suffering from a symptom of Mechanical Agile called “Competition Between People and Teams.” Put people or teams in competition with each other and you will ensure that they will meet your targets, even if they have to destroy your organization to do it.

Five Symptoms – Five Stories

These are some of the problems that keep your Agile teams from scaling up and sustaining. And they all relate back to treating people like machines instead of like people.

To solve the Mechanical Agile, no amount of new practices or Lean, Kanban or Six Sigma will help you. Scrum of Scrums won’t really help you. More meetings won’t help you. Only addressing the attitude of thinking of people as machines will help you.

Some Ideas That May Help

Here are some suggestions to improve your teams’ ability to scale and sustain. These aren’t meant to be singular solutions to the first five symptoms, you could say that all five of these solutions solve all five symptoms.

If You See a Best Practice By the Side of the Road – Kill It

The idea of “best practices” can become quite mechanical. It can lead directly to Agile Expert Syndrome of any of the problems we’ve discussed above.

I’m not saying that you can never take a practice that you see elsewhere and try it in your situation. I’m saying that you shouldn’t do it blindly.

Blindly following “best practices” always gets us into trouble. We can try to understand practices used elsewhere, but then we can jump into answering “How can that work here? How do we need to change it to fit?”

Close the Gap Between Decision-Making and the Work

As we saw with the SEPG experts, it hurts when we take decision-making away from the person doing the work. The further that gap, the bigger the hurt. We need to move decision-making as close to the work as possible. If the person doing the work can make all decisions about that work, that is optimal. If we have to separate it for some reason, try to keep it as close as possible (within the same team, hopefully).

Break Down the Boundaries Between Teams

A manager’s biggest responsibility is to break down the boundaries between teams. Having teams compete against one another erects boundaries. A manager stating that “Everything must go through me” to communicate to other teams erects boundaries.

The best Agile manager will work to remove boundaries, finding ways the team can have unfettered communication with other teams, groups, departments.

Value the Unstructured

Quite often when we see a problem, we try to invent some structure to fix it. Have two Agile teams that need to communicate more? Set up a Scrum of Scrums meeting.

But there is also value in the unstructured. Sometimes it is worth trying to find a way to solve problems that doesn’t involve more structure, more meetings, more roles, more documents, more setup.
Are there things we can change about our attitude that can improve the situation? If so, what can we do to change our own attitudes? How can we change the culture of the way work is done in our team?

Avoid Over-Engineering Your Processes

We often use the term software engineering to describe how we create software. Software, once created, is certainly mechanical, so thinking of ourselves as building something mechanical can make sense when describing software creation.

However, it can cause trouble when we try to engineer processes. Our processes cannot be mechanical, for all the reasons in my stories above. They have to be living, breathing processes that can adapt effortlessly. The only way to have processes that are alive like this are to have openings in them for people to do what they think is the right thing to do. We need to allow people to act like people, and not try to force them into a machine model that we’ve created for them.

Photo credit – gfpeck on Flickr

4 responses so far

Feb 22 2010

Process or People?

Published by Todd Kaufman under Uncategorized

Recently we were gaining feedback from a client when they were at their most honest (after a few beers) and my colleague posed the question “Is it our process or our people that add more value?”. We debated it on our current project and past experiences and my initial gut reaction was that it is definitely both. I’ve been on projects with good people using big up front design, heavyweight documentation for documentation’s sake, and a lack of automated testing and I personally felt the lack of efficiency and tremendous amount of waste that the team produced. They were some of the better software developers I’ve worked with though, so the process is definitely important.

Conversely I’ve worked with or managed teams that leveraged agile methodologies and lean processes and tools and I’ve seen first hand the friction that one or two people can produce that bring these otherwise highly capable teams to a halt. Whether the issue was ego, lack of experience, unwillingness to learn, or inability to improve, if these people were surrounded by other talented individuals and a viable process, how could they bring an entire team down around them? Obviously, people are just as important as the process.

In each of the instances where individuals created havoc, the friction was caused by a person with a different set of values than the rest of the team. One of the things that really excites me about my current team is that there is no question what motivates us to sling bits on a daily basis. We are striving to delight our customer with the software that we produce. End of story. There are no misconceptions among the current team or potential team members about what we do, so there are no issues with individuals having values that are contrary to the overall team goals. We are lucky in that we also have a proven, lightweight process that enables them to be successful. So back to the original question, is it the people or the process?

At the time we discussed this, the agile manifesto value of “ Individuals and interactions over processes and tools” did not even occur to me. The thought leaders those many years ago already answered this question in the same form as my client. Both can help, but the key is people. In my own personal experience however, I saw poor results with great people, so what gives? Further reflection revealed that the missing ingredient with that fore mentioned team was empowerment. Bringing great people onto a software development team can yield equally good and bad results, the key is to make sure that these team members are empowered to do what’s right by the end goal. Empowered teams will have the wherewithal and courage to stand up and change a process that is not working. They will also become self policing and weed out other team members that are later found to have a different value system than themselves. In short, hire great people, empower them to do what’s right by your business, and then stand back and let the process evolve around them.

Photo courtesy of marianovsky on flickr.

No responses yet

Next »