OBLYTECH Logo
OBLYTECH Logo

Custom Application Developments

Why Choose Oblytech for Custom ServiceNow Application Development?

While ServiceNow offers a strong suite of out-of-the-box functionalities, every organization has unique processes and requirements that may not be fully met by standard features. Oblytech’s Custom Application Development services help you extend ServiceNow’s capabilities and build custom applications that integrate with your existing workflows, automate complex processes, and improve productivity across your organization.

Our Custom Application Development Services

We offer ongoing support and maintenance services to keep your custom application up-to-date, address any issues, and incorporate enhancements as your business needs evolve.

We deploy your custom application to your ServiceNow instance and provide comprehensive training to your team, ensuring a smooth transition and user adoption.

We conduct rigorous testing to ensure that your custom application functions as intended and performs optimally.

We work closely with your team to understand your specific needs, challenges, and desired outcomes. We’ll analyze your current processes, identify areas for improvement, and define clear requirements for your custom application.

Our ServiceNow developers and architects design a reliable and scalable solution that meets your functional and technical requirements. We use ServiceNow’s powerful development tools and frameworks to create applications that integrate well with your existing environment.

We follow agile development methodologies to ensure transparency, flexibility, and timely delivery. Our iterative approach allows us to incorporate your feedback throughout the development process, ensuring that the final product meets your expectations.

Configuration versus a custom build

Most requests for a custom ServiceNow application are really requests for a behavior the platform already offers in some form. A form that does not show the right fields, an approval that goes to the wrong person, or a report that is hard to build usually has a configuration answer. A custom application is the right answer when the process needs a data model, screens and logic that the standard product does not provide and cannot reasonably be made to provide. The difference matters because custom code is often the part of the platform that costs the most to keep working through each upgrade, and it is often the part that outlives the people who wrote it.

This page is for the platform owner or the business sponsor who has been asked to approve a custom build, and who needs a basis for saying yes, no or not yet.

A test for whether the gap justifies a build

Before any design starts, the requirement should pass four tests. Each test is a question, and a build is justified when the answers are mostly no to the question about configuration and mostly yes to the questions about ownership and longevity. The table below turns those questions into something a sponsor can check.

TestQuestion to askSignal that a build is justifiedSignal that configuration is enough
Standard productCan the standard tables, forms and workflows meet the need with settings or small rules?No, and the attempt has been madeYes, or nearly yes
Data modelDoes the process need records and relationships that do not fit existing tables?Yes, with a clear list of the new entitiesNo, the existing tables already fit
OwnershipIs there a named business owner who will decide changes to the application?Yes, and that owner will be in the design sessionsNot yet, which means the build is premature
LongevityWill the process still exist in its present form after two or three platform releases?Yes, on current evidenceUncertain, which favors a lighter solution

A requirement that fails the ownership test is the most common reason custom builds go wrong. Without an owner, every upgrade becomes a debate about whether the application is still needed, and the cost is paid by the platform team.

Maintainability of a custom application after go-live

A custom application that works at go-live and then decays is more common than one that fails at launch. Maintainability is designed in, and it depends on a few concrete choices made early. The most important is scope. A custom application should usually live in its own scope, with its own tables, scripts and roles, so that its dependencies on the platform are visible and its changes can be tracked. Applications built directly into the global scope, mixed with unrelated configuration, can be hard to upgrade and hard to hand over.

  • Clear boundaries: the application declares what it reads from the platform and what it writes, so that a change elsewhere can be checked against it.
  • Minimal coupling to base configuration: custom logic that depends on details the vendor may change in a release is the first thing to break at upgrade.
  • Documented intent for each script and rule, written in terms of the business decision it supports, so that a future developer can tell whether it is still needed.
  • Access roles defined for the application itself, not granted by broad platform roles, so that the people who can change the application are a known group.

The honest test of maintainability is whether someone who did not build the application can explain it to a new team within a reasonable time. If the only explanation lives in the original developer’s head, the application is a liability that has not yet shown its cost.

Sequence of a custom application build

