Product Guide How It Works Administration Support Guide Owner Guide Engine Core

Product Owner Guide

What every PO needs to know - the things you won't discover just by clicking through the UI

1. Complete Feature Inventory

What Actually Exists in the Product

mindmap
  root((Campaign Manager))
    Campaign Engine
      Campaign CRUD
      Phase/Step hierarchy
      Computation graph (DAG)
      Multi-threaded execution
      Environment variables
      Dependency resolution
      Downstream propagation
      Auto-publishing
    AI Integration
      6 LLM providers
      Text prompts
      Image generation (DALL-E)
      Structured JSON output
      Multi-turn sessions
      Chat interface
      AI Assist (Customer App)
      Scripting access to LLM
      Rate limiting + key pool
    Content & Assets
      Document templates (XSL, FTL, static)
      Asset generation pipeline
      Approval chain (4 stages)
      Microsite deployment
      S3 + CloudFront + SFTP
      HTML-to-PDF conversion
      HTML-to-XSLT conversion
    Collaboration
      Comments with approval
      Audit trail (Envers)
      Version restore
      i18n labels
      Dictionary system
    User Management
      OAuth2 + API keys
      170+ granular permissions
      Permission groups + overrides
      Multi-tenancy (company isolation)
      Login As (impersonation)
    Data Portability
      ZIP export/import
      Git/MCT integration
      Campaign cloning
      Campaign migration
      Cross-company transfer
    Two Applications
      Admin Console (full)
      Customer App (5-step wizard)
      Dynamic form engine
      Field handlers
      Application versioning

Feature Prerequisites Map

Before a feature works, these prerequisites must be met:

FeatureRequiresWhat happens if not configured
AI prompts in computationAt least 1 AI model config + API key for that providerPrompt variables fail with "model not found" error
Chat interfaceAt least 1 AI model with "Use in Chat" = trueChat can't send messages; no model available
AI Assist (Customer App)Chat-enabled model + step with aiAssistParams configuredAI Assist button not shown or fails to create chat
Asset deployment to micrositeCompany microsite created (state = "Created") + asset in public storageDeployment silently fails or errors with "microsite not found"
HTTPS on micrositeCloudFront distribution + SSL certificate provisionedSite accessible only via HTTP
SFTP upload to micrositeMicrositeUser created (IAM role + credentials)No SFTP endpoint available
Customer App campaign creationAt least 1 Published Template (GTM Foundation)Step 1 blocked: "No GTM Foundation available"
Document view on stepDocument template assigned to step + matching classesDocument view not available for that step
Git push/pullGitHub OAuth configured for the userGit operations fail with auth error
Computation downstream resetUser preference "Update Downstream Dependencies" = EnabledEditing a variable doesn't auto-reset dependents (per-user setting!)
Image generation"Imaging Enabled" permission + DALL-E model configuredImage features hidden in UI
Audit trail viewing"Audit Enabled" permissionAudit tab not visible

2. Implicit System Behaviors

Things the system does automatically that you won't see in any UI button or menu:

Automatic Cascades

When you do thisThe system also does this (invisibly)
Publish a campaign as templateResets ALL environment variables and computation items back to initial state. Any computed results in the template are cleared.
"Start Campaign" from a templateDeep-clones the entire structure: phases, steps, CC items, env vars, i18n labels. The new campaign is independent - future template changes don't propagate.
Delete a campaignSoft-deletes the record + cascading delete of all phases, steps, CC items, assets. Also deletes storage folders (public + private) and unpublishes from microsite.
Rename a phaseUpdates all CC item path-based references that used the old phase name.
Rename a stepSame: updates all CC item references that used the old step name.
Delete a dictionary classRemoves that class from all steps and document templates that used it.
System restart during computationAll "in-progress" variables auto-reset to "created". No data lost, but user must re-trigger.
API key hits rate limitKey auto-disabled for 15 seconds, another key from the pool takes over. Re-checked every 60 seconds.
Edit a CC item (with downstream pref enabled)All dependent variables downstream are automatically reset to "created" state.
Computation completes + auto-deploy enabledAssets are automatically copied from campaign storage to microsite S3 bucket.

Critical: Publishing a template is destructive

Publishing resets all computed data. If you publish a campaign that has real results, those results are permanently cleared. This is by design (templates are structures, not data), but it's the #1 surprise for new POs.

