Business Value vs. Customer Value

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.

Agile Misconceptions

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.

Recipes are for Learning, not for Real Life

Recipe BookPeople 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.

Related Articles

Walla-Pa-Looza 2010 – A Celebration of Hope, Dreams and Cures

Wow, look at all the sponsors Walla-Pa-Looza has this year!

It was a short year ago that the idea for Walla-Pa-Looza was born out of the need of one guy to do what he does best and throw a party to make a difference.

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.

Cancer Fund Raiser for the Gruber Family at Mixteca Tequila Bar and Grill on February 21, 2010

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.

Does The Language We Use Make A Difference?

I was reading the article Run IT as a business — why that’s a train wreck waiting to happen and it got me to thinking … which can be dangerous. The article specifically talks about how the idea of “running IT as a business” has unintended consequences, one of which is thinking about folks outside of IT as “partners” or “customers” and how it effects the behavior of the organization.

How does the language we use effect how we behave? Is it possible that the common practice of using terms like “partner” and “customer” causes us to behave in such a way that we are disconnected, at least mentally or emotionally, from the people that we try to make a difference with?

This has long been a pet peeve of mine. I think these terms cause an artificial separation between groups. An example that I used in a meeting recently:

At a company I worked for at one time, it was impossible to get a software release out without incident. There was not enough structure, and it was obvious that tools were required to automate the process that were not available at the time, for the particular platform we were working on.

Thats right folks, this was a time in which even Capistrano didn’t exist.

I wanted to help solve the problem. At the time, with the specific deployment model this company used, solving this problem required access that I did not have. Because I was not part of the group that got this access, I was not able to get it – until I transferred.

Yes, I actually transferred to this group to solve the problem. Two days later, I had the access required.

Same person – different access.

Much feverous work ensued. Finally it was done. The problem was solved.

So I transferred back to my previous group. Guess what went with the transfer?

Yep – the access.

Same person – different access.

It sounds ridiculous doesn’t it? But it happens – a lot.

In corporate culture we tend to use terms like “Partner” and “Internal Customer” to reference each other. I think it often causes unintended consequences.

It’s kind of funny. As I was telling this story, I thought about the story of the Sneeches. You know, the folks who some had “stars on thars” and some didn’t. Each were treated differently according to the status of the markings on their bellies. In the end, they were all the same – they just didn’t know it. Actually, in the end, when the markings were automated, no one knew Who was Who.

Corporations spend (and waste) a lot of time fighting who is at what level, whose responsibility is whose. Defining roles and their responsibilities rather than getting things done. Its not that defining roles and responsibilities is bad, but we tend to confuse people with roles and in doing so keep them from performing at their full potential. We fail to realize that people may have many skills and can serve multiple roles.

The next time you use the term “partner” or “internal customer” – think about this a bit. It might make you think a little different. It’s definitely been something I’ve been thinking about lately.

Setting Up A Caching DNS Server on OSX Server

I’ve been running the same Linux server for about 10 years. Consequently, its pretty slow and outdated, and when I finally had time to upgrade it to Ubuntu from SuSE 9 while I was on vacation, found that I couldn’t really get anything but Ubuntu 8.04 installed on it. So it was time for an upgrade.

I opted to go with a Mac Mini server – for a few reasons. The price was basically comparable to an Intel server with the same technical specifications (minus any kind of CDROM drive, which I found out later) – but the big selling point for me was the amount of space I could save in the office with the Mini. A side benefit was, of course, being able to play with Snow Leopard Server.

After the initial set server setup – which was painless – my first task was to create a caching DNS server so that all of the machines in the house could point to the same place they were when the Linux server is shut down. One of the primary purposes of the Linux server over the years, aside from being a file server, has been to cache and manage local DNS for the machines in the house. I already had plans to run an Ubuntu Server in a VM on this box to replace my aging Linux box (I still need Linux around), but didn’t think it was acceptable to have to boot the machine, THEN a VM in order to have DNS working. I also did not want to do a DNS setup on a box by box basis on every machine in the house.

I was a little confused at first. I’m used to configuring bind directly. After some googling around and not finding much of anything around doing this on OSX Server, I posted a tweet asking if any of my followers knew of a HOWTO that would explain what I needed to do.

I actually tweeted a little too soon. I think I found the settings about 2 minutes after the tweet went out. It was way easier than I thought it would be and I thought I’d throw up a quick step-by-step tutorial so that folks wanting to do the same thing could save themselves a couple of seconds.

So here we go.

In the dock, find the “Server Admin” icon and click it. It looks like this:

OSX Server System Admin

OSX Server System Admin

When the “Server Admin” Tool opens, you will see the main screen like the following. The blue arrow is pointing to the domain you specified while setting up the server.

OSX Server Admin Tool Main Screen

OSX Server Admin Tool Main Screen

Open up the domain for your network, and you will see a bunch of services to configure. Select DNS as shown in the following screen shot:

OSX Server Admin Services Menu

OSX Server Admin Services Menu

Once you select DNS in the side navigation, select “Settings” at the top. This will show you the following screen:

Server Admin DNS Settings Screen

Server Admin DNS Settings Screen

You’ll see a box conveniently titled “Forwarders”. Add the IP addresses of the DNS servers you would like to forward requests to in this box by clicking the ‘+’ key and adding each independent IP. As you can see here, I am primarily using Open DNS with Google DNS as a backup. Trust me, contrary to the picture, OpenDNS is first.

Once you have entered your DNS IP addresses, click “Save”. Point your boxes to the IP for your Mac Mini server and voila! You have a caching DNS server.

I hope this was helpful. For those of us who are used to configuring bind with vi, it may be a little confusing or intimidating to try to mimic this functionality on OSX Server. As you can see, its really a no-brainer – and no text editors need be opened.