A custom build tends to move through the same stages whatever its size. The sequence matters because each stage removes a source of rework in the next. Skipping one usually shows up later as a change request that should have been a design decision.

  1. Requirements in terms of the process, not the screens. The team writes down what decisions the application supports, who makes them, what information they need and what happens when information is missing.
  2. A design review that tests the data model against the existing platform before any build begins, looking for tables and capabilities already available that could carry part of the need.
  3. Iterative build in short cycles, with the business owner reviewing working screens and not only documents. Feedback at this stage is cheap; feedback after release is expensive.
  4. Testing that covers exceptions, permissions and bad input as well as the happy path, because happy-path testing alone rarely surfaces the defects users hit first.
  5. Deployment with a rehearsed release and a defined rollback route, followed by a support period in which the team watches for unexpected use.

Testing and release for custom code

Custom code needs a test approach that survives change. Automated tests that check the application’s key behavior give the team confidence when a neighboring part of the platform changes. Manual testing still matters, particularly for screens and for the judgment calls in the process, but it does not scale to every release. The useful test set is small enough to run each time and specific enough to fail when something important breaks. A test suite that tries to cover every path becomes too slow to trust.

Release discipline is equally important. Changes should move through the same route as the rest of the platform, with a record of what changed and why, and with the owner’s approval where the change alters behavior. Emergency fixes happen, and they should be recorded and then reviewed later, because an undocumented fix to custom code is the kind of change that disappears in the next upgrade.

Ownership after the application goes live

Ownership is the part of a custom build that is most often left vague. The application needs a business owner who decides what it should do, and a technical owner who decides how it is changed. Both should be named in the handover, and both should know what the other is responsible for. Without that split, business requests go to developers who do not know the process, and developers make changes the business never approved.

Support needs a defined path too. Users should know where to report a defect, how it is prioritized, and who will look at it. A custom application with no support route will be worked around, and workarounds are where the next maintenance problem starts.

When should we use a scoped application rather than a global one?

Almost always for anything that will be maintained separately from the platform’s standard configuration. A scoped application makes its dependencies visible and keeps its changes contained, which is what an upgrade and a handover both need.

Can a custom application be built by our own developers?

Yes, provided they know the platform’s development model and have time to maintain what they build. The question to ask is less about skill and more about whether the person who writes the code will still be there to support it in two years.

How do we know a custom build will survive an upgrade?

You cannot know for certain until the upgrade is tested. You can reduce the risk by keeping the application in its own scope, avoiding changes to base configuration, and running a regression check against the application’s key behavior before each release.

What should a handover include?

The design decisions and the reasons for them, the data model, the list of dependencies on the platform, the test set, the access roles, the named owners and the support route.

Preparation before a custom application discussion

Describe who makes the decision, what information they need, what they do today, and what is wrong with that. Add any configuration already tried and why it fell short. That history is valuable, because it separates a true gap from a request that was never given a fair try with the standard product. The number of screens, the complexity of the logic and the testing the application needs determine the effort. A provider that quotes before reviewing those has guessed.

Related pages cover the surrounding decisions. The scoped application architecture page covers the capability boundary an application owns, and the App Engine platform engineering page covers the business capability and ownership questions that come before an App Engine build. The low-code governance page is the right read if business teams will build or change applications without the platform team. For the release side, the automated testing and release assurance page covers which workflows to protect with repeatable tests and how results feed a release decision. The ServiceNow implementation overview shows how a build fits among the other implementation routes.

If you have a requirement that may need a custom build, discuss your application requirement with the team.

Configuration, Flow Designer and scoped application options

A custom ServiceNow application is a scoped package of tables, forms, scripts and roles that supports a process the standard product cannot cover with settings alone. The first question is which mechanism fits the requirement, because most requests that sound like they need a custom build are solved by a lighter option.

Four options are usually on the table:

OptionBest fitMain cost after go-live
Form, list and UI configurationA missing field, a layout change or a view a user needsLow, though small settings drift without a record
Flow Designer workflowA repeatable sequence across existing tables, with approvals and notificationsModerate, because each flow path needs an owner
Scoped custom applicationA new data model, its own screens and logic, and a named business ownerHighest, because its tests and release steps are the team’s to maintain
Integration to an outside systemData that must stay in its source system and be read rather than copiedModerate to high, depending on how often the other system changes

