ReviewMyContract.ai
GuidesSoftware Development Agreement Guide

Software Development Agreements: Key Provisions Businesses Must Review

Scope and deliverables, IP ownership, source code escrow, payment terms, change orders, warranties, acceptance testing, data security, limitation of liability, termination provisions, state-by-state comparison, and 8 red flags — everything you need before signing a software development contract.

12 Key Sections10 States Covered12 FAQ Items8 Red Flags

Published March 19, 2026 · This guide is educational, not legal advice. For specific software development agreement questions, consult a licensed attorney in your state.

In This Guide

01What a Software Development Agreement Covers — Scope, Deliverables, Milestones, SOW vs. MSA, and Fixed-Price vs. T&M vs. Hybrid Models02Intellectual Property Ownership — Work-for-Hire Doctrine, Assignment vs. License, Pre-Existing IP Carve-Outs, Open-Source Contamination, and Joint Ownership Problems03Source Code and Deliverables — Source Code Escrow, Build Documentation, Code Quality Standards, Acceptance Criteria, and Version Control Access04Payment Terms — Milestone-Based vs. Time-Based, Retainers, Late Payment Consequences, Payment-for-Acceptance Coupling, and Kill Fees05Change Orders and Scope Creep — Formal Change Order Process, Impact on Timeline and Budget, Unauthorized Work Clauses, and Agile vs. Waterfall Implications06Warranties and Bug Fixes — Warranty Period Standards, Severity Classifications, Response Time SLAs, Warranty Exclusions, and Post-Warranty Support07Acceptance Testing — UAT Procedures, Acceptance Criteria Specificity, Deemed Acceptance Clauses, and Rejection and Cure Periods08Confidentiality and Data Security — NDA Integration, Data Handling Obligations, SOC 2/ISO 27001 Compliance, Breach Notification, and GDPR/CCPA Considerations09Limitation of Liability and Indemnification — Cap Structures, Carve-Outs for IP and Data Breach, Mutual vs. One-Sided Indemnification10Termination Provisions — Termination for Convenience vs. Cause, Wind-Down Obligations, IP Rights on Termination, Transition Assistance, and Survival Clauses11State-by-State Comparison — Work-for-Hire, Non-Compete for Developers, Data Breach Notification, and Key Statutes Across 10 States12Red Flags — 8 Warning Signs in Software Development Agreements That Signal Significant Risk
01Critical Importance

What a Software Development Agreement Covers — Scope, Deliverables, Milestones, SOW vs. MSA, and Fixed-Price vs. T&M vs. Hybrid Models

Example Contract Language

"Developer shall design, develop, and deliver the software application described in Statement of Work No. 1 ("SOW-1"), attached hereto as Exhibit A and incorporated by reference. SOW-1 sets forth the functional specifications, deliverables, project milestones, and acceptance criteria. In the event of a conflict between this Agreement and any SOW, the terms of the SOW shall control with respect to that project only. Client acknowledges that changes to the scope described in SOW-1 may affect timeline and fees and must be addressed through the Change Order process set forth in Section 8."

A software development agreement governs the relationship between a client commissioning custom software and the developer (or development firm) building it. Unlike purchasing off-the-shelf software, custom development involves ongoing collaboration, evolving requirements, and unique intellectual property creation — all of which must be carefully defined at the outset.

SOW vs. MSA Structure. Most professional development relationships use a two-document structure: a Master Service Agreement (MSA) that establishes the governing legal terms (IP ownership, warranties, liability, dispute resolution), and one or more Statements of Work (SOWs) that define the specific deliverables, timeline, and fees for each project or phase. The MSA governs the relationship; the SOW governs the work. This structure is efficient for ongoing relationships because you negotiate the MSA once and can add SOWs quickly. For one-off projects, a standalone agreement incorporating both terms may be appropriate.

Defining Scope with Specificity. The most common and expensive problem in software development contracts is scope ambiguity. Vague functional specifications — "the app should be easy to use" or "the platform should handle all our inventory needs" — create disagreements about what was promised and what additional work will cost. A well-drafted SOW includes: (1) functional specifications describing what the software must do; (2) non-functional specifications covering performance, scalability, and security requirements; (3) a list of specific deliverables (e.g., iOS app, Android app, admin dashboard, API documentation); (4) out-of-scope exclusions explicitly listing what is not included; and (5) third-party integrations, with responsibility allocated for each.

Pricing Models Compared.

ModelDescriptionClient RiskDeveloper RiskBest For
Fixed-PriceOne total fee for a defined scopeScope must be extremely detailed upfront; changes cost extraUnderestimation risk; absorbs cost overrunsWell-defined, stable projects
Time & Materials (T&M)Billed by hours or days at agreed ratesBudget is open-ended; requires active oversightLess financial risk; revenue tied to actual effortExploratory or evolving projects
Hybrid (Milestone + T&M)Fixed fees per milestone with T&M for changesModerate; milestones limit overruns in defined phasesModerate; predictable revenue per phasePhased builds with defined milestones
RetainerMonthly fee for a set number of hoursRisk of unused hours if volume fluctuatesRisk of overwork if scope exceeds hoursOngoing maintenance or support

Milestones. Whether fixed-price or hybrid, most agreements tie deliverables to milestones — defined checkpoints at which specific deliverables are due, reviewed, and either accepted or rejected. Milestones serve two purposes: they create a structured review process, and they link payment to progress. A poorly designed milestone structure (e.g., 90% of the fee due at the start) removes the client's primary leverage for ensuring the developer performs.

What to Do

Before signing, ensure the SOW includes: a detailed functional specification, an explicit list of deliverables, specific milestone dates with associated deliverables, clear exclusions for out-of-scope items, and the pricing model with rate cards or total fees. If the project has any evolving requirements, a T&M or hybrid model is safer than a fixed-price model built on uncertain specs. Get the SOW reviewed by a technical lead who can identify specification gaps before they become change-order disputes.

02Critical Importance

Intellectual Property Ownership — Work-for-Hire Doctrine, Assignment vs. License, Pre-Existing IP Carve-Outs, Open-Source Contamination, and Joint Ownership Problems

Example Contract Language

"Subject to receipt of full payment, Developer hereby assigns, transfers, and conveys to Client all right, title, and interest in and to the Work Product, including all intellectual property rights therein. Notwithstanding the foregoing, Developer retains all right, title, and interest in and to: (i) Developer's Pre-Existing IP, defined as all tools, libraries, frameworks, methodologies, code, and know-how owned or licensed by Developer prior to, or developed independently of, this Agreement; and (ii) Developer's general skills and knowledge. To the extent any Pre-Existing IP is incorporated into the Work Product, Developer grants Client a perpetual, irrevocable, royalty-free license to use such Pre-Existing IP solely as incorporated in the Work Product."

