Salesforce supports a wide range of businesses selling all kinds of goods and services. Like NetSuite, the underlying model is both large and flexible. By flexible we mean that relationships between key objects can be implemented or ignored in any given implementation. It also supports (perhaps better than most other platforms) the creation of custom fields and custom objects which can be flexibly related to the core data model as required. This flexibility is one of the reasons it has become ubiquitous. But it also means that Salesforce configuration can vary significantly from customer to customer.
In this section of the document we will reference the most common patterns we observe in the B2B SaaS sector. There are three common patterns:
Opportunity Management:- typically a customer has the Sales Cloud product and drives all orders as opportunities.
Order Management:- usually means CPQ is installed and a more rigorous quote -> order -> contract process is followed. Salesforce is flexible enough to support various configurations of this including contracts with multiple orders or orders with multiple contracts! The most common config is contracts with multiple orders.
Hybrid:- A hybrid of the above where contracts (and optionally orders) are used but the opportunity plays a larger role - almost like an order does in the standard order management flow.
Here is a high level data model that supports each of the above patterns:
The key relationships include:
Opportunity ↔ Quote:
Each Opportunity can have multiple Quotes (1-to-many relationship).
One of these quotes can be marked as the primary quote (this is the quote that will be converted into the order and contract).
Quote ↔ Quote Line Items:
Each Quote is associated with multiple Quote Line Items (1-to-many relationship), which define the specific products/services included in the quote.
Each quote line item refers to a Product and a Price Book Entry to determine pricing.
Quote ↔ Order:
Once the Quote is finalised and agreed upon, it can be converted into an Order. The order includes the same products/services and pricing as the quote.
Typically, one order is created from one quote (1-to-1 relationship).
Quote/Order ↔ Contract:
Once the quote is accepted, a Contract can be created alongside the Order. The contract defines the terms under which the products/services are provided.
Contracts can be associated with either the Quote or the Order, depending on the business process.
Account ↔ Opportunity/Quote/Order/Contract:
The Account is the central object linking all the entities:
Each Opportunity is tied to an Account.
Each Quote and Order is tied to the same Account.
The Contract is also tied to the Account for the customer relationship.
And the high level process flow a customer is looking to implement is as follows:
Create Opportunity:- A sales rep creates an Opportunity when a potential deal is identified.
Create and Configure Quotes:- Multiple Quotes can be created and configured for that opportunity using Salesforce CPQ. These quotes are iterated upon until one is finalised as the primary quote.
Convert Quote-to-Order:- Once a quote is accepted by the customer, it is converted to an Order in Salesforce.
Create Contract:- Simultaneously, a Contract is generated to formalise the terms of the agreement (e.g., payment terms, service period).
Fulfilment and Billing:- The Order is fulfilled, and the customer is billed according to the terms in the Contract.
Actual Salesforce Data Models
The above data model aims to simplify Salesforce’s underlying data model(s). Here are more complete versions: