Some people would like to believe that building complex software is like going to the grocery store: pick a candy bar off of the shelf, ask what it costs and decide to buy it. You get no risk and quick gratification. But building custom software is more like building a race car. A special one-off product to meet exactly the needs of its sponsor: win races.
As a customer, what are you really buying when you contract for software development? You may think you are getting a solution. But what you are really getting is an implementation team. And risk is always part of the bargain. So what you really want is a team you can trust to build your product and to minimize the risk of that choice.
In this article, I present a lightweight, lean approach to selecting a software development partner which should dramatically reduce the risk and cost to all parties.
A customer will often invest substantial effort into creating a Request for Proposal (RFP). I've seen RFP's whose size is measured in binders and the effort to produce them measured in Man-Years. A vendor will often invest a lot of effort into winning a big project. On both sides, this effort produces mostly paper, i.e. artifacts of no value except as means to the goal of selecting a vendor.
On the vendor side, this effort has to be amortized during the execution of the project itself. As there is only one winner, the others make a substantial effort and earn no money. So bidding on big projects is expensive and risky.
Competitive bidding can mean offering ruinous prices. When “winning” means producing at a loss (sometimes to the point where the supplier goes out of business [English translation]), even the customer loses. The supplier may have no choice but to play the change-request game to achieve profitability.
How do you maximize trust and minimize risk and cost? Customers are often willing to work with agile companies on a time and materials basis, once the trust has been established. Trust greatly reduces administrative overhead and enables a collaborative approach, so establishing trust must be the first priority in a project. How do you build this trust?
There are certainly many answers to this question, and some are better than others. Asking for quotes and having talks with the sales & consulting staff is not really enough to establish trust. Much better are working together with the actual team and evaluating real results. Deferring potentially expensive decisions until their implications are clear is usually advantageous. Here is a 3 step approach:
Why is this a lean approach? By deferring the final decision until you have actual experience with the candidates, you reduce the likelihood of picking a candidate that “looks good on paper” but cannot really deliver software. You reduce the risk of your decision substantially.
Identify your candidates and send them the RFP. Ask them questions which will separate the wheat from the chaff, for example:
If the vendors are used to working on an agile basis, they will have no problems with these questions. If they are not, they will probably not even be able to respond, especially if deadlines are kept tight.
You will need to meet with prospective teams for a day or so to answer their questions about the user stories. Afterwards the vendors should be able to size the system and answer your questions quickly.
If there are more than two vendors still in the running, you will need to use the answers and the results of the interviews to trim the field down to two vendors, who then participate in the competition.
Let us assume that you plan to spend $2.4 Million over 12 months, or $200'000 / Month to develop the software. (You got this figure by calculating what the project is worth to the company, perhaps using a double worst case analysis).
The cost of picking the wrong partner is much higher than the cost of working in parallel for a short period of time.
If you add one month's effort to the budget, that would raise the total by 8%. But productivity differences among teams can be a factor of 3 to 10. Furthermore, the cost of delay while you take three months to pick a partner without producing any usable software will be much larger than the cost of redundant development for a short period.
Here are the ground rules. There are two vendors. Both are going to start your project according to the process you defined in the RFP. After one month, both players present an increment of working functionality and you will decide which partner you want to continue working with. The winner gets a full renumeration for the month and a contract for the rest of the project. The loser gets 50% of the renumeration for a month.
Here are the steps in the competition.
You might want to adjust the sprint duration or the trial period depending on the size of the project.
At the end of month, you have not just qualitative and quantitative data on which to base a decision. You have a month of experience working with your new partner. You have some working software (or not). In short, you have much more information to base your decision on.
Everybody wins.
The risks and up front costs of producing and responding to the Agile RFP are much lower than the traditional approach. By working with the teams, you build confidence that you can work with them and that they can build the software you need. You can judge the teams based on working software rather than attractive presentations or other artifacts.
By starting to work on a solution early, you reduce your time to market. You will probably get a better solution, because the competition will spur everyone's creative juices. Even the loser will have some good ideas which become part of and improve the final result.
This concludes my series on Agile Project Planning in general and the Agile RFP in particular. This series was largely the result of a customer project. These are the tools we used and this is how far we have come. What (do I think) was novel in our approach?
The proof of the pudding is in the eating, but I as write this, I do not know if the customer will move forward with the project. So we can't taste the pudding (yet).
How would you implement competitive sprints? To what situations would it apply well or poorly? Have you used a similar approach?
Comments
Comments on "Vendor Selection" article by peterstev
November 1, 2008 by AJ (not verified), 1 year 19 weeks ago
Comment id: 1966
Iteresting article. Selecting a vendor and a team that you can trust to build your product and to minimize the risk of that choice, is absolutely key. In the the case of Business applications:
1. Minimizing risk and cost is an objective, BUT you need to consider TOTAL risk and TOTAL cost beyond just implementation of the application. What about the maintenance of the application once it goes into production? Who is going to maintain it? How do you reduce or eliminate dependency on the vendor? How quickly can you make changes? Are these changes at source code level? If you change vendors, what exactly are you left with – just code?
2. The completion of “bake off” is good idea, BUT it must be a real project, or else the key stakeholders will not participate as they would in a real project.
3. Select the ultimate winner through a competition which produces an increment of working software is a great idea, BUT don’t focus just speed of development, need to test ability to change fast too. This is the biggest making folk make, by not testing how fast the vendor can change the application – change is a given. So suggest that half way thru the competition, you change the requirements – this is where many Agile projects fail – fast to deliver but slow to change.
4. Determining team velocity in Story Points per Sprint is spot on, BUT not just for the development phase – what about maintaining the application once it goes into production?
5. Given the target budget, how much of the functionality do you think can be realized is a good approach, BUT how are the requirements prioritized and how will the vendor handle change requests and additional requests?
6. “Everyone wins” must be the objective, BUT business must win too – they need the application fast but also need to make changes fast and cost effectively. How does the vendor propose handling changes once application is in production? How are change requests gathered, managed, sized and deployed?
In summary, absolutely agree with the importance of selecting the right vendor, especially for Agile projects, as the vendors that do this in a truly Agile way are not the traditional vendors, but rather vendors that have build their business from the ground up with Agile in mind. The other important consideration is what happens when the vendor goes away and how do you protect yourself.
Interested in your comments and thoughts?
AJ
Risks in Outsourcing
November 2, 2008 by peterstev, 1 year 19 weeks ago
Comment id: 1968
Hi AJ,
You raise a number of interesting issues and I guess I could dedicate a whole website to agile contracting. BTW - There is now a working group on agile contracts looking at these issues.
I agree with you 100% about total cost and total risk. The consequence of badly managed risk is cost (or failure), so these two go hand in hand and minimizing risk is a high priority during the early phases of a project. Keeping your options open is a very effective way of minimizing risk, which was one of the inspirations for the this concept.
I am hesitant however to get too prescriptive. If too much is defined in advance, the process is not agile any more. People stop thinking.
Instead, I would (and did) ask the question, 'What are the mistakes we have made in the past which have cost us a lot of money?' (And every one you mentioned has been an issue!) The answers should help focus management on getting the partner relationship right or even asking whether a total outsourcing is the right way to go.
The first month should produce an increment of working software toward the desired solution. The team which wrote the code will continue to use that code as the basis for finishing the product. This is why it is worth paying for, unlike the results of a traditional sales process, which produces nothing useful for the customer and therefore do not merit compensation.
"Bake off" is a not a bad name for the process. Let us remember the objective is twofold: start work on the project and make a final decision on the partner.
How to pick the winner? I was deliberately vague on that point. How would you pick the winner?
Cheers,
Peter
Post new comment