---
title: "Understand the Analytical Lifecycle"
description: "The end-to-end flow that moves your work from raw data through built objects into production and back as monitoring data."
---

Corridor follows a single end-to-end flow that moves your work from raw data through built objects, into production, and back again as monitoring data.

The flowchart below walks through the full analytical lifecycle, from onboarding raw data, to building valuable features, models and policies in Pre-Production and to monitoring outcomes once they are live in production.

<style>
.sl-markdown-content .page { max-width: 1880px; margin: 0 auto;}.sl-markdown-content .node rect.node-bg { stroke-width: 1; stroke-opacity: 0.55; }.sl-markdown-content .node .num { font-family: var(--font-mono); font-size: 10px; font-weight: 600; letter-spacing: 0.04em; fill-opacity: 0.85; }.sl-markdown-content .node .title { font-family: var(--font-title); font-weight: 600; font-size: 13.5px; fill: var(--fg-strong); }.sl-markdown-content .node .sub { font-family: var(--font-ui); font-size: 11px; fill: var(--fg-muted); }.sl-markdown-content .node .eg { font-family: var(--font-mono); font-size: 10px; fill: var(--fg-subtle); letter-spacing: 0.01em; }.sl-markdown-content .node .module { font-family: var(--font-ui); font-size: 9.5px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; fill-opacity: 0.75; }.sl-markdown-content .group-rect { fill: none; stroke-width: 1.25; stroke-dasharray: 6 5; rx: 14; ry: 14; }.sl-markdown-content .group-tint { rx: 14; ry: 14; }.sl-markdown-content .group-label { font-family: var(--font-ui); font-size: 13px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }.sl-markdown-content .group-label-bg { fill: var(--surface-0); }.sl-markdown-content .arrow { fill: none; stroke: var(--gray-700); stroke-width: 1.5; }.sl-markdown-content .arrow.dashed { stroke-dasharray: 4 4; stroke: var(--gray-500); }.sl-markdown-content .arrow-label { font-family: var(--font-ui); font-size: 11px; fill: var(--fg-muted); font-weight: 500; }

</style>

