Enterprise Applications - CRM Team
Mission
CRM Systems exists to support the GitLab field organization by providing reliable, scalable, and intuitive technology platforms for everyday use. Primarily working on SalesforceCRM and its related Revenue Systems, our goal is to constantly deliver value in the form of features to our end users. We also act as the connective tissue between business and technology, gathering requirements from our internal customers, designing the technical specifications and executing on the delivery of the solution.
Our Team (Org Chart)
Services We Offer
Salesforce.com Change Management Processes and SDLC (Software Development Life Cycle)
Changes to Salesforce.com come in a variety of formats but all of them will feature the following change managment controls:
- All changes will start with an GitLab Issue defining the ask or problem, and capturing additional decisions and business requirements.
- All changes will be developed and tested in a Salesforce Sandbox environment before being deployed or replicated in production.
- All changes will be require Business DRI (the requestor) to sign off on the related GitLab Issue once ready and determine a deploy window.
- All changes will be reviewed by the Business DRI once deployed or replicated in production.
We have defined the following ending Label stages for the Sales Systems workflow. Please see the label name as well as SDLC expectations:
No Changes to Salesforce.com
Label: SalesSystems::Deployed - 0 - No Changes
Description: This issue is completed. There was no setting, configuration or code change to SFDC. No Sign-off Needed, No Change Set Used.
- These issues resulted in no Setting, Configuration or Code changes to SFDC.
- The most common use case are question or research issues.
- Data changes as part of a backfill for another operations team fall into this category.
Changes that cannot or are impractical to use a Change Sets (Field Level Security, Sharing Rules, Layout Changes, Picklist Value Changes, Approval Processes, Role Creation and Assignments)
Label: SalesSystems::Deployed - 1 - Settings Change
Description: This issue is completed. There was a setting change. Sign-off is required, No Change Set Used.
- These changes will need a special deploy window for the changes to be made by hand. Please coordinate with the Business DRI.
Changes that contain Salesforce.com Fields, Workflows, Validation Rules, or other non-code Configuration
Label: SalesSystems::Deployed - 2 - Configuration Change
Description: This issue is completed. There was a configuration change. Sign-off Required, Change Set screenshot required.
- These changes will always use a Salesforce.com Changeset that will be linked to the related issue.
- The team member who uploards the change set shall ask a different team member to review and deploy the change. (No Self Deploys).
Changes that contain Salesforce.com Apex Code, Apex Triggers, or Visualforce Pages
Label: SalesSystems::Deployed - 3 - Code Change
Description: This issue is completed. There was a code change. Sign-off Required, Change Set Screenshot required, Approved and attached MR required.
- These changes will require the creation of a Merge Request to our SFDC source repository as instructed below.
- These changes will require a code review by at least 1 other Business Systems Engineer before being marked as ready to merge.
- These changes will always use a Salesforce.com Changeset to deploy that will be linked to the related issue.
- The team member who uploards the change set shall ask a different team member to review and deploy the change. (No Self Deploys).
Destructive Changes to Salesforce Fields Configration
- These should follow our Field and Process deprecation outlined below.
Destructive Changes to Salesforce Code
- These changes require sign off from the Senior Director of Sales Systems.
- These changes will be done via a Salesforce.com Workbench as a destructive deploy.
Milestone Compliance Check Process
Before a Milestone is closed perform the following steps:
- All non-closed issues, must be removed or pushed to the next milestone.
- All closed issues that bear the SalesSystems label must end in on of the 4 deployment stages.
- All Issues must have their neccessary artifacts and approvals related to their deployement stage.
- Any problems found must be raised to a Sales Systems scrum-master immediately to not delay close.
Special Approvals
Please seek explicite and documented approval from the Senior Director of Sales Systems for any of the non-standard situations:
- A deploy during a designated block out period.
- The need to self deploy a non-invasive change.
- The need to create a non-invasive formula field in production for time sensitive triage of a critical issue.
These changes would be classified as a CMT: Emergency Change
. Any issue where this occurs should be flagged with this label for future compliance review.
Critical Field Approvals
Any changes related to the following fields must have direct approval from the Senior Director of Sales Systems:
- Opportunity.Net_ARR__c
Approval for Proposed Changes related to Quoting
- All changes that will impact Quoting (ex. creating quotes, creating validation rules, generating quote PDFs, Quote Templates, Approval Module updates) will require approval from Deal Desk and Channel Ops before being pushed to production. The goal is to prevent changes from being pushed to production that could delay the quoting process or create a bottleneck in the quote to cash lifecycle.
- Approval should be secured in the comments section of the related issue from the Designated Approver outlined below.
- Additionally, if a change is proposed that could materially impact the quoting experience for Sales teams and is not listed below, please request review from Sr. Manager, Deal Desk in the comments section of the issue.
Change | Designated Appover | Back Up Approver |
---|---|---|
Approval Module Updates (Discounts, Payment Terms, Approval Structure/Hierarchy, Approval Notifications, Override Functions) | Sr. Manager, Deal Desk | Manager, Deal Desk |
Channel Quote Approval Module Updates (Validation Rule changes, Discount Thresholds, Approval Structure/Hierarchy, Notifications) | Manager, Channel Operations Manager, Deal Desk | Sr. Manager, Deal Desk Manager, Partner Ops/Alliances |
SuperSonics Logic Updates | Sr. Manager, Deal Desk | Manager, Deal Desk |
Smart Templates Gate Logic | Manager, Deal Desk | Sr. Manger, Deal Desk |
Proposed Validation Rules (Ex. “X” Field is Mandatory on all quote objects, if “X” is blank, user cannot move forward with quote. | Sr. Manager, Deal Desk & Manager, Deal Desk | Manager, Deal Desk |
Quote Templates / Docusign Order Forms | Manager, Deal Desk | Sr. Manager, Deal Desk |
Quoting Workflow Changes (Ex. Updating Button Behavior (Edit Quote vs Maintain Quote), removing fields or permissions) | Sr. Manager, Deal Desk | Manager, Deal Desk |
- If approval is pending Deal Desk review,
Deal Desk::Pending Approval
Label will be added to the issue by the DRI. - Once Approval is secured, Deal Desk will add
Deal Desk::Approved
Label to the issue. If no other approval is required, systems can move forward with work. - If the proposed change will negatively impact the quoting cycle, Deal Desk will add
Deal Desk::Need More Information
Label to the issue. Deal Desk will partner with Issue DRI to identify alternative solutions. - If the proposed change is not approved, Deal Desk will add
Deal Desk::Rejected
Label to the issue. An alternative solution must be presented.
Channel Operations and Deal Desk will work closely on all updates related to the quoting process. The purpose is to ensure that a proposed change does not contradict with an existing process that a team member may not be aware of.
- If approval is pending Channel Ops review,
Channel Ops::Pending Approval
Label will be added to the issue by the DRI. - Once Approval is secured, Channnel Ops will add
Channel Ops::Approved
Label to issue. If no other approval is required, systems can move forward with work. - If the proposed change will negatively impact Channel priorities, Channel Operations will add
Channel Ops::Need More Information
Label to the issue. Channel Ops will partner with Issue DRI to identify alternative solution. - If the proposed change is not approved, Channel Ops will add
Channel Ops::Rejected
Label to the issue. An alternative solution must be presented.
SLA for Channel Operations & Deal Desk Approvals related to Quoting
Channel Operations and Deal Desk will review each issue with the labels above within 1 business day.
Salesforce Specific Processes, Policies and Controls
Change classifications
Due to the nature of changes in Salesforce, all the changes above are classified as a CMT: Comprehensive Change
for auditing and compliance purposes, unless otherwise noted. In order to not overload this tag with all issues which are addressed by the Systems team, we do not tag issues with this tag at this time.
Salesforce Password Policies
Persuant with GitLab’s best practices for password security, our Salesforce environment requires that users use passwords with at least 12 characters, and that they must not re-use any of their last 24 passwords when resetting their password.
Sandbox Refreshes
How to request a sandbox refresh for a personal sandbox
- Create an issue for the Sales Systems team by following the instructions above.
- In the issue description, include the name of the sandbox and the names of any users who need to be granted access to the sandbox.
- Link the issue to any other issues which are blocked pending the refresh of this environment.
Refresh process for sandboxes maintained as part of the SDLC process
- The Sales Systems team will have an issue tracked in GitLab with a label of
SalesSystems
andSandbox Refresh Checklist
for the refresh of each environment with a due date of the refresh date. - On the date of the refresh, the assigned Sales Systems team member will kick off the refresh in production. Note: A sandbox refresh can take up to 72 hours to complete.
- After the refresh completes, the Sales Systems team will complete the following steps to set the environment.
Refresh step | Owner | To be completed by | Environments | Action steps |
---|---|---|---|---|
Reconnect RingLead user | @ksavage | @ksavage/@rrosu | STAGING | 1. Login to RingLead. 2. Locate the SFDC connections page. 3. Authenticate with the RingLead Integration user using the user password for this account in the production org (stored in 1Password). |
Disable Scheduled Apex Jobs | @sheelaviswanathan | @sheelaviswanathan | ||
Disable Outbound Messages or point them to QA server endpoints | @sheelaviswanathan | @sheelaviswanathan | ||
Reconfigure External Web Service calls for a non-production environment | @sheelaviswanathan | @sheelaviswanathan | ||
Disable Analytic Snapshots [ If any ] | @sheelaviswanathan | @sheelaviswanathan | ||
Get the new Sandbox Org ID and instance Id if required | @sheelaviswanathan | @sheelaviswanathan | ||
Remove the email suffix for required users to send email with new sandbox link Required Users in Staging Sandbox jbren jpetr msnow mclyn lscho svisw |
@sheelaviswanathan | @sheelaviswanathan | ||
Create any required users who don’t exist in Production | @sheelaviswanathan | @sheelaviswanathan | ||
Regenerate (or completely disable) Inbound Email Services | @sheelaviswanathan | @sheelaviswanathan | ||
Delete / modify entries in Remote Site Settings if you don’t want to perform certain callouts. | @sheelaviswanathan | @sheelaviswanathan | ||
Disable “Big Deal Alert” on Opportunities [ If any] | @sheelaviswanathan | @sheelaviswanathan | ||
If you have managed packages with API keys ask support teams to regenerate the keys [If Needed] | @sheelaviswanathan | @sheelaviswanathan | ||
If you have “power users” that will coordinate User Acceptance Testing - create entries in Delegated Administration area so they can “login as” | @sheelaviswanathan | @sheelaviswanathan | ||
Break Email addresses on Contacts, Leads etc. with suffix like it’s done for users (if there’s any risk of routine communication kicking in for example from workflow email alerts) | @sheelaviswanathan | @sheelaviswanathan | ||
Disable Weekly Data Export | @sheelaviswanathan | @sheelaviswanathan | ||
For any sensitive email templates it might be worthwhile to change content (fake logo, big red “TEST ONLY” etc) | @sheelaviswanathan | @sheelaviswanathan | ||
Disable Marketo sync | Marketing Operations | Marketing Operations | Staging | Contact MOPs to disable the SFDC sync (before refresh). |
Create and turn on | Marketing Operations | Marketing Operations | Marketing Sandbox/Staging | Must create fields for Marketo Sync (Boolean) on Leads and Contacts in staging before reconnecting. This box should be unchecked, but editable by Mops profile and added to page layout for Mops. Mops will need to request Marketo support to set up custom sync before reconnecting. |
Re-authenticate Marketo Sync (Systems Tasks) | Sales Systems | Sales Systems | Staging | Configure connected Oauth App, provide consumer secret, key and new OrgID to Mops. |
Re-authenticate Marketo Sync (Mops Tasks) | Marketing Operations | Marketing Operations | Marketo Sandbox | Create support ticket to re-map. Once re-map is completed, connect by updating OAuth information. Then, click Login with salesforce > use custom domain > gitlab--staging and login with Marketo Integration details in 1pw vault. Systems may need to provide verification code sent to admin email. Confirm mappings and sync. |
Setup new DKIM key and add to gitlab.com DNS | Sales Systems | Sales Systems | STAGING | Setup a new DKIM key following the instructions here. Once the key has been published, provide the CNAME and Alternate CNAME values to the GitLab IT team to add to the DNS for gitlab.com. Once this is done, confirm an email can be sent to an external email address from a Case using the ‘Send an Email’ feature, and the email is delivered without issue. |
Refresh cadence
Sandboxes which are managed as part of our team’s SDLC process will follow a regular refresh schedule, as detailed below.
Sandbox name | Classic URL | Sandbox type | Used for | Refresh cadence | Last refresh date | Next refresh issue | Zuora Billing Sandbox | Zuora Billing Sandbox Tenant ID |
---|---|---|---|---|---|---|---|---|
Developer | https://gitlab--developer.sandbox.my.salesforce.com/home/home.jsp?source=lex | Partial | Developer integration and testing org. | As needed, up to once per month, minimum once per quarter | 2/14/2024 | TBD | Developer Sandbox (i.e. “Dev Sandbox”) | 10002574 |
STAGING | https://gitlab--staging.sandbox.my.salesforce.com/home/home.jsp?source=lex | Full | Used for UAT of Systems . Also used for troubleshooting. | As needed, up to once per month, minimum once per quarter | 11/11/2022 | TBD | Central Sandbox 1 (i.e. “Staging Sandbox”) | 10000796 |
LIGHTNING | https://gitlab--lightning.sandbox.my.salesforce.com/home/home.jsp?source=lex | Full | Pre-production org. Used for UAT of Systems issues prior to release to production. Also used for troubleshooting. | As needed, up to once per month, minimum once per quarter | 03/26/2024 | TBD | Central Sandbox 2 | 10000719 |
How we Operate
Technical Documentation
- Go-To-Market Technical Documentation
- Go-To-Market Integrated Environments
- License Usage App Documentation
- Salesforce Configuration Documentation
- Lead Source Master Data Set
- Salesforce Dataloader Install/Uninstall/Upgrade Instructions
Working with us
How We Work
- The Sales Systems team works in two week sprints/iterations which are tracked as Milestones at the
GitLab.com
level. This aligns the Sale Systems team with how many of our business partners operate but also takes advantage of one of the solutions that GitLab provides - The Systems team strives to emulate the principles below in planning and executing on our milestones as we believe it most effectively aligns our team with GitLab’s Values
Steps to getting help from Sales Systems
-
Create an issue in our project, making sure to provide detailed business requirements for the ask or problem. Please leave assignee blank
- If this issue removes any existing functionality, or requires any components to be deprecated, please include the
technical debt
label on the issue.
- If this issue removes any existing functionality, or requires any components to be deprecated, please include the
-
In order to align our working style with the Labels, the Systems team prioritizes working on issues in the order as they get added & the issues get labeled accordingly
-
The Systems Label Workflow and Label Description are as follows
- New Issues that are created in the systems board are automatically tagged and any existing issues related to sales systems are tagged with this label
- Issues awaiting for information from the requester, needs more clarity in requirements may or may not be assigned to milestone and assigned to the DRI and/or systems team member
- Issues that are outside the parameters of an initiative, cannot be combined with current functionality and this issue will be closed
- Issues that have completed requirements gathering and been accepted, no milestone and not assigned to systems team member
- Issues that are ready to moveforward to be worked on, slotted to a milestone & assigned to systems team member’s queue
- Issues that are in the current milestone, assigned to systems team member that are actively worked on
- Issues in current milestone that are near the finish line, needs to be reviewed and demoed to the business owner(s) to sign-off
- Issues in current milestones, sign-offs given by the business owner that are ready to be deployed by systems team member
- Issues in the current milestone which are assigned to systems team member which are stalled due to technical difficulties and/or assigned to business owner pending to provide information to the systems member to move forward
-
Please review the status of any issue on our agile board.
-
If there is a severity impacting the flow of business (i.e. No one can make a quote, No accounts are being created, Opportunities cannot be closed Won) follow the process as described above as well as share the issues in the
Sales-Support
Slack Channel
Sales Systems Issue Deployment & Compliance Steps
In order to deploy & close an issue the checklist below has to be signed off :
- 1. [Business DRI] Business User Acceptance Testing Complete with Evidence
- 2. [Business Program Owner] Business Process Owner sign-off.
- 3. [Systems Owner] Systems Owner Sign-off.
- 4. [Systems DRI] Add the correct
SalesSystems::Deployed - #
GitLab Label - 5. [Systems DRI] Screenshot of Completed Change Set Attached and MR Attached (if Code)
[Business DRI] Business User Acceptance Testing Complete with Evidence :- The Business DRI should sign off after validating the provided solution works as expected as definition of done
. The Business DRI will add evidence in the issue or in few scenarios the systems team member will be providing the evidence for the business DRI to confirm in the issue
[Business Program Owner] Business Process Owner sign-off :- Business Process Owner pertaining to the team should provide signoff. The signoff matrix is below pertaining to the Team / Department
Team / Lane | Main Approver | Backup Approver |
---|---|---|
Quote To Cash | Director, Quote to Cash | Senior Director, Sales Operations |
Territory Management | Director, Sales Operations | Senior Director, Sales Operations |
Partner Operations | Sales Operations | Sales Operations |
Customer Success Operations | Senior Director, CS Strategy & Operations | VP of Field Operations |
Sales Operations | Director, Sales Operations | Senior Director, Sales Operations |
Deal Desk | Sr. Director, Deal Desk | Senior Director, Sales Operations |
Professional Services | Director, Professional Services | VP of Professional Services & Education |
Marketing Operations | Director, Marketing Operations | Senior Director, Marketing Strategy & Platforms |
Sales Dev Operations | Director, Sales Development Operations | VP, Sales Development |
Sales Compensation | Director, Sales Commissions | Senior Director, Sales Operations |
Legal | Legal Compliance and Ethics | Senior Director, Legal, Corporate and Compliance |
Sales Systems | Senior Manager, Sales Systems | Senior Director, Enterprise Applications |
Fulfillment | Director of Product, Fulfillment | VP, Product Management |
[Systems Owner] Systems Owner Sign-off :- Salesforce CRM System Owners should provide the signoff. The signoff matrix is an below
Main Approver | Backup Approver (if Sheela Viswanathan is unavailable) | Backup Approver (if Sheela Viswanathan and Al Champagne are unavailable) |
---|---|---|
Sheela Viswanathan - Senior Manager, Sales Systems | Al Champagne - Senior Director, Enterprise Applications | Nabitha Rao - VP, IT |
[Systems DRI] Add the correct SalesSystems::Deployed - #
GitLab Label
Once the issue has been deployed, the issue should be tagged with one of the following deploy label following the SDLC - Software Development Life Cycle by the sales systems team member assigned to the issue
- SalesSystems::Deployed - 0 - No Changes
- SalesSystems::Deployed - 1 - Settings Change
- SalesSystems::Deployed - 2 - Configuration Change
- SalesSystems::Deployed - 3 - Code Change
[Systems DRI] Screenshot of Completed Change Set Attached and MR Attached (if Code) :- If the issue ended up in label SalesSystems::Deployed - 2 - Configuration Change
OR SalesSystems::Deployed - 3 - Code Change
the systems member assigned to the issue should add the screenshot of the change set
Milestone Review and QA
Before a milestone can be closed, the following checks are performed by Sales Systems leadership:
- All issues in the Sales Systems project and authored or assigned to a Sales Systems team member should have the Sales Systems Label.
- All closed issues with the Sales Systems label should be assigned to a Milestone.
- All closed issues in a Milestone need to make sure their SDLC steps below have been completed and have a final deploy label.
SFDC Development Guidelines
Before beginning work, make sure:
- You have a fully setup local SFDC Dev Environment.
- You have access to a personal SFDC Dev Sandbox.
- Your SFDC Dev Environment is correctly pointed at your SFDC Dev Sandbox
- You have cloned our Git repository into your local Sandbox working directory.
- You are working from a GitLab issue with clear technical specifications that deliver on the agreed business requirements.
- You have identified the priority of the request based on our priority matrix, and added the appropriate label:
Priority::Low
,Priority::Medium
,Priority::High
Change Managment Steps:
- Make sure you start on branch master and
git pull
. - Create a new branch, giving it a name that ties back to the issue:
git checkout -b "SalesSystems-158"
. - If you are writing code, frequently push your changes to your sandbox using and
SFDX: Deploy Source To Org
on the changed classes, triggers or pages. - If you are editing configuration, frequently pull down your changes to your local environment using
SFDX: Retrieve Source From Org
on the changed objects or metadata. - Make sure to write and run a unit test for code, and for both code and config, test the changes by hand in the SFDC user interface.
- When you feel your iteration is complete run
git status
to make sure the changed files are the ones you expected. - Add in the files you wish to commit with
git add [filename]
orgit add *
if you want to add all changed files. - Commit your changes with a relevant message:
git commit -m "Fixing Apex CPU Errors"
. - Using the link provided by GitLab, open a merge request, make it a
Draft:
, and assign it to the Architect on the project. - Comment on the related issue with an @ to the project’s Architect for review, providing a link to the merge request. (this automatically links the merge request to the issue)
- The Architect (or assigned delegate) will assign the story a Change Management level, based on the scope of the change as defined here.
- You will then need to document that the appropriate approvals (as defined in the Approval Matrix section below) have been completed in the issue.
- If the Architect calls for a live demo, schedule the meeting and prep your sandbox to do a run through with the end customer.
- If the Architect calls for user acceptance testing, make sure the assigned testers have access to the sandbox where the work was done, and schedule testing.
- Once the solution passes, the Architect will remove the
WIP:
status and merge the change. - Once merged, package up all relevant files into a Change Set from your Sandbox to Production (or to a Staging instance if the Architect requests it).
- Name the Change Set the same as the issue/branch:
SalesSystems-158
and push to production. - Once the Change Set arrives in production, validate it. If there are any errors, go back to step 3. If steps 3, 4, and 5 are followed errors at validation should be rare.
- Once the Change set validates, ping the Architect to schedule the deployment.
- After the deployment, perform any post deployment steps such as adding visibility to net new fields.
- Confirm with the end user that the functionality is working as expected.
- Create a merge request to our technical documentation adding the new feature or editing the features entry.
- Before moving to your next task rebase with
git checkout master
thengit pull
. Always be pulling! - Clone the merged change set that was deployed into production and push and deploy this change set to staging. (Post deploy steps and setup are optionable)
Installed Packages
Installed packages are provided by ISVs ( Independent Software Vendor) who work on the Salesforce platform, and contain the code and configuration for Salesforce which extend the capability of the platform. These are commonly installed and requested by our business partners to extend Salesforce’s native capabilities.
Is the package Managed vs Unmanaged?
Packages come in two flavors, managed or unmanaged. Managed packages are equivalent to signed apps, with self contained source sealed inside of the package. Unmanaged packages are unsigned, and generally contain raw code and configuration.
Generally, vendors either provide managed packages via the Salesforce AppExchange, or via direct installation from their repository. Unmanaged packages generally are provided by the vendor, and may contain raw source or configuration which needs to be manually installed. Note, any code provided the GitLab remains the IP of the vendor provided, unless specific accommodations are provided (such as if we contract with a vendor to extend their base functionality). Because of these additional considerations, unmanaged packages require additional steps to be completed as part of the installation process.
Any package code is the responsibility of the vendor who produced it to support and troubleshoot. If issues are encountered with the functionality, please contact the vendor in question to troubleshoot. If there are changes recommended by the vendor to our environment, log an issue with Systems to track any changes which are requested by the vendor using one of the two processes below.
System stability comes first
We (Sales Systems) reserve the right to remove or uninstall managed or unmanaged code at any time, if this package is determined to cause issues related to system performance or limitations.
If we are accepting unmanaged code or config, we will choose whether to accept these on a case-by-case basis. Unmanaged packages offer significant risk and resource utilization over our managed code. Our goal is always to accept managed packages from vendors.
Managed Package Installation/Upgrade Process
- Identify the package and what reason(s) you may think it should be installed or upgraded.
- Install the version of the package you want to install inside of your sandbox environment.
- Test and confirm the functionality provided meets your requirements, and has no negative impacts to existing functionality.
- Open an issue with Sales Systems to install the package in the STAGING environment.
- Ensure you include links to the package and the install instructions provided by the vendor in the description of the issue.
- Once the package is installed in STAGING, if confirmed to move forward, test and confirm the functionality provided meets your requirements, and has no negative impacts to existing functionality
- If successfully installed in STAGING, announce the intent to move forward in installing in production, and prepare training documentation.
- Document any relevant information about the package as part of the handbook.
- An example of this could be SFDC fields that are part of the package, and the business processes it supports.
- Install the package in production, update the issue and close out.
Unmanaged Package Installation/Upgrade Process
- Identify the package and what reason(s) you may think it should be installed or upgraded, along with any custom code or configuration which needs to be installed separately.
- Install the version of the package you want to install inside of your sandbox environment.
- Test and confirm the functionality provided meets your requirements, and has no negative impacts to existing functionality.
- Open an issue with Sales Systems to install the package in the STAGING environment.
- Ensure you include links to the package and the install instructions provided by the vendor in the description of the issue, along with the inventory of any components installed outside of the package.
- Create a branch in our Git repository to include any custom code or metadata created as part of the unmanaged package which will be tracked in GitLab source.
- Request a package review of the branch by Systems, by assigning the MR to the Sales Systems developers.
- Once the package is installed in STAGING, if confirmed to move forward, test and confirm the functionality provided meets your requirements, and has no negative impacts to existing functionality
- If successfully installed in STAGING, announce the intent to move forward in installing in production, and prepare training documentation.
- Document any relevant information about the package as part of the handbook.
- An example of this could be SFDC fields that are part of the package, and the business processes it supports.
- Install the package in production, update the issue and close out.
Installed Package Removal Process
The uninstall process is the same regardless of whether a package is managed or unmanaged.
- Identify the package and what reason(s) you may think it can be removed.
- Perform initial research on what the packages original intent may have been and identify who owns/owned the use of the functionality.
- GitLab’s Tech Stack Google Sheet is a great place to check for this information and can be found here
- Open an issue with the owner to investigate further. In this discussion, obtain confirmation on whether or not it may be removed.
- Add the
technical debt
label to the issue.
- Add the
- If confirmed to move forward, test by removing the package from the sandbox.
- If successfully removed from sandbox, announce the intent to move forward in removing.
- Document any relevant information about the package.
- An example of this could be SFDC fields that are part of the package.
- Remove the package from production, update the issue and close out.
Field & Process Deprecation
- Since field & process deprecation is as common an occurrence as the creation it is important that the system team implements a repeatable process that we can leverage when deprecating any fields pr processes.
Field Deprecation
- This process is most often used by the systems team. If you have or are aware of a field in Salesforce that is no longer needed, please inform the Sales Systems team by following the process outlined in getting help from the sales systems team
-
Open an issue listing out all of the fields that we are investigating to deprecate. Be sure to include the field name, field API name and the object that the field is associated with in a table in the description of the issue. Add the
technical debt
label to the issue. -
Alert the data team to the upcoming field deprecation by tagging them on the issue.
-
Alert all relevant partner teams (Marketing Ops, Sales Ops, Finance Ops etc.) as needed
-
Prepend
[DEPRECATE]
to the beginning of the field name. If the field name cannot accommodate a field name that long copy and paste the original name into the description, trim unnecessary characters from the name and try again. For this reason[DELETE]
is also acceptable to prepend to the field name. -
In Visual Studio Code, pull from master and perform a scan for each of the API names in the issue. If the field is used, investigate if the code can be updated as to not include this field.
-
If code is updated in the previous step prepare a merge request and relate it to the issue.
-
If your sandbox is out of date, work with the Systems team to refresh it so that any recent edits are included in the next step.
-
Push any updated code to your sandbox (if applicable) and start a change set.
-
For all fields that are still eligible to be deprecated log into your sandbox and attempt to delete them one by one. Record any connection between any fields and any field updates, workflow rules, validation rules etc. (Reports, Report Types etc can be ignored in this step)
-
Investigate any connections found in the previous steps and if the field can still be deleted.
-
For all fields that cannot be deleted
- Link the investigation issue to the investigated field by pasting the GitLab Issue Link in the fields description.
- Assign someone as an owner of the field in Salesforce
-
For all fields that can be deleted
- List them out on a final comment on the issue
- Update the due date of the issue to the date they will be deleted
- Confirm that there are no issues with the tagged related teams
- Validate any change sets with updated automations (if applicable) before the issue due date
- On the issue due date deploy any change sets and delete the fields from production. If possible allow for a 1 day lag time between field deletion and deleting fields from the
Deleted Fields
section in Salesforce
Process Deprecation
- Deprecating a process often includes a change in team behavior as well as updates to any processes. The Systems team is working on detailed documentation to address these changes and more info will be coming soon!
Deactivate Service User
- This deactivation process is made to deactivate service user profiles. Service accounts are accounts that are used as integration Users, Connection users etc., in order to deactivate the service user account follow the template. Please note deactivating standard users will be done by Sales Operations.
Sales System’s journey with CI/CD using GitLab and Salesforce
We have begun the journey of further leveraging our own GitLab tool by creating our first pipeline for our own Salesforce environment!
Our own pipeline is based on the great work done by @mayanktahil and @francispotter: the SFDC CI/CD templates. If you are interested in more information about this project and want to see it in action, check out Salesforce Development with GitLab and Accelerate DevOps with GitLab and Salesforce
With this comes some change, as we are now more stricly enforcing compliance controls by limiting manual changes into the STAGING org.
Effective 2/16/2022, the following methods are the only approved way to deploy to STAGING.
- Via inbound change sets from another GitLab owned sandbox
- Via vendor package installs or upgrades
- Automatic deployments via our CI/CD pipeline
Our CI/CD template
Our own version of this CI/CD template can be found here. It is a simplified version, to allow us to iterate.
This template removes the capabilities to use Scratch Orgs in favor of using an Org-based deployment model. The model used by this CI/CD file has a single environment configured, denoted as ‘STAGING’. The deployment script also limits deployments only to ApexClasses, ApexTriggers, ApexPage, and ApexComponents stored in the root source directory.
The pipeline performs the following action:
- Whenever a commit is made to a branch related to a Merge Request, install the SFDX CLI on a runner and execute the sfdx force:source:deploy method to perform a validation deployment against STAGING.
- This validation deployment will compile all ApexClass, ApexTrigger, ApexComponent, and ApexPage objects found in the new commit source branch.
- If the compile succeeds, all unit tests in the SANDBOX org will be executed to confirm all unit tests are passing.
- If the compile or unit tests fails, the pipeline will spit out the errors as individual line items in the output of the job.
- The MR will then be blocked from merging.
- If the compile succeeds and unit tests pass, the MR will be cleared for merging after code review is complete.
- The pipeline will also allow for the user to trigger a deployment of the source code to the STAGING environment.
- This is a manual process for now (see What’s next?) and will be triggered by the person who is merging the MR once the merge has completed.
- The team decided to leave this step manual so that we have flexibility on deployments in case multiple MRs were being merged simultaneously.
- In this scenario, we will only deploy the last MR as it will have the final complete ‘master’ branch will all previous MRs merged.
Benefits of the pipeline
- All channges to ApexClasses, ApexTriggers, ApexPage, and ApexComponents stored in the Sales Systems source will now be managed directly from source, rather than having to be managed manually through change sets or via manual deploys.
- We reduce the number of manual changes to the STAGING environment, limiting potential conflicts and issues creeping into production.
- We can leverage the power of GitLab Analytics to better understand how we can better run our team!
What’s next?
We are beginning to explore using Sandbox Source Tracking, a feature Salesforce released last year to enable easy export of configuration changes from a developer environment into source control.
This tool will enable our admins to track complex changes to their developer orgs and easily check these into source control.
Once we do so, we can expand our pipeline to include these objects in our pipeline in STAGING. This will allow us to validate administrative changes such as field renames, picklist value changes, validation rules, workflow, or flows, and deploy them quickly to STAGING. As this removes the manual step for admins to build change sets from their environments into STAGING, it will save them time to focus on other things.
After this, our next goal will be to see if we want to start automating deployments to STAGING once an MR is merged. This will only save us a click, but is an important step for us as a team to become comfortable with using the process of automated deployments into our STAGING environment.
Quote to Cash Documentation
455376ee
)