With recent introduction of both Team Development and Applications as fairly new tools in your ServiceNow development toolkit, many customers continue to struggle with how best to utilize these new tools alongside the existing ones like Update Sets. I will discuss how each of these tools were designed to be used, and where best to use them in conjunction with each other, to best achieve your internal development and deployment process goals.
Differences between Development and Deployment
In development we have individuals and/or teams managing multiple work streams to achieve a project goal within a specific deadline:
- Development is conformable to parallel team based processes as they construct the next unit of development. It is within this phase that customers can engineer quality and assure its achievement.
- Deployment is the phase that follows development, where the now completed development units are deployed, tested, validated and ultimately moved into your live production environments. It is within this phase that we see the execution of your change management process at work, and where quality is confirmed by stakeholders and ultimately end users.
Perhaps you are familiar with some of the development tools that exist outside of the ServiceNow platform such as Git, Perforce, or Jenkins. Much like these external tools, the internal tools provided within ServiceNow are designed to help you achieve your goals of fast development and deployment, with no production downtime. All of these tools are; however, just that, tools. How each customer uses them will be determined by their internal processes and best practices, along with the scale of their individual instance architecture. Lets take a look at each of these tools a little more in-depth to understand where best to utilize each one within your individual organizations.
Team Development vs. Update Sets
It is important to know the difference between a version, and update, when looking at Team Development and Update Sets:
- A version (sys_update_version) tracks changes to a file. Team Development works by comparing the differences in versions between two instances.
- An update (sys_update_xml) enables adding, updating, or deleting another file on a target instance; and also prevents upgrades from changing customer customized files.
- An Update Set is a package designed to hold an arbitrary collection of updates in the form of XML payloads, which can be retrieved and committed to target instances.
Team Development allows for collaboration between instances using a Parent and one or more Child instances, and is a version control system similar to Git. Team Development compares the current versions of records within the sys_update_version table to locate and tag local and remote changes between instances.
Team development should be used for the development process only, and not for the deployment of changes; update sets will continue to be used to deploy changes to Test and Production instances regardless of whether you choose to utilize Team Development or not. Additionally, Team Development is not a 'one size fits all' feature and should only be utilized by customers that have multiple development teams working in multiple development environments with complex development timelines.
As we can see from the illustration above, Team Development and Update Sets work hand-in-hand to develop and then deploy your customizations through your instance pipeline. Team Development should not be used to deploy changes to any Test, UAT, or Production environments, as this falls outside the design and scope of this feature, and doing so can cause undesired results to occur which can be problematic to recover from.
Update Sets remain an integral part of the deployment pipeline, and Team Development is not meant nor is it designed to replace Update Sets. You will continue to utilize them regardless of whether you use Team Development, or not. Update Sets are essential for customizing both Out-of-box applications and applications purchased from the App Store. Where Update Sets shine is by letting you apply changes in bulk and helping you to force an instance to load the file versions you need, additionally they are very useful for:
- Keeping track of why a change was made.
- Exporting work-in-progress ahead of a clone.
- Associating changes to SDLC artifacts.
Applications and Update Sets
Applications are not entirely new to the ServiceNow platform, but how they are used in the Fuji and Geneva releases has change somewhat to how they were used and deployed previously. Prior to Fuji, applications were deployed through the use of Update Sets. Since Fuji however, through the introduction of the App Store and Company Repository, applications can now be uploaded into the company repository and then subsequently downloaded and installed (much like a plugin is installed) to the target instance without ever needing to utilize an Update Set in the deployment process.
Update Sets can still be used to deploy an application, should the user desire it, by utilizing the Publish to Update Set UI Action, from the Application form. This will in turn package the application, in its entirety, into a new complete update set, allowing you to retrieve and commit it to your target instance of choice. You should choose to utilize either the Company Repository OR Update Sets to deploy your applications, but never both. Once you begin to deploy your applications through update sets, it becomes very difficult to switch back to using the Company Repository going forward.
In the case of Applications that have been purchased from the App Store or Out-of-Box System Applications, this is where you will need to use Update Sets exclusively to customize the application to your needs, and deploy these changes through your instance pipeline.
- Team Development adds to the development side of the instance pipeline and should not be used for testing or deployment.
- Deploying Store and Internal applications is easy, and you retain the ability to customize.
- You will continue to use Update Sets regardless of whether you use Team Development or Applications.