Aug
17

Agile Fixed Price revisited – part 1

Agile Fixed Price Projects

In 2003 I wrote a two part article on Agile Fixed Price projects: “The Price is Right” and “Do you want Agility with that?“. These two articles were combined into one chapter for the “Managing Agile Projects” book. The tips are divided into three sections, corresponding to three phases:

  • Qualifying: do I want to take this project on and if so, how?
  • Selling: how do I get the contract in such a way that we can succeed?
  • Implementing: now that we’ve got it, how do we make this project a success?

What’s changed since then? What have I learned since then? What would I do differently. Let’s revisit each of those papers and look if the advice is still right. Then, we’ll see some new lessons.

First, let’s re-read “The Price is Right“.

Qualifying Tip 1: Do I know what I’m doing?

I’ll only enter into a fixed-price contract if I can specify, estimate and plan the project as agreed, within a small tolerance.

I need to ask myself four questions:

  1. Am I familiar with the domain? If not, I’ll spend a lot of time learning and won’t be able to help the customer define what they really need.
  2. Am I familiar with the technology? If not, I’ll spend a lot of time dealing with stupid technology issues.
  3. Am I working with my usual team? If not, I’ll spend a lot of time building the team and I won’t be able to use velocity to estimate.
  4. Am I used to delivering projects of this size? I not, I’ll spend a lot of time scaling up my usual practices.

In retrospect: the advice still stands, not just for fixed-price projects.

Selling Tip 1: Don’t respond to RFPs, communicate

Don’t just respond to a written Request For Proposal but establish a real collaboration and communication with the customer.

We’re going to collaborate and communicate anyway, so let’s start now and see if it works before we’ve spend much time in this relationship.

In retrospect: the advice still stands. Some customers prefer not to communicate and keep providers at arm’s length. Do you really want to work with them? If so, plan on a large risk contingency.

Selling Tip 2: It works both ways

Ensure that the contract evenly distributes responsibilities and benefits between customer and provider. Make sure that the customer is committed to doing what you expect of them.

The most important goal of the sales process is to set up a working agreement between customer and provider than leads to success. Always “test” the customer: build in small commitments for the customer and see if they hold their part of the bargain.

In retrospect: the advice still stands. I won’t enter into an agreement that I think is unfair. I won’t start a project unless I have confidence that the customer will do what they’re responsible for. Too many projects go wrong because the customer agrees to do something and then doesn’t take up their responsibilities.

Selling Tip 3: Don’t underbid

Don’t quote a price below cost to win a contract with the intent of making it up later with extra costs.

No unfair contracts.

In retrospect: the advice still stands.

Selling Tip 4: Add enough slack to cover the risks

Do a risk assessment of the project. Add enough slack to the estimate to cover risk, estimation accuracy and (especially) the type of customer you’re working with.

How much slack needs to be added? That requires a lot of experience (see qualifying tip 1) and historical data. For example, what’s the fluctuation in velocity over the last few projects? How does this customer compare to previous customers?

In retrospect: the advice still stands, but I’d clarify that this is a “project buffer“, à la Critical Chain: the extra time does not get added to individual features, but is kept in a “global pot”. If things go better than expected, we add to the pot. If something goes less well than expected we take a bit from the pot. The state of the pot tells us if we’re on track.

Selling Tip 5: Real Business Requirements

Write the specification with the customer so that each feature is well-understood, adds business value and is testable.

We want to write a short, clear and actionable specification without technical detail and just enough functional detail to get started.

In retrospect: I didn’t emphasize this enough. We need to agree on Business Requirements, not System Requirements. What’s the difference? Business Requirements describe what the customer gets out of the project, the value that will be gained and the capabilities that are needed to achieve those goals. System Requirements describe how we will implement the capabilities. The customer doesn’t perform acceptance testing on implementations. The customer accepts when the capabilities deliver the expected value.

Implementation Tip 1: No Change Requests

Never allow Change Requests that increase the scope, cost or duration of a project.

Never. It’s a slippery slope: with each little change the project gets more out of control. I don’t like change.

In retrospect: the advice still stands, you should use “Exchange Requests” instead and only allow changes that are beneficial to the project.

Implementation Tip 2: Spend your slack wisely

Resist the temptation to “slack off” because there’s slack time left.