Intellectual property ownership is the most strategically significant issue in any software development agreement. Many clients assume that because they paid for the software, they own it. That assumption is frequently wrong, and the consequences — inability to modify the code, loss of competitive advantage, or dependency on the original developer forever — can be severe.

The Work-for-Hire Doctrine (17 U.S.C. § 101). Under U.S. copyright law, a "work made for hire" is either: (1) a work prepared by an employee within the scope of employment, or (2) a work specially ordered or commissioned if the parties expressly agree in a signed written instrument that it is a work made for hire — and the work falls into one of nine statutory categories. Custom software does not fall into any of the nine categories. This means that unless the agreement contains a valid copyright assignment, an independent developer who creates custom software owns the copyright, not the client who paid for it. A work-for-hire clause alone is insufficient for independent contractors — you need an explicit assignment.

Assignment vs. License. A full assignment transfers all IP rights from developer to client — the developer has no further rights in the work product. A license grants the client the right to use the software without transferring ownership. Most clients want an assignment; developers often prefer to license (especially when building reusable components). The difference matters enormously: with a license, the developer can sell the same software (or substantially similar software) to your competitors.

Pre-Existing IP Carve-Outs. Virtually every experienced developer will insist on retaining their pre-existing tools, libraries, frameworks (e.g., React, Django, Stripe SDK wrappers, custom authentication libraries), and internal development utilities. This is legitimate and necessary — no developer will assign their reusable codebase to every client. The clause above handles this correctly: the developer retains pre-existing IP but grants the client a perpetual, royalty-free license to use it as incorporated in the deliverable. The critical question is whether that license is sufficient for your needs: can you modify the pre-existing components? Can you sublicense them to third parties? Can you continue using them if the developer relationship ends?

Open-Source Contamination Risk. Developers frequently incorporate open-source software into commercial projects. Some open-source licenses — particularly copyleft licenses like the GNU General Public License (GPL) — require that any derivative work also be released under the same open-source license. If a developer incorporates GPL-licensed code into your proprietary software and does not disclose it, your software may be encumbered by the GPL's requirements, potentially requiring you to open-source your entire codebase. The agreement should require the developer to disclose all open-source components, identify their licenses, and warrant that no copyleft-licensed code has been incorporated without written client consent.

Joint Ownership Problems. If the agreement does not clearly allocate IP ownership, and both parties contribute copyrightable elements, joint ownership may result. Under U.S. law, joint copyright owners each have the right to exploit the work independently without the other's consent (and without accounting for profits). This means your developer could independently sell, license, or build upon the software you paid to develop — without your permission and without sharing revenue with you.

What to Do

The IP section is non-negotiable: insist on a full copyright assignment for all work product created under the agreement, with a carve-out for developer pre-existing IP plus a perpetual, irrevocable, sublicensable license for any pre-existing IP incorporated in your deliverables. Require the developer to disclose all open-source components and warrant that no copyleft-licensed code is incorporated without written approval. Review the pre-existing IP definition carefully — a developer who defines it broadly can effectively retain ownership of the entire deliverable.

03High Importance

Source Code and Deliverables — Source Code Escrow, Build Documentation, Code Quality Standards, Acceptance Criteria, and Version Control Access

Example Contract Language

"Upon final acceptance or termination of this Agreement for any reason, Developer shall deliver to Client the following: (a) all source code for the Work Product in a format readable by standard development tools; (b) build scripts, configuration files, and all documentation reasonably necessary for Client or its designee to compile, build, deploy, and maintain the Work Product; (c) access credentials for all version control repositories containing the Work Product; and (d) any third-party licenses, API keys, or credentials used in the Work Product that are assignable. Developer shall maintain all source code in a version control system (Git or equivalent) during development and shall provide Client with read access to the repository throughout the term."

Receiving a working binary or a deployed application is not the same as receiving the software. Without source code and build documentation, you cannot maintain, update, or transfer the software to another developer. This distinction separates clients who truly own their software from those who are permanently dependent on their original developer.

Source Code Delivery. The agreement should specify exactly what constitutes the source code deliverable: all source files, configuration files, infrastructure-as-code definitions (e.g., Terraform, CloudFormation), database schema files, migration scripts, environment variable documentation (with values or a description of what each requires), test suites, and any build automation scripts. A delivered codebase that cannot be compiled or deployed without the original developer's assistance is not a complete deliverable.

Build Documentation. Even complete source code is of limited value without documentation explaining how to set up a development environment, run tests, build the application, and deploy it to production. The agreement should specify that build documentation is a required deliverable — not an optional add-on. Specify the format (e.g., README, wiki, runbook) and minimum content (setup instructions, environment dependencies, deployment process, API documentation, and known limitations or technical debt).

Code Quality Standards. Unless the agreement specifies code quality expectations, you have no contractual basis to reject deliverables that technically function but are unmaintainable, unreadable, or insecure. Consider specifying: (1) adherence to a named style guide (e.g., Google JavaScript Style Guide, PEP 8 for Python); (2) minimum test coverage percentage (e.g., 80% unit test coverage); (3) static analysis tool compliance (e.g., ESLint, Pylint with no error-level violations); (4) security scanning requirements (e.g., OWASP dependency check with no critical vulnerabilities); and (5) peer code review requirements for all commits.

Source Code Escrow. For critical software from a development vendor (especially a small shop or solo contractor), source code escrow provides an additional layer of protection. An escrow arrangement deposits the source code with a neutral third party who releases it to the client upon a triggering event — typically the developer's insolvency, bankruptcy, failure to maintain the software, or dissolution. Major escrow providers include NCC Group, Iron Mountain, and EscrowTech. For smaller projects, an alternative is to require the developer to maintain the repository on a platform (GitHub, GitLab) to which the client has direct access, with the client as a co-owner of the repository.

Version Control Access. Requiring the developer to maintain code in a version control system and granting the client read access throughout development serves multiple purposes: you can monitor progress, verify code is being written (not just delivered at the end), review quality during development, and maintain a full audit trail. Require that all commits reference relevant issue or task IDs for traceability.

What to Do

Attach a specific deliverables list to the SOW covering source code, build documentation, test suites, infrastructure definitions, and all credentials. Require read access to the version control repository from day one of development. For projects exceeding $50,000 or involving mission-critical systems, evaluate source code escrow with a named provider. Specify code quality standards, test coverage minimums, and security scanning requirements in the SOW — these become acceptance criteria, not aspirational goals.

04Critical Importance

Payment Terms — Milestone-Based vs. Time-Based, Retainers, Late Payment Consequences, Payment-for-Acceptance Coupling, and Kill Fees

Example Contract Language