What Does NOT Cascade

What you might expectWhat actually happens
Update a template -> live campaigns updateNo. Once a campaign is started from a template, it's independent. Template changes never propagate to existing campaigns.
Remove a class from a step -> items lose that classNo. Classes on CC items are separate from step classes. Removing a step class doesn't change item classes.
Delete a file from S3 -> asset record updatesNo. The asset record still references the deleted file. Next deploy will fail with "file not found".
Disable a user -> their campaigns are affectedNo. Campaigns are independent of the creating user. Disabling a user only blocks their login.

3. Two Applications: What Each Can Do

CapabilityAdmin ConsoleCustomer App
Create campaign from scratchYesNo (template-based only)
Design campaign structure (phases, steps, vars)YesNo
5-step guided wizardNoYes
Run full computationYes (any scope)Yes (via "Activate")
Edit individual variablesYes (grid editor)Limited (field handlers in Steps 4-5)
AI ChatYes (full)Yes (embedded AI Assist)
File storage managementYes (all storage types)No
User/permission managementYesNo
AI model configurationYesNo
Document template editingYesNo
Microsite configurationYesNo
View generated assetsYesYes
Clone campaignYesYes (from Step 5 view)

Application Versioning

The Customer App supports multiple versions running simultaneously. Each campaign stores which app version created it. If a user opens a campaign created with a different version, they're redirected to the correct version. This enables A/B testing of different wizard workflows.

4. Metrics & KPIs Available

The system exposes 200+ metrics via Prometheus/Grafana with 15 pre-built dashboards.

User Adoption & Engagement

MetricWhat it tells youActionable insight
company.active.countNumber of active companies (tenants)Customer growth
campaign.created (by company)Campaign creation volumeFeature adoption per company; identify power users
campaign.publishedCampaigns promoted to templatesTemplate reusability
campaign.startedCampaigns started from templatesTemplate value - which templates drive adoption
auth.login.successSuccessful loginsActive user count; DAU/MAU
chat.createdChat sessions startedAI chat feature adoption
chat.message.sent (by role)User vs. assistant messagesConversation depth; user engagement with AI

Campaign Lifecycle Funnel