The project buffer should only be used when things go wrong. Avoid the temptation to “gold plate” features because there’s time left. The team should be energised and motivated to get their work done in time.

In retrospect: how do you implement this? Critical Chain recommends planning with “50% certainty” estimates, estimates that will be too short 50% of the time, to avoid Parkinsons Law. I recommend building a team that’s motivated to deliver quality and business value.

Implementation Tip 3: Simple, honest and correct tracking

Track progress using a simple burndown chart, but only count things that are DONE.

If you have a clear definition of done for every piece of work (and you can have definitions for each column on your kanban board), then you can simply record how much work is done versus how much work you expected to be done. For most projects, the expected amount of work done curve looks close enough to a zone around the diagonal from 100% to 0% done, so that a simple burndown chart, updated regularly, is enough to know where you are. Make sure that the information is visible and understandable to everyone involved.

In retrospect: the advice still stands. The important part is to be able to say that something is done. I’m very strict in this: I prefer seeing the burndown “flatline” because no story is done, than to see fake progress because something is “90% done”.

Implementation Tip 4: Manage your project

The job is not about specifying, estimating and planning perfectly. The job is about delivering what the customer needs.

Attack your risks or they will attack you.

Don’t shield the team. Help them to avoid and solve problems.

Good project managers don’t seem to do a lot and lead pretty uneventful lives.

Success comes from setting up the right project (qualifying) the right way (selling) and then doing all the daily work to keep it on track (implementing). It’s all about actively managing the project with a light touch.

In retrospect: the advice still stands, but to explain how you do this would require (at least) a whole book and lots of experience. Look for the project managers who have a reputation for “calm, quiet” projects that deliver and learn from them.

And the score is…

I still stand by what I wrote then, but I need to explain some of the tips in more detail.

I’ve learnt a lot more about writing contracts and discovering real business requirements.

I’ve also learnt that these tips aren’t enough to run a project, fixed-price or not. Agile (or professional) techniques aren’t an option, they’re necessary. Those are in the second part of the article.

Aug
15

Agile Tour Toronto

Summer in Toronto

CN Tower in TorontoI enjoyed Toronto very much last year, when attending Agile 2008. It has all the attributes of a big, vibrant city but also quiet parks and lakeside where it’s easy to relax.

The most striking thing about the city is its people: they seem very relaxed and easy going, they take the time to enjoy life, they serve Belgian beer and they stop for red traffic lights. Toronto’s inhabitants come from all over the world. The city is one big melting pot where people from all sortsd of backgrounds live and work together. Of course, I’ve only seen the city in summer. I wonder what the city looks like in winter.

Agile in Toronto

This fall, on October 20th, the Toronto Agile community organises their first Agile Tour Toronto. An energetic group of organisers ensures that this will be a day of fun, learning and meeting other people interested in everything Agile. When Gino Marckx is involved you can be sure that it willl look good, be well tought-out and be enjoyable. Gino is also one of the organisers of XP Days Benelux. He’s clearly applying the lessons we learned organising the XP Days. It’s great to see ideas spread. I’m looking forward to the Agile Tour Toronto retrospective results, so that we can learn more.

Go to Toronto

I won’t be able to be there, unfortunately. But you can! Why not send in a proposal for a session? The deadline is September 10th, but if you send in your ideas now you will benefit from feedback to improve your proposal.

If your company wants to connect with the local Agile community, why not sponsor the event? You’ll reach the smartest IT people in the area.

Have fun in Toronto!

Aug
06

The cost of confusing requirements and solutions

A simple requirement

danger_workaroundsImagine this situation: the CIO of a large company decrees that from now “all applications we develop must be browser based“. This becomes a non-negotiable constraint for every new project.

Unfortunately, a browser platform is not the best platform for all types of applications or all environments. A browser based application may not deliver the best user experience or support intensive workloads. It may be hard (or impossible) to access peripherals. It may be impossible to clearly show complex data sets. And when the network goes down, everybody’s work grinds to a halt.

But all the nice developers and project managers say “Yes boss!” and struggle to find workarounds for these difficulties, to satisfy the users. All of these workarounds make development and maintenance more complex. Users make do with what they receive and add more workarounds to deal with the deficiencies in the applications.

The real requirements