"Client shall pay Developer as follows: (a) 25% of the total fixed fee upon execution of this Agreement; (b) 25% upon delivery of the functional prototype described in Milestone 2; (c) 25% upon delivery of the beta release described in Milestone 3; and (d) 25% upon final acceptance pursuant to Section 9. Invoices are due within 30 days of receipt. Unpaid balances shall accrue interest at 1.5% per month (18% annually) or the maximum rate permitted by applicable law, whichever is less. Client's obligation to make milestone payments is not contingent upon Client's acceptance of any deliverable, unless and until Client provides written notice of rejection with specific deficiencies identified."

Payment structure is one of the most negotiated aspects of software development agreements, and the stakes are high on both sides. Clients want to pay for results; developers want consistent cash flow and protection against scope creep that extends projects indefinitely without additional compensation.

Milestone-Based Payment. For fixed-price projects, milestone payments tied to specific deliverables are the most common structure. The allocation of payment across milestones signals the balance of risk: a large upfront payment (30-50%) protects the developer against early abandonment; a large final payment (30-40%) gives the client leverage to ensure delivery. A healthy structure might be 25% at signing, 25% at each of two interim milestones, and 25% upon final acceptance. Avoid structures that front-load more than 50% of the total fee — you lose leverage for the second half of the project.

Time & Materials Payment. For T&M engagements, the agreement should specify: the billing rate(s) by role or individual, the billing cycle (weekly or bi-weekly is standard), invoicing format requirements, and a process for approving hours before billing. Require the developer to submit timesheets or activity reports with each invoice so you can verify the billed hours. Consider a monthly budget cap or a required notice when cumulative costs reach a specified threshold (e.g., 80% of an estimated budget).

Retainers. A retainer agreement commits the client to a fixed monthly fee for a specified number of developer hours. Retainer agreements should specify: what happens to unused hours (typically forfeited, not carried over), what happens if the client needs more hours than the retainer covers (billed at a defined overage rate), and notice requirements to reduce or cancel the retainer. Many developers require 30-60 days notice to cancel a retainer because they staff projects based on committed retainer revenue.

Payment-for-Acceptance Coupling. The sample clause above contains an important client-protective provision: the final payment is conditioned on acceptance. This gives the client leverage to withhold the final milestone payment if deliverables are not accepted. However, many developer-drafted agreements uncouple payment from acceptance — requiring payment within 30 days of invoice regardless of whether the client has accepted the deliverable. Be wary of language that makes payment obligations unconditional; it significantly weakens your position if the final deliverable is deficient.

Kill Fees. A kill fee (also called a cancellation fee or early termination fee) compensates the developer if the client cancels the project partway through. Kill fees are legitimate — developers incur real costs staffing and planning your project. However, the amount should be proportional: a kill fee equal to the entire remaining project value is unreasonable if the developer has not yet performed the work. A reasonable kill fee structure might be: all work completed to date billed at T&M rates, plus a cancellation fee equal to 10-20% of the uncompleted portion to cover staffing disruption.

Late Payment Consequences. Interest on unpaid balances is standard. Developers may also include the right to suspend work for non-payment after a cure period (e.g., 10 days after written notice). If the agreement includes a work-suspension-for-non-payment clause, clarify whether the developer remains responsible for timeline delays caused by the suspension period.

What to Do

Negotiate a payment schedule that ties at least 25-30% of the total fee to final acceptance, giving you leverage throughout the project. For T&M, require weekly or bi-weekly invoices with hour-by-hour activity reports. If the agreement includes a late payment interest rate, verify it does not exceed your state's usury limit. Negotiate a kill fee cap (e.g., work completed at T&M rates plus 15% of remaining work) rather than accepting a flat cancellation fee equal to the full remaining contract value.

Have a software development agreement to review?

Upload it for an AI-powered review — get a plain-English breakdown of IP ownership risks, payment structure issues, acceptance testing gaps, liability exposure, and specific negotiation recommendations.

Review My Contract
05High Importance

Change Orders and Scope Creep — Formal Change Order Process, Impact on Timeline and Budget, Unauthorized Work Clauses, and Agile vs. Waterfall Implications

Example Contract Language

"Any changes to the Scope of Work set forth in Exhibit A must be documented in a written Change Order signed by both parties prior to implementation. Each Change Order shall specify: (a) a description of the change; (b) the effect on project timeline; (c) the additional fees, if any; and (d) any modifications to acceptance criteria. Developer shall not be required to implement any requested change until a signed Change Order is in effect. Developer shall not be compensated for any work performed outside the Scope of Work without a signed Change Order, and Client shall not be obligated to pay for such unauthorized work."

Scope creep — the gradual expansion of project requirements without corresponding changes to the timeline or budget — is the leading cause of software project disputes. A well-drafted change order process protects both parties: clients from unexpected costs, developers from performing work they were never paid to do.

Why Scope Creep Happens. Software development requirements naturally evolve as clients see early prototypes, discover new business needs, or encounter technical constraints that require alternative approaches. Some evolution is healthy and expected. The problem arises when changes are implemented informally — via email, Slack, or verbal instruction — without updating the contract, timeline, or fee. Over a multi-month project, dozens of informal changes can collectively add weeks of work and cause significant budget overruns, leading to disputes about who agreed to what.

The Formal Change Order Process. A robust change order process requires: (1) the client submits a written change request; (2) the developer responds with a written impact assessment estimating additional hours, fees, and timeline impact; (3) both parties negotiate and agree on the change terms; (4) both parties sign the change order before work begins; and (5) the original SOW is updated to reflect the change. The key element is that no work begins until the change order is signed. The clause above explicitly states that the developer is not required to implement changes without a signed change order — and will not be compensated for unauthorized work.

Unauthorized Work. The dual provision in the clause above — developer is neither required to perform nor entitled to compensation for work outside the signed scope — protects both sides. Developers cannot perform scope changes unilaterally and bill for them later; clients cannot instruct developers to implement changes and then refuse to pay for them. Both protections are necessary.

Agile vs. Waterfall Implications. Agile development methodologies (Scrum, Kanban) present unique contracting challenges because requirements are intentionally not fully defined upfront. The backlog-driven, sprint-based nature of agile work is incompatible with traditional fixed-price, fully-specified contracts. Options for contracting with agile development teams include: (1) T&M with sprint-level scope commitments, reviewed at each sprint planning session; (2) fixed-price per sprint with a defined number of story points; or (3) a phased contract where each phase is fixed-price based on a defined sprint plan, with future phases contracted as specifications solidify. If you are contracting with an agile team, avoid a fixed-price contract based on a high-level product backlog — the specification is too incomplete to support reliable pricing, and the resulting change order disputes can be contentious.

Budget Tracking for T&M Projects. For T&M engagements, require the developer to provide budget tracking reports at defined intervals (weekly or at each sprint review), including cumulative hours billed, remaining estimated hours, and a variance analysis if actual hours are exceeding estimates. Early warning of budget overruns allows you to make informed decisions — not surprises at the final invoice.

