ConfigService Experiments: Support Explicit UserId Targeting (User Lists)

ConfigService experiments currently only support split-based targeting (e.g., percentage rollouts or attribute-driven cohorts). This makes it impossible to explicitly include or exclude specific users by UserId, which is a common requirement for testing, QA, moderation, and staged rollouts.

Problem

Experiments today are well-suited for broad rollouts, but they fall short for controlled or operational testing:

  • Cannot target specific UserIds (e.g., developers, QA, trusted testers)
  • Cannot explicitly exclude known problem users
  • Cannot safely validate features with a fixed cohort before widening rollout
  • Forces developers to implement custom gating logic outside ConfigService

As a result, ConfigService experiments are often bypassed in favour of ad-hoc scripts or DataStore-backed allowlists, defeating the purpose of a centralized experiment system.

Current Behaviour

  • Experiments rely on:

    • Percentage-based splits
    • Attribute-based rules
  • No support for:

    • Explicit UserId allowlists
    • Explicit UserId blocklists
    • Deterministic membership for named users

Proposed Solution

Add UserId-based targeting to ConfigService experiments.

Example Capabilities

  • Allowlist specific UserIds
  • Blocklist specific UserIds
  • UserId rules evaluated before percentage splits

Example API / Behaviour

local snapshot = ConfigService:GetConfigForPlayerAsync(player)

if snapshot:GetValue("NewInventoryUI") then
    -- experiment enabled for this user
end

Configured in the Experiments UI as:

  • “Include UserIds: [12345, 67890]”
  • “Exclude UserIds: [54321]”
  • Fallback to percentage split if no match

Benefits

  • Enables safe internal testing without shipping code changes
  • Allows deterministic QA and developer access
  • Reduces custom gating logic in production code
  • Aligns experiments with real operational workflows

Non-Goals

  • This is not a request for general user list storage
  • This is not a replacement for DataStores or moderation systems
  • Scope is limited to experiment targeting logic

Explicit UserId targeting would make ConfigService experiments substantially more useful for real-world development and live operations, without undermining existing split-based rollout mechanisms.

7 Likes

That’s just bloat for an engine that adds no value; don’t make Roblox become a Unity. :face_vomiting:
Attributes exist.
PlayerGui exists.
The rest is for you to implement.

ConfigService experiments already exist as a platform-level feature for controlled rollout and evaluation. The request is narrowly scoped to improving targeting within that existing system, not introducing new abstractions for gameplay state or permissions.

Attributes and PlayerGui are runtime mechanisms. They still require:

  • custom gating logic,
  • code changes for cohort management,
  • redeploys for simple tester inclusion/exclusion,
  • parallel systems that sit outside the experiment framework.

Explicit UserId targeting adds value precisely.

This is not about turning Roblox into Unity or adding engine bloat; it is about closing a gap in an already-shipped service so developers don’t have to re-implement the same allowlist logic repeatedly, inconsistently, and outside the tooling Roblox is actively encouraging us to use.

If the platform goal is to centralise experiments and feature rollout, then UserId targeting is a pragmatic extension, not excess complexity.

That called feature flags & you are reinventing them
This can be replicated by copying local script to PlayerGui from server.
Same effect but no bloat.

ConfigService is Roblox’s feature-flag method. This request does not reinvent feature flags; it addresses a limitation in how they can currently be targeted.

Copying LocalScripts into PlayerGui from the server does replicate the effect, but it bypasses the experiment system entirely and introduces several trade-offs:

  • Targeting logic becomes distributed and bespoke, rather than centrally defined.

  • Cohort membership is no longer observable or auditable in the ConfigService tooling.

  • QA and staff access require code changes or server-side branching, not config updates.

  • Rollouts and analytics are decoupled from the mechanism that actually gates the feature.

From an engine perspective, this is not new functionality—it is consolidation. Developers are already implementing UserId allowlists for experiments; they are just doing so repeatedly, inconsistently, and outside the platform’s intended workflow.

The proposal keeps:

  • feature evaluation in ConfigService,

  • rollout logic in ConfigService,

  • code paths simple and declarative.

The alternative works, but it shifts responsibility onto every developer to re-implement targeting that the platform already partially owns. Adding explicit UserId targeting reduces that duplication without changing how features are consumed at runtime.

This will be my last response to save circling.

Just say that you have nothing else left to say and you did, in fact, reinvent the wheel.
Asking ChatGPT is not even funny anymore.

I use double dashes in my day-to-day work, but yes did reword. Thanks for your insight.