Well ServiceNow’s Knowledge 2020 virtual conference is over. There were lots of great sessions packed with useful content providing a plethora of learning. While I did learn a bunch, especially about new features coming with Orlando and Paris, my favorite part of our quarantined conference this year was the CreatorCon Hackathon.
This was my first time participating so I wasn’t certain what I was in for. I reviewed previous Hackathon entries that I could find but there was only the finished product, nothing truly about the process. I found a ~4 minute video on Robert “The Duke” Fedoruk’s YouTube channel, which has a lot of good ServiceNow content, on “How to Win a Hackathon”. All of this data served to get me an idea of what the final product should be like.
Some of my coworkers and I joined forces with Jon Lind and others to work on Jon’s app idea. Inspired by the ongoing COVID-19 pandemic, the idea was to provide a solution for contact tracing in ServiceNow for viral contact. One of the key activities in helping to track and slow the progression of the virus is contact tracing. This was a bold concept to tackle in one weekend. With so little time to plan and execute, architectural design was short (~1 hour), and development started almost immediately.
Now I know what you’re picturing: developers gone wild. Honestly, it would have been easy for the group to simply slap code together without concern for best practices, sacrificing successful ongoing support and maintenance for quick wins. As it turned out, we had a team that really wanted to produce something valuable for the communities we live in, so as much as possible we stuck to best practices. Which ones you ask? There are 2 that we really tried to abide throughout.
First was to build our new app in its own scope. We could have simply built within the global ServiceNow scope and not worried about it, right? ServiceNow provided the instance, and technically owns the code at the end, so let them worry about it. That wasn’t what we wanted. The final solution needed to be portable so as to work in any ServiceNow instance. Without scoping our app, there wouldn’t be a simple way to capture all of the updates including their dependencies and publish it to the ServiceNow store. Yes, we could have used a global update set, but that wouldn’t be best practice now would it?
Our second best practice behavior during development was to promote code reusability and centralization with Script Includes. Creating server calls in the same file allows for simplification of actions elsewhere. Server actions (e.g. business rules, UI actions, etc) can use short, familiar function calls like:
var variable_name = new ScriptIncludeName().function_name(parameter);
This makes it easy to read scripts and simplifies support by having a single “repository” of functions that support a given feature. Client scripts (including client portions of UI actions) can also make calls to these central locations for access to server data. All of these actions then have access to functions that only have to be written once, instead of repeating the same code in multiple places.
So what? Well, it all adds up to the fact that good behavior (i.e. best practices) can be applied even in the tightest of time frames. While we didn’t win the Hackathon, we had a good time together and learned a ton through this project. Interestingly, not long after the Hackathon, ServiceNow announced their own contact tracing app.
Next year, I plan to compete again. It was a great experience. I intend on applying our lessons learned in the future, though. Along with applying best practices where possible, I’ll work to assemble a team earlier. Having everyone know each other ahead of time will help streamline communications and establish team norms. I’ll also try to nail down the idea and basic architecture by the time registration opens. Hopefully, this will put us in a position to deliver a great prototype product that will catch the eye of the Hackathon judges.
Stephen Sturdevant is a Senior ServiceNow Developer at Bravium Consulting. To learn more about our services and product, please use the links below: