The Documentation below is organized by Feature, each section will have the relevant inputs and outputs as well as references to the logic that processes the input and outputs.
Please see the dedicated ARR Technical Documetation Page
Please see the dedicated Gainsight Technical Documentation Page
Business Process this supports: Territory Success Planning
Overview: The goal of TSP is to keep a set of staging fields consistently up to date from a variety of data sources, then at given intervals copy these values to the "Actual" set of fields for general use. This allows for us to constantly receive changes but only apply those changes in a controlled fashion. This also allows us to easily track exceptions. Note: This project was originally referred to as ATAM, which is why the API names of the fields reference that instead of TSP.
Logic Locations: AccountJob.cls Code Units:
Inputs: DataFox, Zoominfo, Manually Entered Address & Employee Data, Account Parenting Hierarchy
Outputs: Here is the outline between two sets of fields we are setting on the Account object. Staging(TSP / ATAM) are set nightly via an APEX job. Actuals are set at given intervals found in the business documentation.
|Data Name||Actual - Field API Name||TSP - Field API Name|
Business Process this supports: This supports our contact ownership rules
Overview: The goal of the Contact Ownership code is to ensure that contacts are owned by the appropriate user within salesforce in an automated fashion so that contact ownership is maintained without any work needed by team members.
Logic Locations: ContactJob Code Units:
Inputs: Contact Owner, Account Owner, Account SDR Assigned, Account Type, Sales Segment
Outputs: Contact Owner
Business Process this supports: Security and compliance requirements for federal customers
Overview: The goal of our record sharing settings in Salesforce is so that the Public Sector Team and approved supporting functions can view public sector records. A Public Sector record is considered any record in Salesforce that is owned by the Public Sector team. This is accomplished by the use of sharing rules and groups within Salesforce. If a record is owned by a member of the Public Sector Group then that record is only shared and visible to other members of the Public Sector Group. If the record is owned by anyone other than a member of the public sector group, then that record is visible to all internal users within our Salesforce Instance. Membership to these applicable groups is controlled by System Administrators and Sales Operations.
Business Process this supports: Discount Approvals
Overview: According to the Deal Approval Matrix Quotes must have discounts approved by different management levels depending on discount percentage and term length. To achieve this, we have written automation to stamp a quote with each potential approver, revised the code that determines which approvals are required, and revised the actual approval process in Salesforce.
Quote Management Stamp When a Quote is inserted, get the owner of the related Opportunity. Then, find the manager of the owner and the manager of the manager for each manager, five managers down. Record the first active Regional Director, Area Sales Manager, and Vice President on the Quote. These lookup fields will be used in the Approval Process, if needed.
Quote Approval Code This is a table of the Quote (API Name: zqu__Quote__c) fields that trigger quoteApprovals to recalculate and what must happen to them.
|Field API Name||What Must Happen|
If any of these events happen, all "Required_Approvals" fields (Required_Approvals_From_CEO__c, Required_Approvals_From_CFO__c, Required_Approvals_From_CRO__c, Required_Approvals_From_CS__c, Required_Approvals_From_Legal__c, Required_Approvals_From_VP_of_Channel__c, Required_Approvals_From_VP_of_Sales_RD__c, Required_Approvals_From_RD__c, Required_Approvals_From_ASM__c) are cleared. These are the rich text area fields that show which management levels need to approve the Quote on the page layouts. Then, all relevant Quote Rate Plan Charges (API Name: zqu__QuoteRatePlanCharge__c) related to the Quote are queried, these are what hold the term, product, and discount information we need to determine what approvals are required. Following the Deal Approval Matrix, we determine what level of management the Quote Rate Plan Charge needs and stamp the correct "Required_Approvals" fields with the discount percentage, type, and term. Similar logic is then run for any Quote Rate Plan Charges related to Professional Services products. Finally, the Quote's Approval_Stage__c field records whether it needs approval, doesn't need approval, or has been approved.
Quote Approval Process This utilizes Salesforce's built-in Approval Process functionality. We have two Approval Processes for Zuora Quotes, the first for undiscounted, and the other for ones with discounts. The Quote must be submitted using the "Submit for Approval" button on the page layout to enter the correct Approval Process.
Business Process this supports: The field needs a streamlined process to address their concerns on specific salesforce records within salesforce. This is also used by the finance team to help address record specific billing issues, as well as the Community Advocate team to manage the influx of requests the team receives.
Overview: The goal of the Chatter To Cases functionality is to allow a streamlined communication channel that the field can leverage while also providing a streamlined case management system for the supporting team members to manage the requests that are sent to them from the field. If a team member uses an appropriate tag in salesforce a salesforce case record will automatically be created. Once these records are created supporting team members can work through the respective cases that are created to address the fields needs and concerns.
Inputs: Chatter text within Salesforce
Outputs: Salesforce Case Records
Logic Locations: Code Units:
@SMB Flat Renewals
@Partner Help Desk
Steps to add a Group:
ChatterFeedItemClassto monitor for the use of the Chatter Group in chatters within Salesforce (Changeset)
CaseClassto include the new groups Id so that it updates the case owner what ownd by this queue.
Originfield on the case object (In Production)
Business Process this supports The sales cycle, if a GitLab sales rep encounters an issue that requires legal knowledge, opinion, or action.
Overview A sales rep can quickly and easily create a Case for our legal team directly from an Opportunity's page layout in Salesforce. The legal team has access to a Salesforce dashboard to see how many Cases have been created for them, how many are in their name, etc. Clicking the "Legal Request" button on each Opportunity's page will bring the user to a page that asks a few questions that the legal team would like to know. Once the page is submitted, a Case is created with the Origin marked as "Legal Request." The legal team has dashboards that view Cases with Origin equal to "Legal Request" and can assign and take action from there.
Business Process this supports The sales cycle and the financial processes around deals.
Overview We are now ensuring Opportunities in Salesforce have only one Quote that is marked as Primary. If multiple Quotes are being inserted under an Opportunity marked as primary in the same transaction, only the first in the list will be the primary. If a Quote is being inserted as primary, and there is an existing primary Quote, the existing will become not-primary and the incoming will be the new primary. If more than one Quote under the same Opportunity is being updated to become primary in the same transaction, an error message will prevent the update. A primary quote will not be allowed to be deleted. To change which Quote is primary, simply navigate to the Quote you want to be primary and update it as such, the previous primary Quote will automatically be updated to no longer be primary.
Business Process this supports The sales cycle and analytics.
Overview The goal of this functionality is to capture the progression of an opportunity through the stages in the sales process. To support this, a check box and date stamp will be automatically populated for each stage as the oportunity advances and or moves back in stage. The tracking begins at stage 0-Pending Acceptance. In the event an opportunity advances forward and skips stages, all of the skiped stages will be stamped with the same date as the resting stage. In the event of Closed Lost and Unqualified, the checks and dates will only apply for the stages that were actually met. To avoid data loss and confusion, the stage progression tracking will only run once, the first time through the stages.
Business Process this supports The Sales Finance & Analytics
Overview The goal is have a static opportunity population in salesforce once the opportunity close date is past accounting close date ( which is 10th day of the month) so it ties to everything that was reported to the Board. And to ensure the bookings data don't change as there are other downstream implications such as Commissions Calculation, Booking Reporting & Adaptive Bookings Data,need to build a mechanism to lock the booking related opportunity fields after green light from Deal Desk & Finance. If there are any minor adjustments ( if needed ) to historical periods we have a specific permission sets to make the appropriate changes.
Business Process this supports: In order to provide reliable and accurate historical data to the analytics team, the sales organization and to the companye as a whole we need to ensure that historical opportunities and relevant information on opportunities is not changed once the opportunity is closed.
Overview: The goal of this blocking logic is to close a backdoor that Salesforce has built into the system. While we have a number of validation rules in place to prevent information from changing on closed opportunities it is possible to change historical opportunity owners (as well as fields that are derived from the owner field) while transferring accounts. Anyone who could have been able to change the owner on an account would have been able change historical opportuntiy data that they would not be able to edit otherwise. This logic still allows users to complete this account ownership transfer without any impact to historical opportunities while also allowing the various business teams at GitLab to manually update the owners of opportunities at month close.
Inputs: Account records that are changing ownership
Outputs: Reverts opportunity owners to their original owners if the user attempted to change them
Logic Locations: Code Units: * ProtectClosedOppOwnersBefore * ProtectClosedOppOwnersAfter
Business Process this supports: New vs Connected New vs Growth
Overview: The goal of the Order Type system is to determine a given Opportunity's relationship with the business. Did it start a new customer relationship, cross into a related segment of the customer, or grow an existing relationship.
Logic Locations: AccountJob.cls
Inputs: Salesforce Account Hierarchy, Salesforce Opportunity Close Date and Stage.
Outputs: Populates the Order Type field on the Opportunity with New - First Order, New - Connected or Growth based on the following logic:
|New - First Order||The First Closed Won Opportunity in an Account Family.|
|New - Connected||The First Closed Won Opportunity on an individual Account, that is not the first one in the Account Family.|
|Growth||All opportunities that follow the
Business Process this supports: Sales Segmentation
Overview: Leads should be sorted into different Sales Segments based on their company's employee count so the appropriate salesperson can pursue them. We have a number of different information sources to get company size, so we must also establish a hierarchy for them.
|Info Source||Salesforce Lead Field API Name|
Logic Locations: LeadClass.cls Code Unit:
Business Process this supports: Command of The Message
Overview: This Visualforce page and supporting controller provide the sales team with an easy to use button on their opportunities to populate the needed information.
Business Process this supports: Linear Attribution
Overview: Linear Weighted Net ARR is a measure at Gitlab that is used to measure the effectiveness of our marketing campaigns. Please refer to the excellent Linear Attribution section in our handbook for additional details. In summary the Linear Weighted Net ARR is calculated by taking the Net ARR of an Opportunity and dividing it by the Number of associated Bizibile Touchpoints related to the Opportunity.
Logic Locations: OpportunityJob.cls Code Unit:
Business Process this supports: This supports our professional services team. They leverage Mavenlink projects to coordinate their projects, the hours they spend on each project and their associated tasks, schedules and more.
Overview: The following sections of code control the process by which Mavenlink project in Salesforce are created, which in turn are then pushed over to Mavenlink by leveraging an extension class that was provided by Mavenlink. Currently a Mavenlink Project is created when one of the following scenarios is met
Business Process this supports: This supports the automatic creation validation of our opportunity split that supports our compensation team. This helps ensure that our team members are compensated for the opportunities that they are associated with in an automated fashion
Opportunity - Incremental ACV 2split type
Sales Development Representatives/
Primary Solutions Architect/
Technical Account Manager/
Channel Manager: Base split automation rules
Technical Account ManagerSpecial Use Cases
Technical Account Managerfield on the Opportunity is populated a split for 100% is created for whoever is added into the Technical Account Manager lookup
Technical Account Manageris currently handled automatically, OpportunityClass.maintainTamTeamLookup, as they are only to be stamped onto Opportunities when the Opportunity is a Growth Opportunity
Channel ManagerSpecial Use Cases
null/Emptyare assumed to be the same role and are summed accordingly.
Sales Development Representatives,
Primary Solutions Architector
Technical Account Manager.
Channel Managersare not included in this Validation rule because they are not paid until after the close, the validation rule would conflict with existing automations and because it is expected that Channel Maanagers will never have a split Opportunity.
General Automation Notes
Business Process this supports: Decommision Opportunity Process
Overview: For this process to function properly there is a button that has been added to the Opportunity layout. This button should only be visible to users who should be working on our bookings (Deal Desk, Finance Users, etc.). This button, when clicked, updated a checkbox on that opportunity to mark it as a refunded opportunity. This checkbox causes the the trigger class to run and create a full clone of the existing opportunity. This class also updates a number of fields to null or the override fields are used to negate our bookings numbers. Additionally if the owner of the original opportunity is no longer active the Opportunity owner is updated to that users Manager. If that manager is also no longer active than the opportunity is assigned to the user who triggered the process. Because this process uses a checkbox field it is also possible to mass trigger refunds on through a dataload or similar mass update.
Business Process this supports: Sales Cycle & Operations Tracking Sales Qualified Source in the Opportunity
Overview: There are times in which we may need to override Sales Qualified Source. In this event, we have a system that will allow this. This ability is limited to James Harrison and Colleen Farris. To override Sales Qualified Source, enabling user with perform the following steps:
Once this is complete, a validation rule will prohibit anyone other than the above mentioned users from editing this field. All automation that updates this field includes criteria that excludes them from firing if the Override SQS checkbox is checked.
Business Process this supports: This automation maintains the correct Channel Manager on Opportunities. This is important for trakcing which Channel Manager gets compensated on which Opportunity.
This Class/AutomationWhen the Channel Manager on an account is updated. Find all open Opportunities where that Partner Account is the same as the account with the owner change and the Old Account Owner is stamped as the
Channel Manageron the Opportunity and update the
Channel Managerto the new Owner of the Partner Account.
Business Process this supports: The primary area that this is used is for Compensation. As a number of teams and users are compensated on a regional nunmber, stamping the SA Team of the Opportunity Owner onto the Opportunity allos us to properly pay out this compensation.
Overview: When a Opporuntiy meets one of the criteria below the SA Team from the Opportunity Owner is stamped onto the Opportunity. This allows for the field to track the owner of the Opporutnity at Close, adjust when the owner is updated but to still allow for the finance teams to override as needed.
Business Process this supports: Digital Journey - In order to deliver the digital journey enablement series to new customers, we need a way to identify contact roles for certain personas in the business to receive the right material.
Overview: For the Commercial market, we will require identifying the GitLab admins at each Account at the time of Opportunity approval submission. When the “Submit for Approval” button is clicked in the Opportunity, logic will run the check criteria (defined below) on if a GitLab Admin is required and if there is currently one defined. Providing a GitLab Admin is defined by having at least one contact on the Account that has
Role CONTAIN GitLab Admin as seen here. Note: This contact can have other roles defined in this field in addition to GitLab Admin. If the criteria is met, there are two potential results:
Criteria to enter this logic:
Web Portal Purchaseis Unchecked (false value)
Order Type 2.0is 1. New - First Order
Net ARRless than $50,000
Account Owner Teamis Commercial
[TSP] Regionis not APAC
[TSP] Regionis not LATAM
Business Process this supports: This supports internal visibility/reporting on why customers are downgrading. Downgrade Opportunities are technically Closed Won Opportunities with negative
Net ARR. This will allow us to capture reasons for a downgrade on these opportunities rather than Closed Won reasons:
Overview: For Opportunities with negative
Net ARR of less than -$480, we will require the identification of why there was a downgrade. When the "Submit for Approval" button is clicked in the Opportunity, logic will run to determine if
Downgrade Reason should be required. There are two potential scenarios of Net ARR with varying results.
Net ARRis less than $0 but greater than -$480
Closed Won Reasonor
Downgrade Reasonwill be required.
Net ARRis less than -$480
Downgrade Reason. Optionally,
Downgrade Detailscan also be provided for a further explanation. Additionally,
Competitorsmay be required depending on the selection in
Downgrade Reasonon a second screen. This will be required if
Downgrade Reasonwas selected to equal one of the following values: "Lack of Adoption", "Product Value / Gaps", "Product Quality / Availability", "Lack of Engagement / Sponsor", "Corporate Decision".
Downgrade Reason values align directly with our
Closed Lost/Unqualified Reason values and can be found here.
Business Process this supports: Sales Cycle & All Operations
Overview: Email alerts are emails generated by an automated process and sent to designated recipients. These actions consist of the standard text and list of recipients for an email. Email alerts are associated with processes, flows, workflow rules & approval processes. Here is the Email Alert Document which lists all the email alerts with associated automation details, email template details & target audience information that are sent from salesforce instance. To request deactivating and/or updating these emails alerts for business reasons please create an issue in SalesSystems Board for Systems Team Member to review & make necessary updates.
Business Process this supports: Sales Cycle - Late Renewal Notification & Auto Close Process
Overview: To keep the Sales Pipeline clean and for a systematic way to notify opportunity owners (and their managers) of renewal opportunities that are at risk of lapsing, automatically close late renewals that fall out of adherence to Bookings Policy this automation has been built. This automation triggers for all Open Renewal Opportunities based on Quote Start Date in the opportunity.
This logic is included in the
OpportunityJob to trigger the action (Field Update) & alert. The recipients who receive these emails are Opportunity Owner, Opportunity Owner's Manager & ISR. Specific templates have been created to match up with the notifications. The field updates made to
Admin Poke field are used to trigger
Troops to send email alerts to the SAs(Primay Solution Architect).
To request updating these emails alerts/recipients/actions, please create an issue in SalesSystems Board for Systems Team Member to review & make necessary updates.
Here is the config table for the automation logic for reference:
|For Open Renewal Opportunity Only||Email Template ID Used||Logic [Opportunity Quote Start Date]||Field Update||Email Alerts Sent To||Troops Alerts Sent To|
|First Notification - Email Alert - 15 days prior to Quote Start Date||00X4M00000121nCUAQ||Today = Quote Start Date - 15 Days||Admin Poke = 15 days prior lapsed renewal alert1 sent||Opportunity owner, ISR, opp owner manager||SAs|
|Second Notification - Email Alert - Day of Quote Start Date||00X4M00000121nFUAQ||Today = Quote Start Date||Admin Poke = on the day lapsed renewal alert2 sent||Opportunity owner, ISR, opp owner manager||SAs|
|Third Notification - Email Alert -30 days after Quote Start Date||00X4M00000121nDUAQ||Today = Quote Start Date + 30 Days||Admin Poke = 30 days prior lapsed renewal alert3 sent||Opportunity owner, ISR, opp owner manager||SAs|
|Final Notification - Email Alert + Closed Lost Update -46 days after Quote Start Date||00X4M00000121nEUAQ||Today = Quote Start Date + 46 Days||Admin Poke = opp closed lapsed renewal alert4 sent, Opportunity Stage = Closed Lost, Closed Lost/Unqualified Reason = Other, Closed Lost/Unqualified Details = Auto closed lapsed renewal||Opportunity owner, ISR, opp owner manager||SAs|