Work through them in that order. A flow is usually the cheaper answer when the data already exists in the instance. An application earns its cost when the process needs records and rules that no existing table describes. An external integration fits when the data has to stay in its source system. If the flow route looks likely, read the guardrails for citizen development first.

Take a hypothetical case: a team wants to track building access passes. First check whether a catalog request with a short approval already covers it. If not, ask whether a pass needs its own record with an expiry date, an issuing location and a return status. Only when no current table fits is a scoped application justified, and then only with a named business owner. The App Engine and low-code overview shows what the platform offers before that decision.

Once the choice is made, write the boundary before the first table exists: the records the application owns, the records it only reads, and the events it sends elsewhere. Tie the release path to the update set and release management approach the team already uses.

The failure mode to watch for is an application that keeps being patched with flows and business rules until nobody can say which part to remove. If one change has to be made in several unrelated places, move that logic back into the application.

What a custom ServiceNow application is made of, and where each part usually breaks

A custom ServiceNow application is typically built from tables that hold its records, forms and lists that show them, server-side logic that changes them, access rules that decide who can act, scheduled jobs, and integrations. Many builds that cause trouble later fail in one of these parts, and the likely failure is usually visible on paper before any code is written.

PartTypical breakage
Tables and fieldsNew columns added to a table the platform owns, so upgrades and other teams collide
Forms and listsLayouts built for the sponsor’s screen, then worked around by users
Business rules and script includesThe same decision copied into several rules, so nobody knows which copy is right
Client scripts and UI actionsBrowser-side checks treated as the only control, so records written by other routes skip them
Access rules and rolesBroad platform roles granted to get a build working, which then reach well beyond the application
Scheduled jobs and integrationsNo named owner and no failure alert, so a stopped job goes unnoticed

Start the review with the tables, because most of the other parts depend on them. Then ask for the failure path of each job and integration before the happy path. Access rules carry quieter risk, since a build that works for its tester can still show records to the wrong group.

Business rules deserve the closest look. In most implementations a single decision lives in one script include that the other parts call, rather than in several rules and client checks.

Confirm the names, menus and default behaviour of each part on your own instance and release before designing against them. Individual features change between releases, and a design written from memory of an older one is a common source of rework.

Check proposed tables against what the instance already holds, using the workflow data and context design approach. Plan the business validation with the UAT planning for business-owned validation guide, and check the next release with the platform performance and upgrade readiness page.

ServiceNow configuration vs customization: where to stop customizing

Configuration uses the settings, forms, flows and rules the platform already provides. Customization changes the platform’s own parts, such as baseline records, out-of-the-box scripts or tables the vendor ships. Stop customizing at the point where a change would alter something the vendor maintains, because that is the change an upgrade is most likely to disturb.

In most implementations the expensive customizations are not the large builds. They are small edits to baseline items, made to solve one request: a business rule changed on a core table, a field added to a platform table that several teams use, or a standard form copied and edited in place. Each one looks harmless when it is made. At the next platform upgrade the platform compares what it ships with what the instance holds, and a changed baseline record is typically held back for review rather than overwritten. Someone then decides, record by record, which version wins, and the work repeats each release.

Changes that usually break or stall an upgrade include:

  • Editing an out-of-the-box script include directly, instead of extending it from a new piece of logic that the platform does not own.
  • Adding columns to a platform table that other teams also depend on, so a later vendor change to that table has to be reconciled with your additions.
  • Copying a standard form or list and changing the copy, which leaves behind every later improvement the vendor makes to the original.
  • Scripts that rely on the position of a field on a form or on the wording of a label, which can shift without any change to what the product does.

When reviewing a customization request, ask three questions in order. Can the same outcome come from a setting, a flow, or a new table inside a scoped application that keeps the change contained? If a baseline item must change, is the edit limited to the smallest record that holds the behavior? And who will review that record at each upgrade? A request that cannot answer the third question should wait.

Check how your release handles held-back records, since review screens differ between releases. A health check of existing customizations is a practical way to list the modified baseline items before the next upgrade starts.

ServiceNow guides on this topic

Guides from the Oblytech ServiceNow library that explain the practice behind this page.

More in this section