What It Is
Delegated Development is ServiceNow's governance framework that grants non-admin users controlled development access within specific application scopes without elevating them to full platform administrators. It operates through Delegated Developer groups that define precisely which applications a developer can modify, which tables they can access, and what development actions they can perform. This solves the fundamental enterprise problem of needing to scale ServiceNow development beyond the platform team while maintaining security boundaries and preventing developers from accessing or modifying applications outside their domain. The feature essentially creates development sandboxes with enforced boundaries, allowing organizations to distribute development work without distributing administrative privilege.
Architecturally, Delegated Development lives within the System Applications framework and integrates directly with ServiceNow's Application Scope engine and the Studio development environment. The core tables include sys_user_group for the delegated developer groups themselves, sys_scope for application scope associations, and sys_user_group_member for developer assignments. The execution layer intercepts Studio access, Application Engine Studio operations, and direct table access through the platform's Access Control framework, evaluating delegated permissions before allowing any development action to proceed.
The feature integrates with ServiceNow's broader security model by extending role-based access control to the application scope level, meaning that delegated developers inherit the intersection of their assigned roles and their delegated scope permissions. When a delegated developer opens Studio, the platform dynamically filters available applications to show only those within their assigned scopes, and any attempt to access tables, scripts, or configurations outside those boundaries triggers access denial. This creates a development experience that feels native to the developer while maintaining strict governance boundaries that are transparent to them but absolute in enforcement.
You cannot function without Delegated Development in enterprise scenarios where business units demand direct development access to their ServiceNow applications, when vendor partners need to develop integrations within specific scopes, or when your organization has grown beyond a central platform team model. The most critical scenario is multi-vendor development environments where different system integrators must work simultaneously on separate applications without access to each other's code or configurations. Without this governance model, you face the impossible choice between granting dangerous admin access or creating bottlenecked development workflows that route all changes through a central team. Large organizations with dozens of scoped applications absolutely require this capability to maintain development velocity while preserving security boundaries.
Platform administrators own the creation and configuration of Delegated Developer groups, defining which scopes each group can access and managing group membership. Application developers work within their assigned scopes without knowing or needing to understand the governance boundaries—the platform simply shows them their permitted applications and denies access to everything else. Platform owners typically assign one delegated developer group per major business application or vendor relationship, creating clear ownership boundaries that align with organizational structure. The relationship is hierarchical: admins control the framework, delegated developers work within it, and business stakeholders benefit from faster development cycles without security compromise.
Recent ServiceNow releases have strengthened Delegated Development integration with App Engine Studio, allowing delegated developers to use the low-code development environment within their scope boundaries starting in Vancouver. Xanadu introduced enhanced scope validation that prevents delegated developers from creating cross-scope dependencies accidentally, and improved error messaging that clearly explains scope boundary violations. The Washington release added support for delegated developers to manage their own application store submissions for applications within their designated scopes, streamlining the path from development to production deployment while maintaining governance controls.
Where to Find and Configure It
Navigate to User Administration > Groups to create and manage Delegated Developer groups, where you'll configure the group type as Delegated Developer and assign the allowed application scopes. Access System Applications > Studio to see the developer experience in action—delegated developers will only see applications within their assigned scopes. Check System Applications > Application Engine Studio for low-code development access governed by the same scope restrictions. Monitor delegated development activity through System Logs > System Log > Application Logs to track scope boundary violations and access attempts.
For scoped applications, verify delegated development permissions by checking the Application Scope field within individual application records at System Applications > Applications. Global applications require special configuration through the Can access global application tables checkbox on the delegated developer group record. View active delegated developer sessions and their scope access through System Diagnostics > Sessions, filtering for users with active Studio or development sessions. Access the underlying data model through System Definition > Tables and examine sys_user_group and sys_scope to understand the relationship between groups and application scopes.
How It Works Step by Step
Delegated Development operates through ServiceNow's Access Control framework by evaluating user group membership and application scope associations before granting development environment access. When a delegated developer attempts to access Studio or App Engine Studio, the platform queries their group memberships, identifies any Delegated Developer groups, and retrieves the associated application scopes from the group configuration. This scope list becomes a filter that determines which applications appear in the development environment and which tables the developer can access within those applications.
The enforcement mechanism integrates with ServiceNow's role-based security by creating an additional permission layer that intersects with existing role assignments. A delegated developer's effective permissions become the intersection of their assigned roles and their delegated scope boundaries—they might have the admin role within their designated scopes while having no access to tables or configurations outside those boundaries. The platform maintains this enforcement through runtime checks that occur on every Studio action, table access, and configuration change, ensuring that scope violations are prevented at the execution level rather than relying on UI restrictions alone.
Caching plays a crucial role in performance, as the platform caches each user's delegated scope permissions for the duration of their session to avoid repeated database queries. When group membership or scope associations change, the platform invalidates affected user sessions, forcing them to re-authenticate and refresh their scope permissions. Inheritance patterns follow the standard ServiceNow group hierarchy, meaning that delegated developers inherit scope access from all their assigned Delegated Developer groups, creating a union of permissions rather than an intersection.
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
The Execution Order
- User attempts to access Studio or App Engine Studio through navigation or direct URL
- Platform queries
sys_user_group_memberto identify user's group memberships - System filters groups to identify those with type
Delegated Developer - Platform retrieves associated application scopes from each Delegated Developer group
- System creates union of all permitted scopes and caches result for session duration
- Development environment loads with filtered application list showing only permitted scopes
- Runtime enforcement validates every development action against cached scope permissions
- Access control denials trigger logging and user notification for scope violations
// Server-side script to validate delegated developer scope access
var userSysId = gs.getUserID();
var grpMember = new GlideRecord('sys_user_group_member');
grpMember.addQuery('user', userSysId);
grpMember.addQuery('group.type', 'delegated_developer');
grpMember.query();
var allowedScopes = [];
while (grpMember.next()) {
var grpScopes = new GlideRecord('sys_user_group');
if (grpScopes.get(grpMember.group)) {
var scopeList = grpScopes.u_application_scopes.toString();
if (scopeList) {
allowedScopes = allowedScopes.concat(scopeList.split(','));
}
}
}
// Check if requested scope is permitted
function canAccessScope(requestedScope) {
return allowedScopes.indexOf(requestedScope) !== -1;
}Real-World Scenarios
Multi-Vendor Integration Development
Your organization has contracted three different system integrators to build separate ServiceNow applications: vendor A builds HR case management, vendor B develops facilities management, and vendor C creates a custom CMDB extension. Each vendor needs full development access to their application while being completely restricted from the others' work.
Create three Delegated Developer groups: Vendor_A_HR_Developers, Vendor_B_Facilities_Developers, and Vendor_C_CMDB_Developers. In each group record, set the Type to Delegated Developer and populate the Application Scopes field with the respective application scope IDs: x_vendor_hr_cases, x_vendor_facilities, and x_vendor_cmdb_ext. Add vendor developers to their respective groups and assign each the app_service_admin role for development permissions within their scope boundaries.
Never assign the admin role to delegated developers as it can override scope restrictions. Use app_service_admin or create custom roles with scope-limited permissions.
Business Unit Self-Service Development
The Finance department wants to build and maintain their own approval workflows and reporting dashboards without depending on the central IT team. They need development access to their Finance application but must be prevented from accessing HR, Legal, or other departmental applications.
Create a Finance_Application_Developers group with type Delegated Developer and restrict it to the x_finance_dept application scope. Add Finance power users to this group and assign them the delegated_developer role. Enable the Can use App Engine Studio checkbox on the group record to allow low-code development. Set up a scheduled job to automatically sync group membership with Finance department users based on their department field in their user records.
Configure email notifications on the group record to alert Finance IT liaisons when new members are added or development activities occur in their application scope.
Partner Portal Development with Global Table Access
An external partner is developing a customer portal that requires access to both their scoped application and specific global tables like sys_user and incident for integration purposes. They must be restricted from accessing other scoped applications or modifying core platform configurations.
Create a Partner_Portal_Developers group with the x_partner_portal scope assigned. Enable the Can access global application tables checkbox on the group record. Create specific Access Control Rules for the partner developers that grant read access to sys_user and incident tables when accessed from within their application scope. Set up automated update set tracking specifically for this group to monitor all changes they make to global table configurations.
Global table access for delegated developers requires careful ACL configuration. Create explicit deny rules for tables they should never access, as the global access checkbox can be overly permissive.
The Classic Mistake
Granting the delegated_developer role directly to users instead of creating proper Delegated Developer groups with application-specific scope restrictions.
The wrong approach involves navigating to User Administration > Users, opening a developer's user record, and adding the delegated_developer role directly to their Roles list. This seems logical since the role exists and grants development capabilities, but it completely bypasses the application scoping mechanism that makes delegated development safe. When configured this way, the Application field on their Delegated Developer group record (if one even gets created) remains empty, meaning no scope restrictions are enforced.
This fails because ServiceNow's scoping engine only recognizes delegated development permissions when they flow through a properly configured Delegated Developer group with an Application value set. The user appears to have development access in Studio, but when they try to create or modify records, they encounter cryptic "Access Denied" errors or find their changes mysteriously reverted. ServiceNow internally checks the group membership and application scope during write operations, not just the role presence. The mistake is non-obvious because the Studio interface doesn't clearly indicate scope violations until you attempt actual development work.
// 1. Navigate to System Security > Groups
// 2. Create new group: "HR App Developers"
// 3. Set Type: "Delegated Developer"
// 4. Set Application: "Human Resources: Scoped App" (specific app scope)
// 5. Add users to Members list
// 6. The delegated_developer role gets inherited automatically
// Group record values:
// Name: "HR App Developers"
// Type: "delegated_developer"
// Application: "x_company_hr_app" (actual scope sys_id)
// Members: [user records]
// Roles: [empty - inherited from type]
// Result: Users can only develop within x_company_hr_app scope
// ServiceNow enforces this at the database write levelNever assign the delegated_developer role directly to users - always create application-specific Delegated Developer groups and let the role inheritance handle permissions automatically.
When to Use This vs Alternatives
Delegated Development is the correct choice when you have competent developers who need to build and maintain custom applications within strict boundaries, without the security risks of full admin access. This model works best for mature development teams working on scoped applications where you need rapid iteration cycles but must maintain platform stability and security.
Choose Delegated Development When
Use this when developers need to create Business Rules, Script Includes, UI Pages, and other scripted components within a specific application scope, and traditional application development roles like x_app.developer don't provide sufficient table access or Studio capabilities. It's ideal for custom applications that require frequent updates and complex business logic that can't be achieved through declarative configuration alone. Request fulfillment workflows, custom ITSM extensions, and integration applications are perfect candidates since they need scripting freedom within defined boundaries.
Use Flow Designer Instead When
Skip Delegated Development for simple automation requirements that can be handled through Flow Designer's declarative interface and pre-built actions. If your developers are building basic approval workflows, data transformations, or notification logic without complex scripting needs, standard flow_designer and action_designer roles provide safer, more maintainable solutions. This approach also works better when your development team lacks strong ServiceNow scripting expertise, since Flow Designer provides guardrails and validation that prevent common coding mistakes.
Combine with Application Admin When
Layer Delegated Development with scoped admin roles when senior developers need to manage application-specific configurations like Import Sets, Scheduled Jobs, or custom table schema changes that require elevated permissions within their scope. This combination provides the scripting capabilities of delegated development plus the administrative functions needed for complete application lifecycle management. You'll also need this hybrid approach for applications that integrate with external systems requiring credential management or web service endpoint configuration.
Platform Interactions & Side Effects
- Update Sets automatically scope to the delegated developer's application when they make changes, with the
sys_update_set.applicationfield populated from their group's Application reference - ACLs for tables within the application scope bypass normal role checks and defer to the
delegated_developerrole's elevated permissions, but only for tables prefixed with the application scope - Business Rules created by delegated developers execute with
gs.getUserID()returning the developer's user sys_id, not a system account, affecting audit trails and user context in scripts - Studio session state maintains the application scope context across browser sessions, stored in the
user_preferencetable with namestudio.application - Transform Maps and Import Sets created within the application scope inherit the scope's security context, limiting their access to application-specific tables and fields
- Notifications and Email Scripts execute with reduced permissions outside the application scope, causing failures when referencing global tables or system properties not accessible to the scoped application
- The
sys_user_has_roletable automatically creates role inheritance records linking users to thedelegated_developerrole through their group membership withgranted_bypointing to the Delegated Developer group - Script Includes within the application scope can access global Script Includes for reading but cannot modify or extend them, leading to unexpected "function not defined" errors in mixed-scope scenarios
- Performance degrades when delegated developers query large global tables like
sys_auditorsyslogbecause additional scope validation filters get applied at runtime - REST API endpoints created by delegated developers inherit the application scope's API access restrictions and cannot expose global table data without explicit cross-scope privileges
Debugging and Troubleshooting
Common failure symptoms include developers seeing "Access Denied" errors when trying to create Business Rules or Script Includes, changes appearing to save but then disappearing from Studio, or scripts failing with "Table 'tablename' doesn't exist" errors when accessing global tables. Users typically report that Studio loads correctly and shows their application, but any development work either fails silently or throws cryptic permission errors. From the admin perspective, you'll see incomplete update set captures, missing sys_update_xml records for changes that should have been tracked, or developers complaining that their applications "randomly stop working."
Start debugging by checking System Logs > System Log > All for "Security constraint" entries and "ACL" violation messages that indicate scope boundary issues. The sys_user_session table shows the active application scope for each user session, while sys_user_has_role confirms whether the delegated_developer role is properly inherited through group membership. Enable the Security Debug business parameter (glide.security.debug) to get detailed ACL evaluation logs, but remember to disable it after troubleshooting since it impacts performance.
Look for specific error messages like "Operation against file outside application scope" in Script Debugger output, "User does not have role delegated_developer" in system logs, or "Access control violation" entries with table names that don't match the user's application scope. Studio errors often display as "Unable to create record" or "Invalid table operation" without clear indication that it's a scoping issue. In the browser's developer console, watch for 403 HTTP responses to Studio API endpoints, which indicate the backend is rejecting scope-violating operations even when the UI suggests they should work.
Diagnostic Checklist:
- Verify the user is a member of a Delegated Developer group with the correct
Applicationfield value matching their intended scope - Check
sys_user_has_roletable to confirmdelegated_developerrole inheritance is active andgranted_bypoints to the correct group - Examine
user_preferencetable forstudio.applicationentries to ensure Studio is operating in the correct scope context - Review recent
sys_update_xmlrecords to verify changes are being captured with the correctapplicationfield values - Test role inheritance by impersonating the user and checking if
gs.hasRole('delegated_developer')returns true in a background script - Enable
glide.security.debug=truetemporarily to capture detailed ACL evaluation logs for scope boundary violations - Validate the target application scope exists in
sys_apptable and hasactive=trueand properscopefield values
Quick Reference
- The
delegated_developerrole grants write access to all tables beginning with the application scope prefix but read-only access to most global tables - Studio automatically switches scope context based on the user's Delegated Developer group membership - users with multiple groups see a scope selector dropdown
- Delegated developers cannot access
sys_script_includerecords withapplication=globaleven for read operations without explicit ACL modifications - Application Portfolio Management automatically tracks delegated development activity in the
sn_apm_*tables when APM plugin is activated - Cross-scope privileges can be granted through
sys_app_applicationrecords but require admin intervention and break application portability - Maximum of 100 Delegated Developer groups can exist per instance, with each group supporting unlimited members but only one application scope
- Update Set previews fail when delegated developers attempt to commit changes to tables outside their application scope, even if the preview loads successfully
- The
sys_scopetable'srestrict_table_accessfield controls whether delegated developers can query global tables - defaults to true for new scoped applications - Flow Designer flows created by delegated developers inherit application scope but can access global flow actions and subflows through the platform's built-in cross-scope privileges
- Delegated Development permissions persist in user sessions for up to 24 hours after group membership removal unless
glide.security.cache.enabled=falseor user explicitly logs out