Skip to content

ADR 021 — Gold Exploration Layer (exp_)

Date: 2026-04-28 Status: Accepted Deciders: Data Engineering


Context

The WBP Gold layer contains two categories of views:

  1. Stable production reports — backed by Tableau dashboards, subject to SLA, column contracts are public (e.g., rpt_wbp_email_daily, rpt_wbp_agent_performance_channel_daily)
  2. Pilot / exploratory analysis — views built to support AI pilot tracking, ad-hoc investigation, or evolving logic; not yet adopted by a permanent Tableau dashboard and may change or be dropped without notice

The second category had been named with the rpt_ prefix, which implied the same stability contract as stable production reports. This caused confusion: consumers assumed rpt_wbp_ai_agent_qa_week_over_week was governed by the same SLA as rpt_wbp_email_daily, but it was not.


Decision

Introduce a new exp_ prefix for Gold exploration views. These views:

  • Are materialized as view (zero storage — identical to rpt_)
  • Live in the same GOLD schema as rpt_ — no new Snowflake schema required
  • Use tags: ['exp'] instead of ['report'] in their config() block
  • Follow the naming pattern exp_{client}_{purpose} — e.g., exp_wbp_ai_agent_qa_wow
  • Carry no SLA — may be modified, broken, or deleted without a migration or deprecation notice
  • Are suitable for: pilot tracking, ad-hoc team-level analysis, research views, evolving logic

Rules for exp_ Models

Rule Detail
Materialization Always view
Schema GOLD (same as rpt_)
Tags ['warbyparker', 'gold', 'exp'] (replace 'report' with 'exp')
Source Same layering rules as rpt_: from agg_ for metric aggregation, from fct_ only for event-level record analysis
SLA None — exploratory views may change or be dropped at any time
Schema.yml Required entry (same as rpt_) — documents grain and columns
dbt-model-registry Status: 🔬 Exploration

Promotion path

When an exp_ view stabilizes — logic is settled, a Tableau dashboard has adopted it, and the team commits to maintaining it — rename it to rpt_. The rename is a one-liner (git mv) plus a schema.yml name update.

Deprecation

Drop without ceremony: no deprecation notice required. If a Snowflake view was created by a prior rpt_ name, the old view persists in Snowflake after the dbt rename (dbt does not clean up renamed views). Old RPT_WBP_* views must be dropped manually via Snowflake after the new EXP_WBP_* views are verified.


First Application

16 WBP views renamed from rpt_exp_ on 2026-04-28 as part of issue #944:

Old name New name
rpt_wbp_agent_qa_trend exp_wbp_agent_qa_trend
rpt_wbp_ai_agent_concurrency_daily exp_wbp_ai_agent_concurrency_daily
rpt_wbp_ai_agent_qa_week_over_week exp_wbp_ai_agent_qa_week_over_week
rpt_wbp_ai_agent_qa_month_over_month exp_wbp_ai_agent_qa_month_over_month
rpt_wbp_ai_agents_durations_daily exp_wbp_ai_agents_durations_daily
rpt_wbp_ai_qa_attributes_week_over_week exp_wbp_ai_qa_attributes_week_over_week
rpt_wbp_ai_qa_attributes_month_over_month exp_wbp_ai_qa_attributes_month_over_month
rpt_wbp_ai_vs_nonai_qa_wow exp_wbp_ai_vs_nonai_qa_wow
rpt_wbp_ai_vs_nonai_qa_mom exp_wbp_ai_vs_nonai_qa_mom
rpt_wbp_ai_vs_nonai_qa_qoq exp_wbp_ai_vs_nonai_qa_qoq
rpt_wbp_ai_wave_qa_week_over_week exp_wbp_ai_wave_qa_week_over_week
rpt_wbp_ai_wave_qa_month_over_month exp_wbp_ai_wave_qa_month_over_month
rpt_wbp_ai_wave_qa_quarter_over_quarter exp_wbp_ai_wave_qa_quarter_over_quarter
rpt_wbp_gladly_blended_ai_productivity exp_wbp_gladly_blended_ai_productivity
rpt_wbp_gladly_blended_ai_productivity_weekly exp_wbp_gladly_blended_ai_productivity_weekly
rpt_wbp_gladly_blended_ai_productivity_channel_daily exp_wbp_gladly_blended_ai_productivity_channel_daily

These were all tied to the WBP blended AI email/SMS pilot — pilot tracking views, QA analysis views, and agent productivity exploration views with no formal Tableau adoption.


Consequences

  • Naming is unambiguous: rpt_ = stable production. exp_ = exploration / no SLA.
  • Zero cost: Both layers use view materialization — no additional Snowflake storage or compute.
  • Easy promotion: A stabilized exp_ view graduates to rpt_ with a file rename.
  • Old Snowflake views persist: RPT_WBP_* views in WBP_DB.GOLD must be dropped manually post-deployment.

Options Considered

Option Decision
Keep all as rpt_ with docs marking some as "pilot" Rejected — naming still implies stability
Use a separate EXP Snowflake schema Rejected — adds schema management overhead; the prefix is sufficient signal
Use adhoc_ prefix Rejected — ad-hoc implies one-time; these views are recurring and actively maintained