The Prisoner's Dilemma in Software Development
Last updated: April 16, 2024 Read in fullscreen view
- 07 Jul 2024
Top Fintech Companies in Vietnam Driving Innovation Across Digital Banking & Investment 29/54 - 18 Oct 2020
How to use the "Knowns" and "Unknowns" technique to manage assumptions 22/995 - 01 Oct 2020
Fail fast, learn faster with Agile methodology 15/977 - 15 Oct 2022
Project-based team model for one-off and pilot software development projects 11/734 - 24 Nov 2025
Top Blockchain Companies in Vietnam 11/29 - 05 Aug 2025
Why Doesn’t South Korea Outsource Its IT Projects Like Other Developed Countries? 10/83 - 03 Oct 2020
Outsourcing Your MVP Development - Streamlined Solutions for future 10/404 - 19 Oct 2021
Is gold plating good or bad in project management? 8/756 - 10 Nov 2022
Poor Code Indicators and How to Improve Your Code? 8/214 - 21 Aug 2025
Top 30 Oldest IT Outsourcing Companies in Vietnam 8/91 - 25 Sep 2025
A Practical Guide to Secure Online Work for Outsourced Teams 7/59 - 31 Oct 2025
The True ROI of Software Development Outsourcing for Tech Startups 7/59 - 24 Nov 2021
What is the Actual Cost of Hiring Cheap Developers? 7/350 - 22 Mar 2022
8 Mistakes Marketing Agencies or Consulting Firms Make When Outsourcing Web Development 7/325 - 06 Feb 2021
Why fail fast and learn fast? 7/378 - 10 May 2021
Project Audit and Second Opinion Services 6/237 - 12 May 2021
The Real Cost Between Outsourcing IT vs In-House: A Quick Comparison 6/404 - 01 Mar 2023
Bug Prioritization - What are the 5 levels of priority? 6/207 - 14 Oct 2021
Advantages and Disadvantages of Time and Material Contract (T&M) 5/795 - 14 Dec 2021
The Top 10 Problems with Outsourcing Implementation and How to Solve Them 5/377 - 09 Jan 2021
How can outsourcing enable business agility? 5/182 - 02 May 2021
Outsourcing Software Development: Avoid 8 Mistakes 5/91 - 18 Aug 2022
What are the consequences of poor requirements with software development projects? 5/244 - 05 Jan 2022
What Outsourcing Engagement Model is Right For You? 5/290 - 11 Mar 2023
Common Pain Points in Software Development Outsourcing 5/228 - 01 Jan 2024
12 reasons for software development outsourcing 5/148 - 12 Jan 2023
Top 10 Trustworthy IT Outsourcing Companies in Vietnam 4/265 - 31 Oct 2021
Tips to Fail Fast With Outsourcing 4/377 - 08 Oct 2022
KPI - The New Leadership 4/558 - 19 Mar 2021
Selective Outsourcing of IT Functions - a new trend in business outsourcing 4/497 - 21 Oct 2021
Advantages and Disadvantages of IT Outsourcing 4/323 - 07 Nov 2024
Outsourcing Crisis Looming: Will Trump's Policies Transform the Global IT Landscape? 4/160 - 01 Jan 2024
Tech Partnerships: Choosing the Right Software Outsourcing Firm in Vietnam 3/166 - 08 Oct 2024
Vietnam: The Rising Star in Global Outsourcing – Trends and Costs for 2025 3/295 - 03 Nov 2021
7 phases of Odoo Implementation and Development: Can they be outsourced? 3/358 - 01 Jan 2024
Software Outsourcing Questions for 2024 3/145 - 28 Dec 2021
8 types of pricing models in software development outsourcing 3/419 - 28 Oct 2022
Expect the unexpected in 2023 - How Outsourcing Can Help? 3/185 - 17 Oct 2020
How Outsourcing can Improve Time Management for Better Business 3/186 - 13 Dec 2020
Move fast, fail fast, fail-safe 3/294 - 23 Sep 2021
INFOGRAPHIC: Top 9 Software Outsourcing Mistakes 3/413 - 10 May 2021
What are things you should look for in a good IT outsourcing company? 3/407 - 17 Feb 2022
Prioritizing Software Requirements with Kano Analysis 3/285 - 17 Jun 2021
What is IT-business alignment? 3/346 - 16 Dec 2021
Why outsource Python development of your project? 3/445 - 04 Jan 2021
VIETNAM AS A BIG ATTRACTIVE DESTINATION IN THE FIELD OF OUTSOURCING 3/277 - 01 Jan 2023
Why is Vietnam the Top IT Outsourcing Destination of 2023? 3/204 - 01 Jan 2023
4 New IT Outsourcing Pricing Models to consider in 2023 3/323 - 08 Feb 2022
Software Development: Fixed Cost or Opportunity Cost? 3/445 - 01 Sep 2019
Outsourcing Software To Vietnam: Facts, benefits and limitations 3/397 - 10 Dec 2023
Pain points of User Acceptance Testing (UAT) 3/418 - 21 Oct 2022
Outsourcing Billable Rate 3/245 - 03 Jan 2023
IT Outsourcing Costs: Is outsourcing really cost-effective? 3/187 - 01 Jan 2023
Software Development Outsourcing Trends to Watch Out for in 2023 3/273 - 01 Oct 2022
Vietnam is a favorite supply of IT outsourcing services to Japan 3/231 - 06 Oct 2021
Intellectual property issues with outsourcing software development 3/365 - 08 Aug 2021
Why Nearshore Software Development is better than In-House Development? 2/177 - 19 Apr 2021
7 Most Common Time-Wasters For Software Development 2/527 - 13 Oct 2021
Why Outsourcing Software Development Services Is Gaining Traction With Non-Technical Leaders? 2/300 - 15 Aug 2021
TIGO Rate Formula - Things the partners should know 2/423 - 01 Jan 2024
Hiring Tech Talents in Asia: An Overview of Skills, Costs, and Potential 2/149 - 11 Mar 2024
Why You Should Hire Odoo Developers from Vietnam to Customize Your ERP System 2/91 - 01 Jun 2025
10 Sustainable & Unique IT Outsourcing Companies in Vietnam 1/62 - 17 Jan 2024
What are the benefits and challenges of using multi-sourcing or single-sourcing strategies? 1/157 - 01 May 2023
Streamline Your Business with Outsourcing 1/170 - 04 Apr 2024
Unlock Vietnamese-Japanese outsourcing potential 1/215 - 02 Nov 2023
What are the pros and cons of iIT outsourcing? 1/185 - 11 Jan 2024
What are the Benefits and Limitations of Augmented Intelligence? 1/436 - 01 Jan 2024
What The World Is Flat Means to IT Outsourcing 1/159 - 26 Dec 2023
Improving Meeting Effectiveness Through the Six Thinking Hats 1/205 - 05 Jan 2024
Easy ASANA tips & tricks for you and your team 1/181 - 10 Jan 2024
Facts Chart: Reasons for outsourcing 1/133 - 09 Sep 2022
Close Collaboration and Communication Can Overcome the Challenges of Distributed Teams 1/134 - 31 Dec 2021
Outsourcing Software Development to mitigate the impact of COVID-19 1/290 - 21 Aug 2022
Forbes: IT Outsourcing Hotspot: Vietnam, A Small But Mighty Powerhouse 1/243 - 02 Mar 2021
Estimate the Cost of Software Development 1/313 - 01 Mar 2022
Top 5 reasons why outsourcing to Vietnam is a smart move 1/262 - 01 Apr 2021
IT Outsourcing to vietnam: Why It Is A Good Choice? 1/260 - 13 Jan 2023
What are the Hourly Rates in Offshore Software Development? 1/224 - 10 Mar 2021
The 7 Biggest Mistakes to Avoid Before Outsourcing a Web Development Project /224 - 08 Jan 2024
Outsourcing on an As-Needed Basis /144 - 01 Jan 2023
Top Software Development Challenges in 2023 /280 - 15 Nov 2023
IT Staff Augmentation Types and the Best Choice for Your Business /156 - 01 Jan 2023
Top 5 IT outsourcing countries in 2023 /254 - 06 Nov 2019
How to Access Software Project Size? /236 - 19 Oct 2020
The hidden costs of outsourcing software development /434 - 12 Oct 2021
Vietnam outsourcing path - the silk road connecting ASEAN with the developed countries (EU, US, Japan...) /283 - 25 Nov 2021
Low-Cost Software Development: Buy Nice or Buy Twice? /278 - 03 Nov 2022
Top questions and answers you must know before ask for software outsourcing /265 - 16 Mar 2021
Outsource Data Engineering Services - TIGO Streamlined Solutions /236 - 14 Mar 2024
Why should you opt for software localization from a professional agency? /117 - 01 Feb 2023
[InfoWorld] Is your outsourcer agile enough? /183 - 12 Mar 2024
How do you create FOMO in software prospects? /131
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.










Link copied!
Recently Updated News