Salesforce Environment Management v1 [BDI]
Due to the complex nature of overlap and conflict between items of development within a typical Salesforce implementation, there are significant challenges with managing version control of deployed components. The purpose of this document is to outline our agreed strategy for management of sandbox instances and our deployment cycle from development, through client testing and finally, production releases.
Project and Journey Development Process
Some basic rules relating to new development items;
New development requires the explicit engagement of the client (through their nominated representative, IT Team (or similar)
For project related work, this approval can be obtained through a formally approved project proposal or signed statement of work
For Journey or support development, a request can be made via a Jira ticket on the appropriate board
For development of new features or enhancement of existing features, an estimate is recorded against the ticket before the client indicates they would like to proceed
For bug or defect resolution, these are prioritised and if covered by warranty period or agreement, are non-billable (refer to SLA)
Monthly Journey development cycle
Journey development is conducted across a monthly recurring planning, development, testing, release cycle
A planning meeting is conducted to review development items, discuss requirements and schedule the appropriate scale of development for the upcoming month
This is followed by a development sprint and a release to the nominated testing environment for the client to perform their UAT
Following any necessary reworking, if approval is granted, we then deploy the relevant components to Production on the agreed upon monthly release day
Project development according to the approved project proposal/SoW
Project development scheduling is governed by the development sprint and release timeline agreed with to with the client
Sprint structure includes provision for requirements gathering, development, showcases and demos, testing and feedback, reworking and production releases
Conflict or overlap between project development and journey development items
Any potential conflict between development streams for a single client are managed through the use of separate development instances
Separate development streams are generally merged into a singe UAT environment for testing prior to production release
In cases where separate development streams contain updates to a shared component, separate test environments and releases may be required
Both journey and individual project development streams are managed via separate Jira boards linked to the parent client Confluence space.
Instance Management
To help separate individual project development streams (that can occur over significant periods of time) from ongoing journey and support development, new development sandboxes are spun up (or refreshed from existing DEV sandboxes that are no longer in use) on a needs basis.
As a general rule, we aim to keep our sandbox and UAT environments as closely aligned with the Production environment as feasibly possible. For this reason, we have a structured process in place for the management, creation, refresh and destruction of these environments, across the lifecycle of a project or support engagement;
Standard
DEV
sandbox naming convention is used for each project development stream (we may defer to a client’s preference for sandbox naming convention)UATPC
(Partial Copy) sandbox for QA and internal testingStage_Prod
(Partial or Full Copy) sandbox for client UAT and QA testing. This is a effectively a staging environment for Production.Prod
(Production/Live)
Sandbox Refresh Policy
Vertic to discuss the possibility of Sandbox refreshes every month on Support/Journey calls.
As a minimum, Vertic aims to refresh all Support/Journey Sandboxes every quarter in alignment with quarterly Health Checks and environment reviews.
If this cannot be achieved then all deployments are to be routed through a newly refreshed Staging Production Environment.
Sandboxes specific to project streams should be refreshed after each project Go-Live
Partial and Full Copy Sandboxes - Sensitive Data Management
Both Partial and Full Copy sandbox environments are cloned copies of the production instance that include either a limited (partial) or complete (full copy) copy of the data from the production environment. When creating or refreshing these environments we take several steps to invalidate sensitive data. By default we invalidate Contact email addresses (to ensure no emails are sent to real contacts) and payment token IDs (where relevant instance includes a payment gateway integration) to ensure no payments can be processed in error.
Additional field or object data can be excluded, encrypted, invalidated or deleted at the request of the client.
Deployment Management and Jira Workflows
The below diagram details the typical deployment cycle across environments;
Our Jira ticket lifecycle and process flows reflect the depicted workflow. Both project and Journey/support tickets are managed using the Vertic Jira workflow process steps;
Backlog (not yet approved for development)
Selected for Development (approved for development)
In Progress (currently assigned to a developer and under development)
Failed Testing (reverted from either the internal testing or client testing resource with feedback)
Vertic Review (assigned to project lead or senior developer for internal QA testing and review)
Client Review (ready for testing/review by relevant client team member)
Client Approved (fully tested and approved for release to production environment by the client)
Done (successfully deployed/released to production environment)
Jira tickets also contain an environment attribute for tracking the environment that the piece of development have progressed to and can be tested/reviewed in.
Issue Type Management
Jira items can be categorised into various issue types for ease of reporting, filtering, assignment and management of workflows. The issue types included in our Jira workflows are defined below;
Epics major development streams that can encompass various components and elements and can be shared across projects and boards
Can contain many stories, tasks and sub-tasks
Bugs are errors, faults or defects in components where expected behaviour is not observed
This issue type is automatically moved to the
Selected for Development
status and prioritised (according to SLA)
Stories issue types are most often utilised for user stories provided by clients or gleaned from requirements gathering workshops
Used to document requirements or requests from clients
Can contain many tasks and sub-tasks
Not usually assigned to developers directly
Tasks and sub-tasks used for technical definitions of development work, usually created, written and managed by the consultancy and technical teams
Usually contain technical specifications translated from requirements
Used for development resource planning and estimates
Production Deployment Scheduling
Scheduling for deployments into the client’s live production environment will be dependent on whether it is project-related development or Journey development.
Project go live or production deployments are to be determined by the agreed project timelines and subject to approval by both the client’s IT/project team and/or the Project Manager or Sponsor
All Client Journey development tickets with a “Client Approved” status will be deployed on an agreed deployment date
Clients are to provide their deployment preferences including preferred days and times
Critical bug fixes, warranty items or other agreed-upon urgent items will be deployed on an adhoc basis, depending on severity and impact (defined further in the SLA)
Deployed tickets to include a link to the relevant
Changeset
or theClicksetId
Rollback Policy
For significant deployments, it is necessary to have a Rollback procedure in place in the instance of unanticipated bugs and issues post-production deployment.
In this instance, a time-sensitive decision has to be made as sometimes rollbacks are not necessary and can end up consuming more time. Typically, there are 2 options:
Rollback: Redeploying a previous release in a specific environment to return to a known good state.
Redeployment: Redeploying the same release with “Hot Fix’s” to fix the bug/issue
For significant deployments,
Clicksets
(links to the set of components deployed) will be provided in the Jira ticket, to help the developer and consultant identify the more time-efficient solution.To ensure the highest chance of a successful rollback being possible, a staging production environment (StageProd) should be regularly refreshed to ensure we have access to the most recent working version of the metadata.
To achieve this we can run our refresh procedure in StageProd before making significant deployments.