A legal agreement between parties
A contract is the binding agreement between two parties: an MSA, an NDA, a DPA, a SOW. It sets out who promised what, on what terms, and what happens when a promise breaks. For a product team the contract is where roadmapRoadmapProduct SpecificationA strategic plan of features and milestonesView reference → freedom quietly ends, because a commitment signed eighteen months ago can rule out a featureFeatureProduct SpecificationA product capability or featureView reference → you want to ship today.
The modern SaaS deal is rarely one document. It is a modular stack with a Master Services Agreement as the foundation, carrying the long-lived terms: liability, intellectual property, confidentiality, dispute resolution. Transaction-specific documents hang off it. A Statement of Work names the deliverables, timeline, and price for one engagement. A Data Processing Agreement, required under GDPR and similar regimes, governs how personal data is handled. A Service Level AgreementService Level AgreementCustomer SuccessA service level agreement with customersView reference → sets the uptime and response commitments. A Non-Disclosure Agreement protects information shared before any deal is struck (CloudNuro, SaaS Agreement Terms).
This modular shape exists to front-load the hard negotiation. Settle liability and IP once in the MSA, and every later SOW becomes a short document about scope and money. The structure introduces its own hazard: when an SOW and the MSA conflict, which wins? The fix is an order-of-precedence clause, typically stating that MSA terms govern unless an SOW explicitly overrides a named section, so that a project document cannot quietly undo a core protection (Promise Legal, SaaS Agreements).
A B2B SaaS vendor signs an MSA with an enterprise customer. Two terms in it shape the product for years. The liability cap limits the vendor's exposure to twelve months of fees, which the finance team relies on when pricing the deal. A data-residency commitment promises that customer data stays in the EU. Eighteen months later the product team wants to move analytics processing to a cheaper US region. The MSA blocks it for this account. The decisionDecisionStrategyA recorded decision with context, rationale, and consequencesView reference → is no longer purely technical; it is governed by a clause someone signed, and changing it means renegotiating with the customer. The contract has become a constraintConstraintStrategyA constraint entityView reference → on the roadmap, which is exactly why it belongs in the same map as the features it touches.
contract_governs_partnershipContractgovernsPartnershipcross-domain bridges the two.In the Unified Product Graph the contract is the anchor of the legal domain. Three edges define it: ContractcontainsContract Clausehierarchy breaks it into its binding provisions, contract_contains_contract_clauseLegal Entitybound byContracthierarchy records which entity carries the obligation, and legal_entity_bound_by_contractContractgovernsPartnershipcross-domain bridges into the business modelBusiness ModelBusiness ModelThe business model canvas or definitionView reference →. The domain's standing warning is the contract with no clauses, because a contract described only at the top level hides exactly the commitments a product decision needsNeedUserA user need, pain, desire, or constraintView reference → to check against.contract_governs_partnership
Type-specific fields on BaseNode
contract_typestringClassification of the contract
start_datestringContract effective start date (ISO format)
end_datestringContract end or expiration date (ISO format)
valuenumberTotal monetary value of the contract
currencystringCurrency code for the contract value
auto_renewalstringHow the contract renews at expiration
renewal_termstringDuration of each renewal period
notice_periodstringNotice period required for termination or non-renewal
governing_lawstringJurisdiction whose laws govern the contract
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
6 phases — initial: draft
3 edge types connected to this entity.
legal_entity_bound_by_contractcontract_contains_contract_clausecontract_governs_partnership