What to Do

Include a formal change order clause requiring written change orders signed by both parties before work begins. Specify a response time for developer impact assessments (e.g., 5 business days after a change request). If using agile development, use a T&M or fixed-price-per-sprint model rather than a fixed-price contract against a vague product backlog. For any project exceeding $25,000, require monthly budget tracking reports and a written alert when cumulative costs reach 80% of the estimated budget.

06High Importance

Warranties and Bug Fixes — Warranty Period Standards, Severity Classifications, Response Time SLAs, Warranty Exclusions, and Post-Warranty Support

Example Contract Language

"Developer warrants that the Work Product will perform materially in accordance with the functional specifications in Exhibit A for a period of ninety (90) days following final acceptance ("Warranty Period"). During the Warranty Period, Developer shall promptly correct any Defect (defined as a failure of the Work Product to perform materially in accordance with the specifications). Priority 1 Defects (system inoperative or data loss) shall be addressed within 4 business hours. Priority 2 Defects (major functionality unavailable) shall be addressed within 1 business day. Priority 3 Defects (minor functionality impaired) shall be addressed within 5 business days. This warranty does not apply to Defects caused by: (i) modifications made by Client or any third party after acceptance; (ii) integration with third-party systems not specified in Exhibit A; or (iii) Client's failure to follow operating procedures provided by Developer."

All software contains bugs. The warranty clause determines who is responsible for fixing them, for how long, and how quickly — making it one of the most operationally significant provisions in the agreement.

Warranty Period Standards. Warranty periods for custom software typically range from 30 to 90 days following final acceptance. A 30-day warranty is minimal — most significant bugs surface within the first 30 days of production use, but some take longer to manifest under real-world load conditions. A 90-day warranty provides meaningful protection. Some enterprise agreements include 6-month or 12-month warranty periods, which are reasonable for complex systems. After the warranty period ends, bug fixes typically become billable unless a separate maintenance agreement is in place.

Severity Classifications (P1–P4). A well-drafted warranty clause classifies defects by severity and ties each severity level to a specific response time commitment. The classification system varies by agreement, but a common framework is: - P1 (Critical): System inoperative, data loss, security breach — requires immediate response (within 4 hours) - P2 (High): Major functionality unavailable or severely degraded — response within 1 business day - P3 (Medium): Minor functionality impaired, workaround available — response within 5 business days - P4 (Low): Cosmetic issues, minor usability problems — response in next scheduled release cycle

Warranty Exclusions. Developers routinely exclude several categories of defects from warranty coverage: (1) bugs introduced by client modifications after acceptance; (2) bugs caused by integration with third-party systems not included in the original scope; (3) bugs caused by the client's failure to follow operational instructions; (4) bugs resulting from changes in third-party APIs or external services; and (5) bugs that arise only under conditions not contemplated by the specifications (e.g., edge cases not described in the requirements). These exclusions are reasonable; the critical issue is that "modifications made by Client" should not be drafted so broadly that routine configuration changes void the warranty.

Post-Warranty Support. Once the warranty period ends, you need a mechanism for ongoing bug fixes and maintenance. Options include: (1) a separate maintenance and support agreement executed at or before project completion; (2) T&M billing for bug fixes after the warranty period; or (3) a retainer for ongoing development and maintenance combined. Negotiate the post-warranty support terms before the project closes — your bargaining position weakens significantly after the developer has been paid in full and moved to other projects.

Performance Warranties. In addition to a functionality warranty, consider requiring a performance warranty: the software must meet specified performance benchmarks (e.g., API response time under 200ms at 1,000 concurrent users, page load time under 2 seconds). Without a performance warranty, you may accept software that technically functions but performs so slowly it is commercially unusable — and have no contractual basis to demand remediation.

What to Do

Negotiate a 90-day warranty period as a baseline. Insist on explicit P1/P2/P3 severity classifications with specific response time SLAs for each. Verify that warranty exclusions are narrowly drafted — "modifications by client" should mean developer-level code changes, not routine configuration or content updates. Execute a maintenance and support agreement before or simultaneously with final acceptance; do not let the warranty expire without a clear plan for ongoing support.

07Critical Importance

Acceptance Testing — UAT Procedures, Acceptance Criteria Specificity, Deemed Acceptance Clauses, and Rejection and Cure Periods

Example Contract Language

"Client shall have fifteen (15) business days following delivery of each Milestone Deliverable to conduct acceptance testing ("Acceptance Testing Period"). Client shall notify Developer in writing of any Defects discovered during Acceptance Testing, with sufficient specificity to allow Developer to reproduce the Defect. Developer shall have fifteen (15) business days to correct identified Defects and re-deliver the Milestone Deliverable for re-testing ("Cure Period"). If Client does not provide written notice of Defects within the Acceptance Testing Period, the Milestone Deliverable shall be deemed accepted. If Developer fails to cure all identified Defects within the Cure Period following the second re-delivery, Client may, at its option, terminate this Agreement and receive a refund of amounts paid for the unaccepted Milestone Deliverable."

Acceptance testing provisions determine the process by which the client validates that deliverables meet the agreed specifications — and the consequences if they do not. Poorly drafted acceptance clauses are among the most common sources of software development disputes.

Acceptance Criteria Specificity. Acceptance testing can only be objective if acceptance criteria are specific. "The software should work correctly" is not an acceptance criterion. Enforceable acceptance criteria are measurable and testable: "The user registration workflow shall complete in fewer than 10 seconds on a standard broadband connection," "The system shall process a minimum of 500 concurrent API requests without error rates exceeding 0.1%," and "All fields in the data entry form shall validate in accordance with the validation rules specified in Exhibit A, Section 3." The more specific the acceptance criteria in the SOW, the less room for subjective disagreement about whether a deliverable is acceptable.

Deemed Acceptance Clauses. The sample clause above includes a "deemed acceptance" provision: if the client does not provide written notice of defects within the testing period, the deliverable is automatically accepted. This is standard and reasonable — it prevents clients from indefinitely withholding acceptance (and the associated milestone payment) by simply not testing. However, it creates a serious risk: if the client's team is occupied with other work and misses the testing deadline, acceptance is deemed to have occurred even if the deliverable is defective. Clients should negotiate: (1) an adequate testing period (15 business days is reasonable; 5 business days is not for complex deliverables); (2) a written notice requirement before the deemed acceptance clock starts running (i.e., the developer must notify the client in writing when a deliverable is ready for testing, and the clock starts from that notice — not from delivery of the file); and (3) the ability to toll the acceptance period if additional information is needed.

