A mind map of how I thought about lean as applied to software development in 2005.
I read an article on the Accurev blog yesterday entitled Three Surprises in Software Development in 2012 that got me thinking. Specifically, it was this quote from the article:
“For every organization that is killing it with Agile, there are five (my agilesta friends say ten) organizations that are limping along, delivering buggy code to their customers, late, and missing committed functionality. And often all three.”
One of the large challenges I see when moving people to agile are the ideas and concepts around “business value” and “customer value”. The term “business value” is usually used synonymously with “revenue” – how much money can we make if we do this thing that we are planning to do. Usually, this number is what gets a project resourced and approved for further development.
In an agile shop, we want to focus on “Customer Value”. “Customer Value” is considered something your customer is willing to pay for. Something they will find valuable, not something you find valuable.
During the adoption of agile practices, one of the first things that needs to be done is the reframe of how people think about the work they are doing from “Business value” (revenue) to “Customer Value”. Building something your customer is willing to pay for. Thinking of it this way, “revenue” becomes a measurement of success, a “side effect” of providing value. This mindset changes the way you think about your product development and the things you do to service customers.
Lean defines three types of work that usually occur in a process:
- Work that provides value that the customer would pay directly for (Value Add Work)
- Work that does not provide direct value to the customer (Non-Value Add Work)
- Work that does not provide direct value to the customer, but is necessary in order to provide value they would pay for (Non-value Add, But Necessary)
Value add work, as mentioned above, is usually characterized as “something your customer is willing to pay for”, while non-value add is the direct opposite. A recent article I read uses blood tests as an example. Customers are willing to pay for the results, not the processes that they have to be subjected to in order to get the results (registration, paperwork, etc).
Once you identify the value add work the objective is to eliminate as much of the non-value add work as possible. You will not be able to eliminate all of it – which is why there is a bucket for “non-value add, but necessary”. Some things, like paperwork and medical history collection are necessary – your customer just doesn’t want to be exposed to it – or would not directly pay you to do it.
One of the trickiest parts of this classification is figuring out the difference between “non-value add, but necessary” and the other two. Many organizations feel that the things they do as part of their process are all “value-add” (why else would they be doing them?), while others try to eliminate anything that the customer is not willing to directly pay for (like testing or quality procedures).
Once we understand the different types of work, we have to go back to the difference between business and customer value.
There is a huge difference between something “your customer is willing to pay for” and revenue. The former is a statement of value from the customer perspective, the latter is a result of doing those things that the customer finds value in.
If you are viewing “business value” as revenue as an organization, you will make shortcuts in quality in order to hit the market or customers as quickly as possible – in most cases exposing quality defects that will effect the customer experience in a negative way. You will “ramp up resources” because the more people you have on the project the quicker you can get it done and usually you will short cycle things like testing, or code reviews because they aren’t serving the purpose of getting the product out so that people will use it.
Even worse, you will give up creative control of your product and add things based on requests of your highest paying customers – rather than think through the experience and do the things that provide your customers real value that they would pay for.
Revenue as the goal of doing something is the classic “Innovators Dilemma”. Companies continue trying to move up market by addressing their larger paying customers while diluting their product – as small upstarts develop products or processes that actually provide value – even though its not as much – at a smaller price tag. I think this “Innovators Dilemma” concept is what Steve Jobs was talking about in his biography by Walter Isaacson, when he said this:
“I have my own theory about why decline happens at companies like IBM or Microsoft. The company does a great job, innovates and becomes a monopoly or close to it in some field, and then the quality of the product becomes less important. The company starts valuing the great salesmen, because they’re the ones who can move the needle on revenues, not the product engineers and designers. So the salespeople end up running the company. John Akers at IBM was a smart, eloquent, fantastic salesperson, but he didn’t know anything about product. The same thing happened at Xerox. When the sales guys run the company, the product guys don’t matter so much, and a lot of them just turn off. It happened at Apple when Sculley came in, which was my fault, and it happened when Ballmer took over at Microsoft. Apple was lucky and it rebounded, but I don’t think anything will change at Microsoft as long as Ballmer is running it.”
Isaacson, Walter (2011-10-24). Steve Jobs (pp. 568-569). Simon & Schuster, Inc.
The goal of a product or service should be providing value to your customers, something they are willing to pay for. Revenue then becomes a side-effect – a measure of success. It becomes confirmation that you are doing the right things.
I don’t believe an organization can implement Agile successfully until this change in thinking occurs. The wrong motivators absolutely effect behavior – and most of the behaviors Agile and / or Lean try to implement is focusing on value first, providing quality software in small increments, and being able to respond to change quicker. The more you are focused on an end for you and not your customers, the more you are moving away from these values.
This doesn’t mean that revenue isn’t important – every company needs it. It means that if you are doing the right things, in the right order, it will follow and keep you going as a company.
A common misconception about Agile software development is that it is not deadline driven and that it is unstructured. Agile development is, by definition, time-boxed and therefore is extremely deadline driven. The difference is that the deadline is the time box and the end date is calculated (or extrapolated) by average team velocity.
Another misconception is that agile development is undisciplined, or unstructured. In reality, agile is extremely disciplined. However; disciplines tend to be thrown overboard when an organization starts using velocity as a productivity measure to hit a predefined scope, a predefined schedule, and a predefined budget, all of which cannot change. This principle applies to anything, even waterfall.
Another frequent “management” misconception of agile is that it is just “breaking things into small pieces so that you can get more done”. It’s not. It is the ability to adjust to changing requirements, by deferring commitment to the whole and developing incrementally – reprioritizing each iteration.
Finally, to quote the Poppendieck’s, “To move faster, you have to slow down” . In order to increase productivity, you have to work at a teams velocity (the point at which they are most productive), while keeping all “disciplines” (code review, testing, etc) intact and creating a production ready deliverable, at some level of scope, every sprint. This is what the team is capable of producing. Pay attention to it – and schedule accordingly. You cannot dictate velocity.
People like recipes. We’re always looking for the next ten step way to improve what we do and how we do it. We see it in leadership trainings, “methodologies”, and pretty much any self improvement or team productivity books that we read. Each of the above give frameworks along with classifications of things that you can use to solve a particular problem.
What gets lost a lot of the time is that the classification of things and the frameworks are written to teach, not to use in every day life. While you might have to consciously think about the way to classify something at first, while you’re learning, the key point of these things is to give you a way to classify and deal with information while you are learning. At some point, the idea is that the framework will fade away and you will innately have the tools at your disposal, without having to think of the distinct classifications or step by step instructions to deal with them.
Its like learning to ride a bike. When you are learning to ride a bike, you learn balance, steering, and the fact that you have to push one foot at a time on the pedals to achieve the motion you need in order to propel the bike forward. At first, its very awkward. Your steering is shaky, you don’t pedal fast enough to get the inertia needed to move the bike forward, because you are thinking of all of the things you need to do at the same time to achieve your goal. Pretty soon though, you internalize all of the independent skills you need that make up this thing called “riding a bike” and it becomes one thing rather than many concurrent things you have to think about. Pretty soon, you are modifying or adding to what you know and doing things like riding no-handed, wheelies, or whatever other things you can think of that augment your experience of this thing called “riding a bike” that makes it a little more “your own”.
Methodologies and religious arguments around software development have always put me off. When I’m asked to participate in a “methodology” discussion I usually cringe, because I know that 9 out of 10 people feel that the methodology as it is written is the goal, rather than taking the methodologies as a set of tools that are used in the learning stage to develop competence and later modify for the environment in which you work. This tends to get lost most of the time and you find teams and people doing things as they were specified in the recipe, whether they are useful or not, rather than adapting the tools – or even throwing some of them out if they do not apply.
“Agile” methodologies are a perfect example of this. You have specific formats for standups that are interpreted literally, specific tools like automated builds, unit tests, user stories, and burn down charts. Some methodologies include specific artifact definitions like activity diagrams, object diagrams, 4 + 1 architectural diagrams. In most cases you find people using all of them as they were specified in the book because they haven’t moved to the point where they understand the purpose of these tools, what they accomplish and how they do or do not fit together for a particular situation.
Agile software development is not the format of the standup or the fact that you have automated builds. As far as I can tell, Agile software development achieves the following:
- Get the customer involved and the team communicating.
- Break the functionality required into small, incremental, implementable pieces that are prioritized around both business and technical dependencies – with the goal of creating production ready code. Small iterations also give you the ability to adapt to changing requirements. What seems important at the beginning of one iteration might not be as important as something in the next iteration – so you plan incrementally.
- Create production ready code at the end of each iteration, with rapid feedback cycles – this is the purpose of unit tests, and automated builds – to be able to “stop the line” when something breaks without a lot of manual intervention – and to deliver “just enough value” as soon as possible.
I think the problem is that most of the time people do not look at the philosophy around a methodology. Most of the tools that appear in these methodologies have a purpose to get to a certain philosophical goal, like the bullets listed above. Unless you understand the goal, you can have perfect stand ups and not ever really “implement agile” in the way that it was intended.
- What are your agile goals? – A Drop In the Stream
Wow, look at all the sponsors Walla-Pa-Looza has this year!
This Saturday, July 31, 2010 the second annual Walla-Pa-Looza Music Festival is happening at the Johnsburg Community Club in Johnsburg, Illinois.
This year the organization has had a big year – starting their blog, partnering with the Sage Cancer Center, getting their 501(c)(3) non-profit designation, and a slew of new sponsors that you can see in the image above. They have a great lineup of bands, including Cover Blondz, High Life, Aeth3r, and the premier Journey tribute band of the Midwest, Infinity.
They’ve also put together a High School Battle of the Bands, which makes us all feel young again, doesn’t it?
I’d love to see all of my friends there. Let’s face it, I don’t blog much anymore – so the fact that I am actually writing anything means this has to be a special event.
If you can’t show up at the event, you can always donate to Walla-Pa-Looza by going to their web site and clicking on the donate button.
I’m sure you will feel good knowing that you made a difference for some family that needs help.
Jonna and I eat at the same place every Friday. It’s this cute little Mexican restaurant called Mixteca Tequila Bar and Grill on Route 47 in Woodstock. Mixteca has excellent food and is owned by a couple of really cool people, Claudia and Mike.
As is usual being a chronic handwasher, at the end of dinner I went into the washroom to wash my hands after eating and out of the corner of my eye saw a flyer on the inside bathroom door. It was about a family that the restaurant was doing a fundraiser for.
The Gruber family consists of Joe, Laura and their 2 kids, Joey (6) and Courtney (3). In November of 2009 Joe was diagnosed with testicular cancer and has been receiving treatment. At the time he was working two jobs, neither of which provided benefits.
The restaurant is hosting a fund-raiser for the family to help offset their medical costs as Joe goes through treatment, as well as help them with their mounting bills. The fund-raiser is happening on February 21, 2010 at the restaurant (see link). You can find more information on the family and the fundraiser by from the flyer I scanned when we got home, or at the web site for the event, hosted by the Friends Helping Friends Foundation.
All food proceeds at this event will go to the family.
Jonna and I will definitely be attending and hope that our friends in the area will come and try to help out. If nothing else, you get great food and a good atmosphere to enjoy the afternoon in. The plan is to also have raffles – and the folks throwing the event are looking for donations of items such as gift baskets, sporting event tickets, etc for these activities.
If your not in the area and want to help, you can make donations via PayPal on the Friends Helping Friends web site.