<div class="page">
  <header class="doc-head">
  </header>
  <div class="flow-wrap">
      <!--
        LAYOUT GRID  (with breathing space)
        ====================================
        Pre-prod zone:   x=280..1680, y=109..480  (h=371; +51 vs prior)
        Post-prod zone:  x=280..1680, y=565..745  (h=180; shifted down by 55)
        Gap (refine):    y=480..565 (80px; was 50px)
        Main flow lines: y=300 (pre-prod), y=655 (post-prod)
        Iterate sub-frame: x=850..1380, y=140..460 (w=530, h=320)
          15px padding around 03/04/05 (was 10px)
        Iterate label bg: y=129..151, fully INSIDE pre-prod (was straddling its top edge)
        Pre-prod label bg: w=290 (was 230), text has ~25px clearance on each side
        Post-prod label bg: w=290 (was 240), same
        Production box: x=1720, y=435, w=220, h=180, bridges new gap (center y=525)
        07/08 boxes: y=590 (was 535); center y=655 (was 600)
      -->
      <svg viewBox="0 0 2050 760" role="img" aria-label="General Corridor flow">
        <defs>
          <marker id="g-arrow-default" viewBox="0 0 10 10" refX="9" refY="5"
                  markerWidth="7" markerHeight="7" orient="auto-start-reverse">
            <path d="M0,0 L10,5 L0,10 z" fill="var(--gray-700)"></path>
          </marker>
        </defs>
        <!-- Pre-Production zone -->
        <rect class="group-tint" x="280" y="109" width="1400" height="371" fill="var(--prelude-50)" />
        <rect class="group-rect" x="280" y="109" width="1400" height="371" stroke="var(--prelude-500)" stroke-opacity="0.5" />
        <rect class="group-label-bg" x="300" y="96" width="290" height="26" rx="5"
              stroke="var(--prelude-500)" stroke-width="1.25" />
        <text class="group-label" x="445" y="114" text-anchor="middle" fill="#7A6128">CORRIDOR · PRE-PRODUCTION</text>
        <!-- Post-Production zone -->
        <rect class="group-tint" x="280" y="565" width="1400" height="180" fill="var(--cello-50)" />
        <rect class="group-rect" x="280" y="565" width="1400" height="180" stroke="var(--cello-400)" stroke-opacity="0.5" />
        <rect class="group-label-bg" x="300" y="552" width="290" height="26" rx="5"
              stroke="var(--cello-500)" stroke-width="1.25" />
        <text class="group-label" x="445" y="570" text-anchor="middle" fill="var(--cello-700)">CORRIDOR · POST-PRODUCTION</text>
        <!-- LEFT EXTERNAL -->
        <g class="node">
          <rect class="node-bg" x="40" y="225" width="220" height="150"
                rx="10" fill="var(--cello-50)" stroke="var(--cello-300)" />
          <text class="num"   x="55" y="247" fill="var(--cello-700)">YOUR STARTING POINT · OUTSIDE</text>
          <text class="title" x="55" y="275">Your Data Source</text>
          <text class="sub"   x="55" y="293">Lives in your stack today</text>
          <text class="eg"    x="55" y="320">core banking · bureau · LOS</text>
          <text class="eg"    x="55" y="335">data lake · TransUnion</text>
          <text class="eg"    x="55" y="350">production scoring systems</text>
        </g>
        <!-- STEP 01 -->
        <g class="node">
          <rect class="node-bg" x="330" y="235" width="220" height="130"
                rx="10" fill="var(--purple-50)" stroke="var(--purple-500)" />
          <text class="num"    x="345" y="257" fill="var(--purple-700)">01</text>
          <text class="module" x="535" y="257" text-anchor="end" fill="var(--purple-700)">Data Vault</text>
          <line x1="345" y1="265" x2="535" y2="265" stroke="var(--purple-500)" stroke-opacity="0.25" stroke-width="0.75"/>
          <text class="title"  x="345" y="285">Register Data</text>
          <text class="sub"    x="345" y="303">Onboard &amp; catalog</text>
          <text class="eg"     x="345" y="328">data tables · data columns</text>
          <text class="eg"     x="345" y="345">metadata · lineage</text>
        </g>
        <!-- STEP 02 -->
        <g class="node">
          <rect class="node-bg" x="600" y="235" width="220" height="130"
                rx="10" fill="var(--green-50)" stroke="var(--green-500)" />
          <text class="num"    x="615" y="257" fill="var(--green-700)">02</text>
          <text class="module" x="805" y="257" text-anchor="end" fill="var(--green-700)">Feature Eng.</text>
          <line x1="615" y1="265" x2="805" y2="265" stroke="var(--green-500)" stroke-opacity="0.3" stroke-width="0.75"/>
          <text class="title"  x="615" y="285">Build Features</text>
          <text class="sub"    x="615" y="303">Transform data into variables</text>
          <text class="eg"     x="615" y="328">DPDs · Ratios · Flags · WOE bins</text>
          <text class="eg"     x="615" y="345">reusable shared feature library</text>
        </g>
        <!-- STEP 03 (branch up) -->
        <g class="node">
          <rect class="node-bg" x="870" y="155" width="220" height="130"
                rx="10" fill="var(--yellow-50)" stroke="var(--yellow-500)" />
          <text class="num"    x="885" y="177" fill="var(--yellow-700)">03</text>
          <text class="module" x="1075" y="177" text-anchor="end" fill="var(--yellow-700)">Model Studio</text>
          <line x1="885" y1="185" x2="1075" y2="185" stroke="var(--yellow-500)" stroke-opacity="0.35" stroke-width="0.75"/>
          <text class="title"  x="885" y="205">Develop Models</text>
          <text class="sub"    x="885" y="223">Train · validate · champion vs challenger</text>
          <text class="eg"     x="885" y="250">xgboost · sklearn · regression</text>
          <text class="eg"     x="885" y="265">retrain · jupyter</text>
        </g>
        <!-- STEP 04 (branch down) -->
        <g class="node">
          <rect class="node-bg" x="870" y="315" width="220" height="130"
                rx="10" fill="var(--pink-50)" stroke="var(--pink-500)" />
          <text class="num"    x="885" y="337" fill="var(--pink-600)">04</text>
          <text class="module" x="1075" y="337" text-anchor="end" fill="var(--pink-600)">Underwriting</text>
          <line x1="885" y1="345" x2="1075" y2="345" stroke="var(--pink-500)" stroke-opacity="0.3" stroke-width="0.75"/>
          <text class="title"  x="885" y="365">Compose Strategy &amp; Rules</text>
          <text class="sub"    x="885" y="383">Decision using data · features &amp; models</text>
          <text class="eg"     x="885" y="405">rules · approve · decline · cutoffs</text>
          <text class="eg"     x="885" y="420">what-if scenario</text>
          <text class="eg"     x="885" y="435">pricing · offer filtering</text>
        </g>
        <!-- STEP 05 -->
        <g class="node">
          <rect class="node-bg" x="1140" y="235" width="220" height="130"
                rx="10" fill="var(--gray-50, #FAFAFA)" stroke="var(--gray-500)" />
          <text class="num"    x="1155" y="257" fill="var(--gray-700)">05</text>
          <line x1="1155" y1="265" x2="1345" y2="265" stroke="var(--gray-500)" stroke-opacity="0.4" stroke-width="0.75"/>
          <text class="title"  x="1155" y="285">Simulate &amp; Review</text>
          <text class="sub"    x="1155" y="303">Validate on historical data</text>
          <text class="eg"     x="1155" y="325">Model: AUC · KS · Decile lift</text>
          <text class="eg"     x="1155" y="340">Policy: Approval rate · bad rate</text>
          <text class="eg"     x="1155" y="355">waterfall</text>
        </g>
        <!-- STEP 06 -->
        <g class="node">
          <rect class="node-bg" x="1410" y="235" width="220" height="130"
                rx="10" fill="var(--gray-50, #FAFAFA)" stroke="var(--gray-500)" />
          <text class="num"    x="1425" y="257" fill="var(--gray-700)">06</text>
          <line x1="1425" y1="265" x2="1615" y2="265" stroke="var(--gray-500)" stroke-opacity="0.4" stroke-width="0.75"/>
          <text class="title"  x="1425" y="285">Approve &amp; Export</text>
          <text class="sub"    x="1425" y="303">Sign-off · lock version · hand off</text>
          <text class="eg"     x="1425" y="328">Scorecards · JSON · fair lending</text>
          <text class="eg"     x="1425" y="345">change/audit log</text>
        </g>
        <!-- ITERATE sub-frame: encloses 03, 04, 05 with 15px padding on all sides -->
        <rect x="850" y="140" width="530" height="320" rx="14"
              fill="none" stroke="var(--gray-500)" stroke-width="1.25"
              stroke-dasharray="6 4" opacity="0.55" />
        <rect class="group-label-bg" x="1030" y="129" width="170" height="22" rx="4" />
        <text x="1115" y="145" text-anchor="middle"
              style="font-family: var(--font-ui); font-size: 11px; font-weight: 700; letter-spacing: 0.10em; text-transform: uppercase;"
              fill="var(--gray-700)">iterate ↻</text>
        <!-- RIGHT EXTERNAL (Production), bridges the gap between zones -->
        <g class="node">
          <rect class="node-bg" x="1720" y="435" width="220" height="180"
                rx="10" fill="var(--cello-50)" stroke="var(--cello-400)" />
          <text class="num"   x="1735" y="457" fill="var(--cello-700)">RUNS IN PRODUCTION</text>
          <text class="title" x="1735" y="485">Your Production Env</text>
          <text class="sub"   x="1735" y="503">Outside Corridor</text>
          <text class="eg"    x="1735" y="528">LOS · Scoring engine · APIs</text>
          <text class="eg"    x="1735" y="543">Real-time + batch decisions</text>
          <text class="eg"    x="1735" y="570" fill="var(--cello-600)">e.g. MeridianLink · Fiserv</text>
          <text class="eg"    x="1735" y="585" fill="var(--cello-600)">Origence · Acxiom</text>
        </g>
        <!-- STEP 07 -->
        <g class="node">
          <rect class="node-bg" x="1410" y="590" width="220" height="130"
                rx="10" fill="var(--purple-50)" stroke="var(--purple-400)" />
          <text class="num"    x="1425" y="612" fill="var(--purple-700)">07</text>
          <text class="module" x="1615" y="612" text-anchor="end" fill="var(--purple-700)">Data Vault</text>
          <line x1="1425" y1="620" x2="1615" y2="620" stroke="var(--purple-400)" stroke-opacity="0.4" stroke-width="0.75"/>
          <text class="title"  x="1425" y="640">Bring Data Back In</text>
          <text class="sub"    x="1425" y="658">Close the feedback loop</text>
          <text class="eg"     x="1425" y="683">Decisions · Scores · Outcomes</text>
          <text class="eg"     x="1425" y="700">Dependent Variables</text>
        </g>
        <!-- STEP 08 -->
        <g class="node">
          <rect class="node-bg" x="870" y="590" width="220" height="130"
                rx="10" fill="var(--gray-50, #FAFAFA)" stroke="var(--gray-500)" />
          <text class="num"    x="885" y="612" fill="var(--gray-700)">08</text>
          <line x1="885" y1="620" x2="1075" y2="620" stroke="var(--gray-500)" stroke-opacity="0.4" stroke-width="0.75"/>
          <text class="title"  x="885" y="640">Monitor Performance</text>
          <text class="sub"    x="885" y="658">Track model &amp; policy health</text>
          <text class="eg"     x="885" y="683">Model: PSI · CSI · KS · Drift</text>
          <text class="eg"     x="885" y="700">Policy: Approvals · DPD · bad rate</text>
        </g>
        <!-- ARROWS -->
        <!-- ext-left → 01 -->
        <path class="arrow" d="M260,300 L330,300" marker-end="url(#g-arrow-default)" />
        <!-- 01 → 02 -->
        <path class="arrow" d="M550,300 L600,300" marker-end="url(#g-arrow-default)" />
        <!-- 02 → 03 (branch up) -->
        <path class="arrow" d="M820,300 C840,300 850,220 870,220" marker-end="url(#g-arrow-default)" />
        <!-- 02 → 04 (branch down) -->
        <path class="arrow" d="M820,300 C840,300 850,380 870,380" marker-end="url(#g-arrow-default)" />
        <!-- 03 → 05 (merge from up) -->
        <path class="arrow" d="M1090,220 C1110,220 1120,300 1140,300" marker-end="url(#g-arrow-default)" />
        <!-- 04 → 05 (merge from down) -->
        <path class="arrow" d="M1090,380 C1110,380 1120,300 1140,300" marker-end="url(#g-arrow-default)" />
        <!-- 05 → 06 -->
        <path class="arrow" d="M1360,300 L1410,300" marker-end="url(#g-arrow-default)" />
        <!-- iterate dashed: 03 → 04 -->
        <path d="M980,285 L980,315" stroke="var(--gray-500)" stroke-width="1.25"
              stroke-dasharray="6 4" fill="none" marker-end="url(#g-arrow-default)" />
        <!-- 06 → Production (deploy) -->
        <path class="arrow" d="M1630,300 L1830,300 L1830,435" marker-end="url(#g-arrow-default)" />
        <text class="arrow-label" x="1840" y="370">deploy</text>
        <!-- Production → 07 -->
        <path class="arrow" d="M1830,615 L1830,655 L1630,655" marker-end="url(#g-arrow-default)" />
        <!-- 07 → 08 -->
        <path class="arrow" d="M1410,655 L1090,655" marker-end="url(#g-arrow-default)" />
        <!-- 08 → refine (up to pre-prod) -->
        <path class="arrow" d="M980,590 L980,480" marker-end="url(#g-arrow-default)" />
        <rect x="855" y="506" width="250" height="28" rx="6"
              fill="var(--surface-0)" stroke="var(--gray-700)" stroke-width="1.25" />
        <text class="arrow-label" x="980" y="524" text-anchor="middle"
              style="font-weight: 600; fill: var(--fg-strong); font-size: 11.5px;">
          refine · re-train model or policy
        </text>
      </svg>
  </div>
