The Prisoner's Dilemma in Software Development
Last updated: April 16, 2024 Read in fullscreen view



- 01 Oct 2020
Fail fast, learn faster with Agile methodology 864
- 18 Oct 2020
How to use the "Knowns" and "Unknowns" technique to manage assumptions 814
- 14 Oct 2021
Advantages and Disadvantages of Time and Material Contract (T&M) 703
- 15 Oct 2022
Project-based team model for one-off and pilot software development projects 672
- 19 Oct 2021
Is gold plating good or bad in project management? 672
- 08 Oct 2022
KPI - The New Leadership 514
- 19 Apr 2021
7 Most Common Time-Wasters For Software Development 513
- 19 Mar 2021
Selective Outsourcing of IT Functions - a new trend in business outsourcing 443
- 16 Dec 2021
Why outsource Python development of your project? 432
- 08 Feb 2022
Software Development: Fixed Cost or Opportunity Cost? 412
- 19 Oct 2020
The hidden costs of outsourcing software development 408
- 28 Dec 2021
8 types of pricing models in software development outsourcing 388
- 10 May 2021
What are things you should look for in a good IT outsourcing company? 380
- 03 Oct 2020
Outsourcing Your MVP Development - Streamlined Solutions for future 373
- 14 Dec 2021
The Top 10 Problems with Outsourcing Implementation and How to Solve Them 364
- 31 Oct 2021
Tips to Fail Fast With Outsourcing 359
- 11 Jan 2024
What are the Benefits and Limitations of Augmented Intelligence? 357
- 15 Aug 2021
TIGO Rate Formula - Things the partners should know 353
- 12 May 2021
The Real Cost Between Outsourcing IT vs In-House: A Quick Comparison 348
- 06 Oct 2021
Intellectual property issues with outsourcing software development 345
- 23 Sep 2021
INFOGRAPHIC: Top 9 Software Outsourcing Mistakes 338
- 01 Sep 2019
Outsourcing Software To Vietnam: Facts, benefits and limitations 326
- 10 Dec 2023
Pain points of User Acceptance Testing (UAT) 322
- 24 Nov 2021
What is the Actual Cost of Hiring Cheap Developers? 320
- 17 Jun 2021
What is IT-business alignment? 318
- 06 Feb 2021
Why fail fast and learn fast? 311
- 22 Mar 2022
8 Mistakes Marketing Agencies or Consulting Firms Make When Outsourcing Web Development 307
- 03 Nov 2021
7 phases of Odoo Implementation and Development: Can they be outsourced? 300
- 13 Oct 2021
Why Outsourcing Software Development Services Is Gaining Traction With Non-Technical Leaders? 289
- 31 Dec 2021
Outsourcing Software Development to mitigate the impact of COVID-19 284
- 01 Jan 2023
4 New IT Outsourcing Pricing Models to consider in 2023 282
- 21 Oct 2021
Advantages and Disadvantages of IT Outsourcing 280
- 13 Dec 2020
Move fast, fail fast, fail-safe 280
- 12 Oct 2021
Vietnam outsourcing path - the silk road connecting ASEAN with the developed countries (EU, US, Japan...) 279
- 25 Nov 2021
Low-Cost Software Development: Buy Nice or Buy Twice? 267
- 02 Mar 2021
Estimate the Cost of Software Development 262
- 04 Jan 2021
VIETNAM AS A BIG ATTRACTIVE DESTINATION IN THE FIELD OF OUTSOURCING 260
- 03 Nov 2022
Top questions and answers you must know before ask for software outsourcing 253
- 01 Mar 2022
Top 5 reasons why outsourcing to Vietnam is a smart move 252
- 12 Jan 2023
Top 10 Trustworthy IT Outsourcing Companies in Vietnam 250
- 17 Feb 2022
Prioritizing Software Requirements with Kano Analysis 244
- 05 Jan 2022
What Outsourcing Engagement Model is Right For You? 242
- 08 Oct 2024
Vietnam: The Rising Star in Global Outsourcing – Trends and Costs for 2025 237
- 01 Apr 2021
IT Outsourcing to vietnam: Why It Is A Good Choice? 235
- 01 Jan 2023
Top 5 IT outsourcing countries in 2023 235
- 01 Jan 2023
Top Software Development Challenges in 2023 229
- 21 Aug 2022
Forbes: IT Outsourcing Hotspot: Vietnam, A Small But Mighty Powerhouse 228
- 18 Aug 2022
What are the consequences of poor requirements with software development projects? 224
- 10 Mar 2021
The 7 Biggest Mistakes to Avoid Before Outsourcing a Web Development Project 219
- 10 May 2021
Project Audit and Second Opinion Services 218
- 06 Nov 2019
How to Access Software Project Size? 215
- 01 Jan 2023
Software Development Outsourcing Trends to Watch Out for in 2023 210
- 16 Mar 2021
Outsource Data Engineering Services - TIGO Streamlined Solutions 209
- 01 Oct 2022
Vietnam is a favorite supply of IT outsourcing services to Japan 205
- 10 Nov 2022
Poor Code Indicators and How to Improve Your Code? 200
- 04 Apr 2024
Unlock Vietnamese-Japanese outsourcing potential 199
- 11 Mar 2023
Common Pain Points in Software Development Outsourcing 192
- 26 Dec 2023
Improving Meeting Effectiveness Through the Six Thinking Hats 180
- 21 Oct 2022
Outsourcing Billable Rate 179
- 02 Nov 2023
What are the pros and cons of iIT outsourcing? 175
- 01 Jan 2023
Why is Vietnam the Top IT Outsourcing Destination of 2023? 174
- 01 Mar 2023
Bug Prioritization - What are the 5 levels of priority? 171
- 17 Oct 2020
How Outsourcing can Improve Time Management for Better Business 169
- 08 Aug 2021
Why Nearshore Software Development is better than In-House Development? 167
- 01 Feb 2023
[InfoWorld] Is your outsourcer agile enough? 165
- 13 Jan 2023
What are the Hourly Rates in Offshore Software Development? 156
- 09 Jan 2021
How can outsourcing enable business agility? 153
- 01 Jan 2024
What The World Is Flat Means to IT Outsourcing 149
- 03 Jan 2023
IT Outsourcing Costs: Is outsourcing really cost-effective? 147
- 01 May 2023
Streamline Your Business with Outsourcing 145
- 01 Jan 2024
Tech Partnerships: Choosing the Right Software Outsourcing Firm in Vietnam 144
- 01 Jan 2024
Hiring Tech Talents in Asia: An Overview of Skills, Costs, and Potential 142
- 08 Jan 2024
Outsourcing on an As-Needed Basis 136
- 01 Jan 2024
12 reasons for software development outsourcing 135
- 17 Jan 2024
What are the benefits and challenges of using multi-sourcing or single-sourcing strategies? 134
- 15 Nov 2023
IT Staff Augmentation Types and the Best Choice for Your Business 133
- 28 Oct 2022
Expect the unexpected in 2023 - How Outsourcing Can Help? 132
- 01 Jan 2024
Software Outsourcing Questions for 2024 132
- 05 Jan 2024
Easy ASANA tips & tricks for you and your team 132
- 07 Nov 2024
Outsourcing Crisis Looming: Will Trump's Policies Transform the Global IT Landscape? 130
- 10 Jan 2024
Facts Chart: Reasons for outsourcing 119
- 09 Sep 2022
Close Collaboration and Communication Can Overcome the Challenges of Distributed Teams 109
- 12 Mar 2024
How do you create FOMO in software prospects? 97
- 14 Mar 2024
Why should you opt for software localization from a professional agency? 85
- 02 May 2021
Outsourcing Software Development: Avoid 8 Mistakes 81
- 21 Aug 2025
Top 30 Oldest IT Outsourcing Companies in Vietnam 53
- 01 Jun 2025
10 Sustainable & Unique IT Outsourcing Companies in Vietnam 51
The Prisoner's Dilemma in Software Development
You, the developer, intend to exchange code for money with your client. If you deliver something that does not work, and the client pays for it, you have received all the benefit of the transaction and the client has gotten the sucker's payoff. If you deliver functional software, and the client keeps it but fails to pay, the tables are turned and you have received the sucker's payoff. If you both perform cooperatively-- you deliver working software and the client pays--you both benefit, but arguably less than if one of you had taken advantage of the other (you have worked harder, presumably, than if you had delivered minimal, nonfunctional code, and the client is out the money it could have kept.) If you both defect, you both lose out but at least the client has kept its money and you retained your code.
In a perfect world, the client would pay you the whole price at the outset of the software development project, and you would always deliver working code. Since this is not a perfect world, the multi-phased software development contract has evolved, with payments made against successfully completed milestones. This style of contract turns what might have been a one-turn game, with no shadow of the future, into a multi-round engagement; each phase of the contract is in effect a separate round of the prisoner's dilemma.
The classic software development contract, with its guarantee and its acceptance machinery, shifts the sequence of turns so that the client, on each round, may determine whether you have cooperated (by examining your code to see if it meets the spec and is functional) before determining its own move.
However, the contract, if well-drafted and fair, also protects you, the developer, by tightly defining the client's expectations and by restricting the client's ability to defect by withholding acceptance. Without such an agreement (which represents an advance compact by the parties to play the cooperation card on each round), it is all too common a spectacle to see a client withhold payment on the last round, to force the inclusion of additional requirements not previously thought of. Even with a contract, this may happen; since the iterated prisoner's dilemma is for a known number of rounds, the client, not expecting to deal with you again, may defect on the last round, simply hoping to keep the balance of its money. But a well-drafted contract will at least limit its ability to get away with such a defection.
By contrast, most defections by developers are the result of negligence, not malicious intent. The shadow of the future lies more heavily on developers, who wish to remain in the business and obtain good recommendations from clients, while most clients are not themselves in the computer industry, don't expect to need further services immediately and do not anticipate any problems finding software developers eager to serve them even if they have burned one or two.
Defection by the client may take other forms than the withholding of money. It might involve a malicious interpretation of an ambiguous requirement, to include functionality that the developer cannot possibly deliver for the agreed price and still make a profit. Or the client may blame you for its own shortcomings or inability to meet its commitments, making you the scapegoat for an internal political struggle.
Axelrod's experiments determined that the most effective, yet simplest strategy in an iterated prisoner's dilemma is "Tit for Tat", in which you begin with cooperation on the first move but then echo whatever your partner did on the last move. Effectively, what this means is that cooperation is always rewarded with cooperation, while defection is immediately punished with defection. Surprisingly, most software developers are constitutionally unable to apply this strategy to their clients, for a variety of reasons. Project managers may be overruled by salespeople or account managers, who think that being soft on the client is the best long term policy. Sometimes a sense of guilt--did you really do a good enough job on the first deliverable?--intervenes. In any event, whenever I hear of a software development contract in which the developer has commenced Phase II even though Phase I has not been accepted and paid for, I know the developer is playing "All Cooperate", a strategy which will certainly motivate the client to play "All Defect", as it has nothing to lose. And the developer will now receive the sucker's payoff on every round.
The moral is that the developer, to protect itself in an unethical world, must be ready to stop performance on the round following a defection by the client. Of course, before deciding to do so, the developer must conduct an objective review, preferably involving peers not involved in the project, to determine its own responsibility--perhaps the client justifiably withheld acceptance because the developer defected on the last round, and does not know it! But, assuming that you delivered working code and the client has failed to pay, going forward and hoping that all will come out right in the end is a sucker's move.
Since a software development contract is almost always for a known number of phases (and therefore the associated prisoner's dilemma is for a known number of iterations) preventing your client's predictable defection on the last round is a knottier problem. By now, the shadow of the future may be relatively slight; the client has a satisfactory product, but can certainly spot some minor bugs, which, instead of submitting to maintenance, it can pleasantly rely on as an excuse to withhold the last payment. The benefit of the acceptance payment retained in its pocket may seem far greater than the benefit of knowing you are happy and available to do business with it again. Here are some strategies developers use to assure cooperation on the last round:
- Include a software key that must be turned over for the product to work after the date by which acceptance was scheduled to occur. Such arrangements must be clearly disclosed in advance, and even then should only be done with advice of counsel. The more such an arrangement looks like an undisclosed time bomb, the more illegal it may be.
- State in your contract that you own the code until the finbal payment has been made.
- Withhold something pending acceptance, such as source code or a class library irrelevant to acceptance testing but crucial for later use of the product.
- Define acceptance so narrowly in the contract that the client knows it is a virtual certainty that, if it withholds the last payment, you will sue and win.
- Work in a niche specialty in which you are the only player or are recognized to be the best--this will increase the shadow of the future, as it is much more likely the client will need you again.
- Include a maintenance phase in the software contract, following acceptance. If the client expects to need you for maintenance it is less likely to defect.
Key Points' Summary
- Software development relationships are iterated prisoner's dilemmas, where developers exchange code for money with clients.
- The developer receives all the benefits of the transaction if the client pays for functional software, while the client gets the sucker's payoff if they deliver nonfunctional code.
- If both parties cooperate, both benefit, but less than if one takes advantage of the other.
- If both parties defect, both lose out, but the client retains the money and the developer retains the code.
- The evolution of the multi-phased software development contract has turned the game into a multi-round engagement, with each phase acting as a separate round of the prisoner's dilemma.
- The classic software development contract shifts the sequence of turns, allowing the client to determine whether the developer cooperated before deciding its own move.
- A well-drafted contract protects the developer by defining the client's expectations and restricting the client's ability to defect by withholding acceptance.
- Most defections by developers are due to negligence, not malicious intent.
- Defection by the client may involve malicious interpretation of an ambiguous requirement, or the client blaming the developer for its shortcomings.
- Axelrod's experiments found that the most effective strategy in an iterated prisoner's dilemma is "Tit for Tat", where cooperation begins with cooperation on the part of the client.