UAT Procedures. User acceptance testing (UAT) is the structured process by which the client tests the deliverable against the acceptance criteria. For complex software, define the UAT process in the SOW: who conducts UAT (client's QA team, end users, or a third-party testing firm), what test cases will be run, and how results will be documented. A formal UAT sign-off document protects both parties by creating a clear record of what was tested and accepted.

Rejection and Cure Periods. If the client identifies defects during the acceptance period, the developer receives a cure period to correct them and re-deliver. The sample clause above provides 15 business days for the cure period — reasonable for most defects. After re-delivery, the client conducts a second round of acceptance testing. If defects persist after a second re-delivery, the client should have the right to terminate and receive a refund for the unaccepted milestone. This termination-and-refund remedy is essential — without it, you have no meaningful leverage to enforce quality after the first round of corrections.

Partial Acceptance. Some agreements allow for partial acceptance — accepting some deliverables while rejecting others. This is particularly useful in complex projects where later milestones depend on earlier ones: accepting a functioning backend while continuing to work on a defective frontend allows the project to progress without holistic termination. Clarify whether partial acceptance is available and what it means for the payment schedule.

What to Do

Ensure acceptance criteria in the SOW are specific, measurable, and testable — not subjective. Require the developer to provide written notice when a deliverable is ready for testing, and start the acceptance clock from that notice (not from file delivery). Negotiate an adequate testing period (minimum 10 business days for complex deliverables). Include a termination-and-refund right if defects persist after two cure cycles. Never accept a deemed-acceptance clause with a period shorter than 5 business days for any deliverable of material complexity.

08High Importance

Confidentiality and Data Security — NDA Integration, Data Handling Obligations, SOC 2/ISO 27001 Compliance, Breach Notification, and GDPR/CCPA Considerations

Example Contract Language

"Each party agrees to hold the other's Confidential Information in strict confidence and not to disclose it to any third party without prior written consent, except as required by law. Developer shall implement and maintain commercially reasonable administrative, technical, and physical safeguards to protect Client's Confidential Information and any Client Data processed in connection with the Work Product. In the event of any unauthorized access to or disclosure of Client's Confidential Information or Client Data ("Security Breach"), Developer shall notify Client within 72 hours of discovery, provide a written incident report within 10 business days, and cooperate with Client's investigation. Developer represents that it maintains information security practices consistent with SOC 2 Type II standards or equivalent."

Software developers frequently have access to a client's most sensitive information: source code, business logic, customer data, pricing algorithms, and proprietary processes. The confidentiality and data security provisions determine the extent of the developer's obligations to protect that information.

NDA Integration. Many software development relationships begin with a standalone NDA before the development agreement is executed. The development agreement should either incorporate the NDA by reference or supersede it with its own confidentiality provisions. Verify that the development agreement's confidentiality provisions are at least as protective as the standalone NDA — and that the NDA's longer duration (if any) is preserved.

Definition of Confidential Information. The scope of the confidentiality obligation depends on what is defined as "Confidential Information." The definition should cover: source code, technical specifications, architecture designs, pricing and business strategies, customer lists and data, financial information, and any information marked as confidential or that a reasonable person would understand to be confidential given the circumstances. Watch for developer-drafted definitions that exclude information "independently developed" by the developer — a developer who builds a similar system for a competitor may claim the competing system was independently developed.

Data Handling for User Data. If the software processes end-user personal data (names, emails, financial data, health information), the agreement must address GDPR and CCPA compliance obligations, depending on the user base geography. Under GDPR, the client (as data controller) and the developer (as data processor) must execute a Data Processing Agreement (DPA) specifying: the subject matter and duration of processing, the nature and purpose of processing, the type of personal data, categories of data subjects, and the developer's obligations under Articles 28-30. Failure to execute a DPA is a GDPR violation.

SOC 2/ISO 27001 Compliance. For enterprise clients or those in regulated industries, requiring developers to maintain SOC 2 Type II certification (or equivalent) provides assurance that the developer's information security practices have been independently audited. SOC 2 Type II certifications cover five Trust Service Criteria: security, availability, processing integrity, confidentiality, and privacy. ISO 27001 is the international equivalent. For smaller development shops that lack certification, at minimum require a written information security policy and the right to audit the developer's security practices.

Breach Notification Requirements. Under state data breach notification laws (all 50 states now have them) and GDPR (Article 33), organizations have mandatory breach notification timelines — GDPR requires notification to supervisory authorities within 72 hours of discovery. The development agreement should include a breach notification obligation aligned with these legal timelines: notification to the client within 24-48 hours of discovery, enabling the client to meet its own legal notification obligations.

What to Do

Define "Confidential Information" broadly to cover all technical, business, and user data the developer will access. If the software processes personal data, require a GDPR-compliant Data Processing Agreement and CCPA compliance representations. Require breach notification within 24-48 hours of discovery. For enterprise or regulated-industry projects, require SOC 2 Type II certification or the right to conduct annual security audits. Include a clause requiring the developer to delete or return all confidential information within 30 days of project completion or termination.

Have a software development agreement to review?

Upload it for an AI-powered review — get a plain-English breakdown of IP ownership risks, payment structure issues, acceptance testing gaps, liability exposure, and specific negotiation recommendations.

Review My Contract
09Critical Importance

Limitation of Liability and Indemnification — Cap Structures, Carve-Outs for IP and Data Breach, Mutual vs. One-Sided Indemnification

Example Contract Language

"IN NO EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, EXEMPLARY, OR PUNITIVE DAMAGES ARISING OUT OF OR RELATED TO THIS AGREEMENT, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. EACH PARTY'S TOTAL CUMULATIVE LIABILITY ARISING OUT OF OR RELATED TO THIS AGREEMENT SHALL NOT EXCEED THE TOTAL FEES PAID OR PAYABLE BY CLIENT UNDER THE APPLICABLE SOW DURING THE TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE CLAIM. NOTWITHSTANDING THE FOREGOING, THE LIMITATIONS OF THIS SECTION SHALL NOT APPLY TO: (I) EITHER PARTY'S INDEMNIFICATION OBLIGATIONS UNDER SECTION 12; (II) EITHER PARTY'S BREACH OF CONFIDENTIALITY OBLIGATIONS; (III) DEVELOPER'S OBLIGATIONS ARISING FROM A SECURITY BREACH INVOLVING PERSONAL DATA; OR (IV) CLAIMS ARISING FROM GROSS NEGLIGENCE OR WILLFUL MISCONDUCT."

The limitation of liability clause is the most important risk allocation provision in a software development agreement. It determines the maximum financial exposure each party faces if things go seriously wrong.

Cap Structures. The most common cap for software development agreements is the total fees paid or payable under the agreement (or the applicable SOW). This structure is balanced: the developer's maximum exposure equals what it earned. Some developer-drafted agreements cap liability at the fees paid during the preceding 12 months — which may be far less than total contract value for long-running projects. Clients often push for caps equal to total contract value; developers resist uncapped or high-cap structures. The negotiated outcome typically depends on the relative bargaining power of the parties and the risk profile of the project.

Consequential Damages Exclusions. Virtually all software development agreements exclude consequential, indirect, and incidental damages: lost profits, lost revenue, loss of data, loss of business, and similar downstream harms. From the developer's perspective, this exclusion is essential — a developer who earns $50,000 for a project cannot risk $5,000,000 in consequential damages if the software fails. From the client's perspective, the exclusion means that if the software failure causes significant business disruption, the client's recovery is limited to direct damages (typically the fees paid).

Carve-Outs for IP Infringement. The liability cap typically does not apply to IP indemnification obligations. If the developer delivers software that infringes a third-party patent, copyright, or trademark, the resulting infringement claims can be far larger than the contract value — and excluding the cap for IP indemnification is standard. The carve-out is mutual: if the client's specifications require infringement (e.g., "build a feature that replicates this competitor's proprietary algorithm"), the client indemnifies the developer for claims arising from following those specifications.

Data Breach Carve-Outs. Given the regulatory exposure from data breaches (GDPR fines up to 4% of global annual revenue, state AG enforcement, and class action risk), data breach liability should be carved out of the general cap — or subject to a separate, higher cap. This is increasingly standard in enterprise software development agreements.

Mutual vs. One-Sided Indemnification. A balanced agreement includes mutual indemnification: each party indemnifies the other for claims arising from its own breach, negligence, or willful misconduct. Developer-favorable agreements sometimes include one-sided indemnification — the client indemnifies the developer broadly while the developer's obligations are narrowly scoped. Verify that the indemnification structure is at least broadly mutual, with specific carve-outs as appropriate.

What to Do

Negotiate a liability cap equal to total contract value (not just the prior 12 months' fees) for agreements with defined project scopes. Ensure carve-outs from the cap cover IP indemnification, data breach obligations, confidentiality breaches, and gross negligence or willful misconduct. Require mutual (not one-sided) indemnification for each party's own breaches, IP infringement, and gross negligence. For high-value projects, require the developer to maintain professional liability (errors and omissions) insurance and general liability insurance, with your company named as an additional insured.

10High Importance

Termination Provisions — Termination for Convenience vs. Cause, Wind-Down Obligations, IP Rights on Termination, Transition Assistance, and Survival Clauses

Example Contract Language

"Either party may terminate this Agreement for cause upon written notice if the other party materially breaches this Agreement and fails to cure such breach within thirty (30) days after written notice specifying the breach in detail. Client may terminate this Agreement for convenience upon thirty (30) days' written notice, in which event Client shall pay Developer for all work performed through the termination date at the applicable T&M rates, plus a termination fee equal to fifteen percent (15%) of the fees for work not yet commenced. Upon termination for any reason, Developer shall: (a) promptly deliver to Client all completed and in-progress work product, source code, and associated documentation; (b) provide up to 30 days of reasonable transition assistance; and (c) delete all copies of Client's Confidential Information within 30 days. Sections addressing IP ownership, confidentiality, limitation of liability, and indemnification shall survive termination."

Termination provisions determine how the relationship ends — whether amicably or adversarially — and who gets what when it does. Given the significant investment on both sides, poorly drafted termination clauses can lead to disputes about compensation, deliverable access, and ongoing obligations.

Termination for Cause vs. Convenience. Termination for cause requires a material breach and a cure period — typically 30 days. Materiality is often disputed: is a two-week delay in a single milestone material? Is failure to meet a code quality standard material? Specify what constitutes a material breach in the agreement (e.g., failure to deliver a milestone deliverable within 30 days of the scheduled date, failure to maintain minimum personnel on the project, insolvency). Termination for convenience allows either party to exit without a breach, typically with a notice period and a wind-down payment. Client-friendly agreements include the right to terminate for convenience; developer-friendly agreements may limit or exclude it.

Wind-Down Obligations. When a project terminates mid-development, both parties have obligations: the developer must deliver all work product to date (including in-progress code), and the client must pay for work performed. The key questions are: how is the value of partially completed work calculated (T&M for actual hours, or a proportional share of the milestone fee), and who bears the risk of partially completed, non-functional deliverables? Specify in the termination clause that payment for work-in-progress does not require the work to be in an accepted, final state.

IP Rights on Termination. The IP provisions on termination are critical and often unclear in generic agreements. The agreement should specify: (1) upon termination for cause by the client, the client receives full assignment of all work product created to date, upon payment of fees earned; (2) upon termination for convenience by the client, the same applies; (3) upon termination for cause by the developer (e.g., client non-payment), what IP rights, if any, does the client retain? Many developer-drafted agreements provide that IP assignment only occurs upon final acceptance and full payment — meaning that if the project is terminated before completion, the client receives no IP rights regardless of how much was paid. Negotiate for IP assignment proportional to payment made.

Transition Assistance. If the client terminates and plans to hire a replacement developer, the departing developer should provide a reasonable transition period: documentation of the codebase, handoff meetings, and answers to technical questions. The clause above provides 30 days of transition assistance. Longer transition periods are appropriate for complex systems; compensation for transition assistance beyond the initial period should be addressed.

Survival Clauses. Certain obligations survive termination of the agreement and must remain enforceable indefinitely (or for a defined period): confidentiality, IP ownership, limitation of liability, indemnification, dispute resolution, and governing law. Without a survival clause, technically all obligations end when the agreement terminates — a clearly unintended outcome.

What to Do

Require a termination-for-convenience right with a reasonable notice period (30 days is standard). Specify the wind-down payment structure for work-in-progress using a T&M calculation rather than a proportional milestone allocation. Negotiate for IP assignment on a pro-rata basis — all IP created to date transfers upon payment of fees earned through termination, regardless of acceptance status. Require 30 days of transition assistance at no additional cost, with extended assistance billed at standard T&M rates. Verify the survival clause covers all provisions that need to persist after termination.

11Medium Importance

State-by-State Comparison — Work-for-Hire, Non-Compete for Developers, Data Breach Notification, and Key Statutes Across 10 States

Example Contract Language

"This Agreement shall be governed by and construed in accordance with the laws of the State of [State], without regard to its conflict of law provisions. Any dispute arising out of or related to this Agreement shall be resolved exclusively in the state or federal courts located in [City], [State]."

Software development law varies meaningfully across states, affecting IP ownership, enforceability of non-compete restrictions on developers, data breach notification obligations, and the interpretation of key contract provisions.

StateWork-for-Hire RecognitionNon-Compete for DevsBreach Notification WindowKey Statute/Note
CaliforniaIndependent contractors cannot create works-for-hire outside 9 statutory categories; assignment requiredNon-competes void for employees and most contractors (Bus. & Prof. Code § 16600)72 hours to regulators; "without unreasonable delay" to individualsCal. Civ. Code § 1798.82 (CCPA); SB 699 bars non-competes regardless of where signed
New YorkStandard federal work-for-hire doctrine applies; assignment common for custom softwareEnforced under "reasonableness" standard with narrow scope; not banned"Expedient" notification; no specific windowSHIELD Act (2019); NY Labor Law § 191-d limits non-solicitation post-employment
TexasStandard federal doctrine; assignment standardGenerally enforceable with reasonable limitations (Bus. & Com. Code § 15.50)"Expedient" notificationTex. Bus. & Com. Code § 521.053; no comprehensive data privacy law yet
FloridaStandard federal doctrine; assignment standardEnforceable with statutory support; blue-penciling permitted (Fla. Stat. § 542.335)30 days to individualsFla. Stat. § 501.171; no statewide comprehensive privacy law
IllinoisStandard federal doctrine; assignment standardVoid if employee earns < $75,000/yr (IFWA); courts apply rule of reason above threshold"Expedient" notificationBIPA (biometric data) imposes significant obligations; IFWA (2022)
WashingtonStandard federal doctrine; assignment standardVoid if annualized wages < $100,000 for non-solicitation, $116,593 for non-competes (RCW 49.62)"Expedient" to individualsMy Health MY Data Act (2023) for health data; strict wage thresholds
GeorgiaStandard federal doctrine; assignment standardEnforceable under Georgia Restrictive Covenants Act (O.C.G.A. § 13-8-53) with blue-penciling30 days for government breach; "expedient" for private sectorO.C.G.A. § 10-1-910 (breach notification)
ColoradoStandard federal doctrine; assignment standardNon-competes void except for narrow exceptions; salary threshold applies (C.R.S. § 8-2-113)30 days to individualsColorado Privacy Act (2023); HB 22-1317 restricts non-competes broadly
MassachusettsStandard federal doctrine; assignment standardEnforceable with 1-year max duration; garden leave or consideration required (M.G.L. c. 149 § 24L)90 days to AG; 30 days to individuals2018 non-compete reform; Massachusetts Data Privacy Act under consideration
PennsylvaniaStandard federal doctrine; assignment standardEnforceable with adequate consideration and reasonable scope; no statute"Expedient" notificationCDPA (Consumer Data Protection Act) not yet enacted; common law governs

What to Do

Understand the non-compete enforceability rules in the state where your developers are located — not just the state chosen for governing law. California law voids virtually all non-compete agreements regardless of the contract's choice-of-law clause when enforced against California residents (SB 699). For agreements involving California-based developers, IP assignment provisions become even more critical because non-compete restrictions cannot substitute for carefully drafted IP ownership terms. Verify the data breach notification window for your state and ensure the agreement's breach notification clause is equal to or shorter than the applicable legal deadline.

12Critical Importance

Red Flags — 8 Warning Signs in Software Development Agreements That Signal Significant Risk

Example Contract Language

"Developer retains all intellectual property rights in and to any software, code, tools, or other work product created in connection with the Services. Client is granted a limited, non-exclusive, non-transferable license to use the delivered software solely for Client's internal business purposes during the term of this Agreement."

The following eight provisions in a software development agreement should prompt immediate legal review before signing. Each represents a materially developer-favorable position that can leave the client with limited rights, unlimited exposure, or no legal recourse if the project fails.

Red Flag 1: Blanket IP Assignment Without Pre-Existing IP Carve-Out. The reverse of the sample clause above — an agreement that assigns all IP to the client without any pre-existing IP carve-out — is equally problematic. If a developer assigns all IP including their reusable libraries and internal tools, the developer may be unwilling to sign or may claim later that their standard libraries were actually developed for your project. A valid IP clause requires both: a full assignment of custom work product, and a clearly defined pre-existing IP carve-out with a license for incorporated pre-existing IP.

Red Flag 2: Developer Retains Ownership of All Work Product (License Only to Client). The sample clause above is the extreme developer-favorable position: the developer keeps all IP and grants only a license. If the license is limited to "internal business purposes," you cannot sublicense the software to customers, resell it, or transfer it to an acquirer without the developer's consent. This structure creates permanent dependency on the original developer and severely limits your ability to exit the relationship or sell the business.

Red Flag 3: No Acceptance Testing Procedure. An agreement that lacks an acceptance testing process — or provides only a nominal testing period — removes your primary mechanism for enforcing quality. Without objective acceptance criteria and a defined rejection/cure process, you have no contractual basis to reject defective deliverables or withhold payment. "Developer warrants that the software will function as described" without an acceptance process is largely unenforceable in practice.

Red Flag 4: Unlimited or Uncapped Liability for the Client. Some developer-drafted agreements include a limitation of liability that caps only the developer's liability while leaving the client's liability uncapped (e.g., for non-payment or breach of confidentiality). A balanced agreement caps both parties' liability, with appropriate carve-outs. If only one party's liability is capped, it should be both, not just the developer.

Red Flag 5: Payment Obligations Fully Decoupled from Acceptance. An agreement that requires full payment of all milestone fees within 30 days of invoice — regardless of whether the milestone deliverable has been accepted — removes the client's primary leverage for ensuring quality. A developer who has been paid in full has little incentive to fix defects promptly. At minimum, the final milestone payment should be conditioned on final acceptance.

Red Flag 6: Auto-Renewing Maintenance Agreement Without Termination Notice. Some development agreements automatically transition into maintenance agreements upon project completion, with fees continuing to accrue unless the client provides advance written notice of cancellation. If the cancellation notice period is 60-90 days and the automatic renewal occurs at year-end, clients who miss the notice window are locked in for another year of fees. Review automatic renewal provisions carefully and calendar notice deadlines proactively.

Red Flag 7: Overly Broad Non-Solicitation of Employees. Many developer agreements include clauses prohibiting the client from hiring the developer's employees or contractors for 12-24 months after the project ends. Overly broad non-solicitation clauses can be problematic if: the prohibition extends to any employee of the development firm (not just those who worked on your project), the restriction period is unreasonably long (2+ years), or the prohibition covers independent contractors not under the developer's control.

Red Flag 8: Dispute Resolution in the Developer's Home Jurisdiction. Forum selection clauses that require all disputes to be resolved in the developer's home state effectively price the client out of litigation. If your software developer is in India, Singapore, or a distant U.S. state, a forum selection clause in that jurisdiction can make enforcing your rights economically prohibitive for smaller disputes. Negotiate for dispute resolution in your jurisdiction, or for neutral arbitration administered by AAA or JAMS.

What to Do

Before signing any software development agreement, verify: (1) IP ownership is clearly assigned to client with a valid pre-existing IP carve-out; (2) acceptance testing procedures exist with specific criteria and a rejection/refund right; (3) the liability cap is mutual and at least equal to total contract value; (4) at least the final milestone payment is conditioned on acceptance; (5) maintenance auto-renewals have clear notice requirements; (6) non-solicitation provisions are narrowly scoped to project personnel only; and (7) dispute resolution is in a neutral or client-friendly jurisdiction.

Reviewing a software development agreement?

Upload your software development agreement for an AI-powered review. We'll identify IP ownership risks, missing acceptance testing provisions, payment structure issues, liability exposure gaps, scope creep vulnerabilities, and specific negotiation opportunities — explained in plain English.

Review My Contract — $4.99

Instant analysis · Plain English explanations · Not legal advice

Frequently Asked Questions

Who owns the software after a developer builds it for me?

Ownership depends entirely on your contract. Under U.S. copyright law, an independent developer (not an employee) owns the copyright in software they create unless there is a valid written assignment to you. A work-for-hire designation alone is not sufficient for custom software — it must be accompanied by an explicit assignment clause. Always verify your agreement includes a clear IP assignment, not just a license to use the software.

What is a pre-existing IP carve-out and why does it matter?

A pre-existing IP carve-out allows the developer to retain ownership of tools, libraries, and code that existed before or were developed independently of your project. Without it, a full IP assignment clause could theoretically transfer the developer's entire reusable codebase to you — which developers will never agree to. The carve-out is legitimate; what matters is that you receive a perpetual, sublicensable license to use any pre-existing IP that is incorporated into your deliverable.

What is source code escrow and when should I require it?

Source code escrow is an arrangement where the developer deposits the source code with a neutral third party (such as NCC Group or Iron Mountain) who releases it to you upon a triggering event — typically the developer's insolvency, bankruptcy, or failure to maintain the software. Consider requiring escrow when: the developer is a small firm or solo contractor, the software is mission-critical, or you have concerns about the developer's long-term stability. For smaller projects, an alternative is to require that the developer maintain the repository on a platform to which you have direct access.

What is a deemed acceptance clause and how can it hurt me?

A deemed acceptance clause provides that if you do not provide written notice of defects within a specified testing period, the deliverable is automatically accepted — triggering your payment obligation. This is standard and reasonable, but it creates risk if your team is too busy to test within the window. Protect yourself by: requiring the developer to give written notice when a deliverable is ready for testing (starting the clock from that notice, not file delivery), negotiating an adequate testing period (minimum 10 business days for complex deliverables), and assigning a specific team member to conduct acceptance testing.

What happens if the developer misses the project deadline?

Unless the agreement specifies consequences for delays (such as liquidated damages, a fee reduction, or a termination right), a missed deadline is a breach of contract but the remedy is limited to actual damages — which are often difficult to quantify. To give deadline provisions teeth, include: (1) specific milestone dates in the SOW; (2) a defined material breach threshold (e.g., 30+ days late on any milestone); (3) a cure period for delay-based defaults; and (4) a termination right with refund of amounts paid for undelivered milestones if the delay is not cured.

Can I stop a developer from working with my competitors after my project ends?

Generally, no — at least not through a non-compete clause. Courts are increasingly skeptical of non-competes for independent contractors, and several states (California, Colorado, Washington, Illinois) ban or severely restrict them. The more appropriate protection is: (1) a robust IP assignment ensuring the developer cannot use your proprietary code for competitors; (2) a confidentiality agreement protecting your business logic and trade secrets; and (3) a narrowly scoped non-solicitation of employees clause limited to project personnel. Do not rely on a non-compete to protect competitive information that is not covered by your IP and confidentiality provisions.

What is the difference between fixed-price and time-and-materials software development contracts?

A fixed-price contract sets a total fee for a defined scope of work — the developer bears the risk of cost overruns, and the client bears the risk of scope gaps. A time-and-materials (T&M) contract bills by hours or days at agreed rates — the client bears budget risk but gets flexibility to evolve requirements. Fixed-price works best for well-defined projects where requirements are unlikely to change. T&M works best for exploratory or evolving projects. A hybrid approach (fixed-price per milestone with T&M for changes) is often the most practical for mid-sized projects.

Does open-source software used in my project create any IP risks?

Yes. Some open-source licenses — particularly the GNU General Public License (GPL) and its variants — require that any software incorporating GPL-licensed code must also be released under the GPL. If your developer incorporates GPL-licensed code into your proprietary software without disclosing it, your software may need to be open-sourced. Require the developer to disclose all open-source components and their licenses, warrant that no copyleft-licensed code has been incorporated without your written consent, and deliver an open-source bill of materials (SBOM) as part of the final deliverables.

What should a software development agreement say about data security?

At minimum, the agreement should require: (1) commercially reasonable administrative, technical, and physical safeguards for your confidential information and any user data processed; (2) breach notification within 24-72 hours of discovery; (3) SOC 2 Type II certification or equivalent for enterprise-grade projects; (4) a Data Processing Agreement (DPA) if the software processes personal data subject to GDPR or CCPA; and (5) deletion or return of all confidential information and data within 30 days of project completion or termination.

What is a kill fee in a software development contract?

A kill fee (or cancellation fee) compensates the developer if the client terminates the project early. Kill fees recognize that the developer may have staffed and committed resources based on the contracted project. A reasonable kill fee structure is: all work completed to date billed at T&M rates, plus a cancellation fee of 10-20% of the remaining uncompleted portion to cover staffing disruption and opportunity cost. Avoid kill fees that equal the full remaining contract value for work not yet performed — that structure provides no incentive for the developer to re-deploy staff and minimize costs.

How should an agile software development project be contracted?

Agile's evolving, backlog-driven methodology is incompatible with traditional fixed-price contracts based on fully defined specifications. Better options for agile projects include: (1) T&M with sprint-level scope commitments reviewed at each sprint planning session; (2) fixed-price per sprint with a defined number of story points and a change order process for scope additions; or (3) a phased contract where each phase is fixed-price based on a defined sprint plan, with future phases contracted as specifications solidify. Whichever model you use, include a weekly budget tracking requirement and a notice obligation when cumulative costs reach 80% of the estimated budget.

What IP rights do I have if a software development project is terminated before completion?

This depends entirely on your contract. Many developer-drafted agreements provide that IP assignment only occurs upon final acceptance and full payment — meaning that if you terminate before completion, you may receive no IP rights even if you paid for 80% of the work. Negotiate for IP assignment proportional to payment: all work product created to date should transfer to you upon payment of fees earned through the termination date, regardless of whether the work has been formally accepted. Include a clause specifying that upon termination, the developer promptly delivers all source code, documentation, and in-progress work product.

Disclaimer: This guide is for educational and informational purposes only. It does not constitute legal advice and does not create an attorney-client relationship. Software development law varies significantly by state, and the terms of any specific agreement depend on the facts, circumstances, applicable state and federal law, and the specific parties involved. For advice about your specific software development agreement, consult a licensed attorney with experience in technology contracts and intellectual property in your jurisdiction.