flowchart LR
    Created["Created
(campaign.created)"] --> Published["Published
(campaign.published)"] Published --> Started["Started
(campaign.started)"] Started --> Computed["Computed
(computation.completed)"]

Track drop-off rates between each stage. High drop-off at Created->Published = template design friction. High drop-off at Started->Computed = computation reliability issues.

Performance & Reliability

MetricWhat it tells youAlert threshold
computation.campaign.duration P99End-to-end campaign computation timeP99 > 300s = user patience limit
llm.duration P99AI API call latencyP99 > 55s = 504 timeout risk
computation.failed rateComputation failure rateAny spike = investigate immediately
llm.provider.pool_exhaustedAll API keys for a provider exhausted simultaneouslyAny occurrence = AI requests failing
computation.graph.tasks.stuckTasks running > 5 minutesNon-zero = emergency investigation
computation.lock.rejectedUsers hitting "campaign locked" errorHigh rate = UX friction

Cost Drivers

MetricWhat it tells youOptimization lever
llm.tokens.prompt by modelInput token volume per modelLarge prompts = high cost. Simplify prompts.
llm.tokens.completion by modelOutput token volume per modelHigh completion:prompt ratio = verbose model. Reduce max_tokens.
llm.calls by providerAPI call volume per providerProvider pricing comparison
file.upload.size.bytesS3 storage consumptionLarge files = high S3 cost
computation.graph.topology.items_by_typePrompt items per campaignMore prompt items = more LLM cost per run

Pre-Built Grafana Dashboards

#DashboardBest for
01Platform OverviewExecutive health check: success rates, active computations, error rates
02Campaign LifecycleAdoption funnel, top companies, operation durations
03Computation EnginePerformance deep-dive: duration by type, lock rejections, thread pools
04AI & LLMAI cost and quality: token usage by model, error rates, latency
05Documents & StorageDocument generation health, file upload/download volume
06Microsite & GitDeployment stats, Git operation performance
13LLM Provider AvailabilityProvider-specific incident diagnosis: errors, retries, pool exhaustion

5. Configuration Impact Matrix

What EXACTLY changes when you flip each setting:

Campaign-Level Settings

SettingImpact on system behavior
Default AI ModelAll prompt/chat variables without their own model use this one. If not set, falls back to system default. If no system default exists, prompt computation fails.
Application IDLinks campaign to a Customer App version. Controls which handlers/UI the Customer App uses. If changed, existing Customer App users may be redirected to a different version.
Microsite Context FolderDefines the URL path prefix for assets on the microsite. Supports variable placeholders. Changing this after deployment means old URLs break.
MCT IDRead-only reference to source template. Used for lineage tracking and metrics grouping. Can be cleared but not changed.

AI Model Configuration Impact

SettingBusiness impact
Temperature 0.0Deterministic output - same input always produces same output. Best for structured data.
Temperature 1.0+Creative/varied output. Each run produces different content. Best for marketing copy.
Max Tokens low (256)Short outputs - may cut off mid-sentence. Cheap but risky for long content.
Max Tokens high (4096)Full-length outputs. Higher cost per call but content won't be truncated.
RPM low (10)Only 10 AI calls per minute per model. Large campaigns will be very slow.
RPM high (1000)High throughput but may exceed provider's actual limit -> 429 errors.
"System Default" flagAll campaigns/chats without explicit model use this. Changing it affects ALL users immediately.
"Use in Chat" flagMakes model available in chat dropdown. Disabling removes it from all chat sessions.

User Preferences (Per-User!)

PreferenceImpactPO concern
Update Downstream Dependencies = EnabledEditing a variable auto-resets all dependents. More predictable but slower for iterative editing.Different users may have different settings, leading to inconsistent behavior in same campaign.
Update Downstream Dependencies = DisabledEditing a variable only changes that variable. Dependents keep old values until manually reset.Users may not realize downstream values are stale.
Default Application IDOn login, user redirected to their preferred Customer App version.If set to a removed app version, user may get errors on login.

The per-user downstream preference is a hidden UX trap

Two users editing the same campaign will see different behavior depending on their personal preference. User A edits a variable and sees all dependents reset. User B edits the same variable and nothing else changes. This is a known source of confusion in team workflows.

6. Understanding Computation Complexity

The computation engine tracks topology metrics that reveal campaign complexity:

MetricWhat it means for the product
Total items per campaignCampaign size. More items = longer computation. Typical: 10-200 items.
Initial parallelismItems with zero dependencies = can run simultaneously. Higher = faster start.
Dependency ratio0 = all items independent (very fast). 1 = all items chained (slow serial execution).
Items by typePrompt and image items drive AI cost. Function items are free. Asset items involve S3.
Broken referencesNon-zero = template quality issue. Variables reference keys that don't exist.

Tip for template designers

Design campaigns with high initial parallelism (many independent variables at the start) and minimize deep dependency chains. This dramatically reduces computation time because more items can use the thread pool simultaneously.

7. Critical PO Gotchas

1. Publishing a template clears ALL computed data

Don't publish if you need to preserve results. This is irreversible.

2. Template updates don't propagate to live campaigns

By design. But confusing if you expect "update template once, all campaigns update". Each campaign is an independent clone.

3. Downstream dependency preference is per-user, not per-campaign

Two users editing the same campaign see different cascading behavior. This causes confusion in team workflows.

4. Microsite deploy can silently fail

If the microsite isn't configured or the file is in private storage, deployment just doesn't happen - no error shown in UI unless you check the asset's state.

5. applicationState is unvalidated JSON

The system stores it but doesn't validate. The Customer App is responsible for handling it. Bad JSON breaks the Customer App silently.

6. Deleting S3 files doesn't update asset records

Asset records still reference the deleted file. Next deployment will fail with "file not found".

7. Changing the system default AI model affects everyone immediately

All campaigns and chats without an explicit model switch to the new default. No confirmation, no rollback.

8. Computation is limited to 1 concurrent run per campaign

If two users try to compute the same campaign, one gets "campaign locked". System-wide: max 150 threads. Under heavy load, new computations queue.

9. Session prompts accumulate tokens with each turn

Each message includes full conversation history. Long sessions can exceed the model's context window, causing failures. No automatic truncation.

10. File and folder size limits are hard (100 MB)

No warning before hitting the limit. Users discover it only when an upload fails.