</div>


## What happens at each step

<style>
.sl-markdown-content .lifecycle-steps { width: 100%; border-collapse: separate; border-spacing: 0; margin: 1rem 0 1.5rem; font-family: var(--font-ui, ui-sans-serif, system-ui, sans-serif); }.sl-markdown-content .lifecycle-steps thead th { background: #f9fafb; color: #374151; font-weight: 600; font-size: 12.5px; letter-spacing: 0.05em; text-transform: uppercase; text-align: left; padding: 12px 16px; border-bottom: 1px solid #e5e7eb; }.sl-markdown-content .lifecycle-steps tbody td { padding: 14px 16px; border-bottom: 1px solid #f3f4f6; font-size: 14px; color: #1f2937; vertical-align: top; line-height: 1.55; }.sl-markdown-content .lifecycle-steps tbody tr:hover td { background: #fafbfd; }.sl-markdown-content .lifecycle-steps tr.section-header td { background: linear-gradient(90deg, #ede4d3 0%, #f8f4ee 100%); color: #5a4517; font-weight: 800; font-size: 13px; letter-spacing: 0.14em; text-transform: uppercase; padding: 14px 16px; border-top: 2px solid #b89b6b; border-bottom: 2px solid #b89b6b; }.sl-markdown-content .lifecycle-steps tr.section-header.post td { background: linear-gradient(90deg, #dce5f4 0%, #eef2fa 100%); color: #1f2c47; border-top-color: #667fb3; border-bottom-color: #667fb3; }.sl-markdown-content .step-num { display: inline-block; font-family: var(--font-mono, ui-monospace, monospace); font-size: 11px; font-weight: 700; color: #6b7280; background: #f3f4f6; border-radius: 6px; padding: 2px 8px; margin-right: 8px; letter-spacing: 0.04em; }.sl-markdown-content .step-title { font-weight: 600; color: #111827; }.sl-markdown-content .module-tag { display: inline-block; font-size: 11px; font-weight: 600; padding: 3px 10px; border-radius: 999px; letter-spacing: 0.02em; white-space: nowrap; }.sl-markdown-content .module-tag.data-vault { background: #FAF8FE; color: #6b21a8; }.sl-markdown-content .module-tag.feature-eng { background: #F4FBF7; color: #065f46; }.sl-markdown-content .module-tag.model-studio { background: #FCFAF0; color: #92400e; }.sl-markdown-content .module-tag.policies { background: #FDF7F8; color: #9f1239; }.sl-markdown-content .module-tag.all { background: #F5F6F7; color: #374151; }

</style>

<table class="lifecycle-steps">
  <thead>
    <tr>
      <th style="width: 28%;">Step</th>
      <th style="width: 20%;">Module</th>
      <th>What you do</th>
    </tr>
  </thead>
  <tbody>
    <tr class="section-header"><td colspan="3">Pre-Production</td></tr>
    <tr>
      <td><span class="step-num">01</span><span class="step-title">Register Data</span></td>
      <td><span class="module-tag data-vault">Data Vault</span></td>
      <td>Onboard source data tables and expose columns or aggregations as governed Data Elements with metadata and lineage.</td>
    </tr>
    <tr>
      <td><span class="step-num">02</span><span class="step-title">Build Features</span></td>
      <td><span class="module-tag feature-eng">Feature Engineering</span></td>
      <td>Turn raw data into reusable shared variables (DPDs, ratios, flags, WOE bins) that any model or policy can pull from.</td>
    </tr>
    <tr>
      <td><span class="step-num">03</span><span class="step-title">Develop Models</span></td>
      <td><span class="module-tag model-studio">Model Studio</span></td>
      <td>Train models natively (xgboost, sklearn, regression, Jupyter) or import existing artifacts. Validate, retrain, and run champion vs challenger comparisons.</td>
    </tr>
    <tr>
      <td><span class="step-num">04</span><span class="step-title">Compose Strategy &amp; Rules</span></td>
      <td><span class="module-tag policies">Underwriting</span></td>
      <td>Build a decision workflow on top of registered data, features, and models: approve/decline rules, cutoffs, pricing, offer filtering, and what-if scenarios.</td>
    </tr>
    <tr>
      <td><span class="step-num">05</span><span class="step-title">Simulate &amp; Review</span></td>
      <td><span class="module-tag all">All modules</span></td>
      <td>Run any object on historical data. Models surface AUC, KS, decile lift; policies surface approval rate, bad rate, and waterfall reports.</td>
    </tr>
    <tr>
      <td><span class="step-num">06</span><span class="step-title">Approve &amp; Export</span></td>
      <td><span class="module-tag all">All modules</span></td>
      <td>Send the locked artifact through a formal approval workflow with full change/audit log and fair-lending review, then export (scorecard, JSON) for deployment.</td>
    </tr>
    <tr class="section-header post"><td colspan="3">Post-Production</td></tr>
    <tr>
      <td><span class="step-num">07</span><span class="step-title">Bring Data Back In</span></td>
      <td><span class="module-tag data-vault">Data Vault</span></td>
      <td>Pull decisions, scores, outcomes, and dependent variables from your production stack back into Corridor to close the feedback loop.</td>
    </tr>
    <tr>
      <td><span class="step-num">08</span><span class="step-title">Monitor Performance</span></td>
      <td><span class="module-tag all">All modules</span></td>
      <td>Track model health (PSI, CSI, KS, drift) and policy outcomes (approvals, DPD, bad rate). When something drifts, refine or retrain and the loop starts again.</td>
    </tr>
  </tbody>
</table>

---

Next: [Start with a Model →](/getting-started/start-with-model/)