What he really meant was that from now on “all applications we develop must run on a small number of standard environments, be easy to deploy to all our users and centrally managed so that development, release and application support costs stop growing.” What’s the difference between this statement and the previous one? This statement sets a goal and constraints within which creativity can flourish. The first statement stifles creativity and stands in the way of achieving the real goal.

How do we find out what the real goal is? Because someone had the courage to ask “Why?” until it was clear what value we were generating for whom. As the “Discovering Real Business Requirements for Software Project Success” book says:

A requirement describes some value we need to deliver to someone.

Do your “requirements” fit this definition? Why not?

The value of analysis

The difference in value and cost can be staggering. The first statement costs the company lots of money and frustration from everyone who uses, develops and supports hobbled, complex applications. It’s a world of compromises. It doesn’t have to be this way. The second statement gives us a fighting chance to achieve the goals.

All it requires is someone to play the role of analyst to help the customer clearly describe what they need. Someone who acts like a detective to discover the real motives and issues.

A good analyst creates options and keeps them open as long as possible. The “Discovering Real Business Requirements for Software Project Success” book helps to get to the core of the problem. This fits well with a quote from “The Toyota Product Development System: Integrating People, Process and Technology“:

  • Classical product development reduces the number of solutions early.
  • Lean product development reduces the number of problems early and leaves as many solutions available as possible, for example by set-based development or by using tradeoff curves.

Is there someone who has the courage and skill to ask the right questions? Who has the tenacity to dig until they find the real business requirements?

Aug
05

Agile Role playing

Agile Team Roles

Rob Bowley has picked up the Agile Roles and Responsibilities Portia and I described on the Agile Coach site.

I had several goals when we published these:

  • Explain what’s expected of people as they join an Agile team
  • Create a smoother transition from traditional roles into Agile roles
  • To emphasize the importance of every Agile Team member implementing the Agile values
  • To make it clear that the whole team works together to take up all the responsabilities we’ve listed

The role and responsibility descriptions are a starting point for your team to agree on responsibilities. Each team should customize the responsibilities to fit their changing circumstances. I’m sure we can improve the descriptions and explain the responsibilities better.

I am not my role! I’m a free man!

S: So, you’re a java developer.
P: I’m not a java developer.
S: I’m sorry, I thought you said you developed in java.
P: I currently develop in java. That doesn’t mean I AM a java developer. I keep my options open.

I now regret using the word ‘Role’. It is almost universally misused:

  • People will identify with the roleand thereby limit themselves: “I am an X, so I can only do Y”
  • People will identify with the role and thereby limit others: “I am an X, so I’m the only one who can do Y”
  • Roles can lead to Silo Thinking: “It’s not my responsibility, it’s not my problem because it’s not my role”. This gets  especially bad if the roles are equivalent to positions or even departments. Imagine the dysfunctions you could create if you had an Analyst department, a Development department and a Test department each trying to optimise their own little goals.
  • Roles get tied to compensation and evaluation, so that every responsibility you take outside of your role is at best a waste of time and could well be detrimental to your career.

Because many people have had negative experiences with roles, they react negatively to those Agile roles. To me, roles are no more than convenient sets of responsibilities. The important thing is that we as team members take those responsibilities.

I’m just playing

I see roles as an actor sees them. Today, I play an Agile Coach. Tomorrow, I’ll play an Agile Project Manager. Yesterday I played Agile Business Analyst because we urgently needed to work out some User Stories.

Another metaphor is that roles are like programming interfaces. An interface means I can expect certain things of anyone implementing the interface. One object can implement many interfaces. An interface can be implemented through the collaboration of multiple objects.

A common misconception is that everyone on an Agile team must be able to play every role. We all play roles according to the need of the team AND our abilities (and interests). But the more people who can take on a role, the less chance there is of that role becoming a bottleneck. Multi-skilled teams can react quickly to changes in needs.

Which roles do you play? Which responsibilities do you take on? Do you get typecast?

Jul
24

The Importance of Accounting

Where would you rather work?

Would you rather be a member of a Cost Centre or of a Value Stream?

Even if you don’t know exactly what each term means, where would you rather work?

Which of the two would focus most on the customer?

Which of the two would be more open to Agile, Lean or continuous improvement?

Accounting matters. Not just for the numbers, but also for the words.

When was the last time you talked to your accountant or CFO?