🚨
Architectural Risk Detection11 risks · AI-detected94% confidence
● CRITICAL · Checkout Coupling
dynamic_pricing has the highest dependency fanout across all pricing workflows
Graph analysis reveals dynamic_pricing is the convergence point of 5+ upstream callers with no isolation layer. A single outage propagates to TPIS, VIS, PCC JTier, and the incentive evaluation path simultaneously. The PCC JTier bidirectional dependency creates circular failure modes.
AI Confidence:97%
● CRITICAL · Retry Cascade
message-service retry behavior may create cascading failures
No dead-letter queue for Rocketman delivery failures. Retried messages re-enter the same processing path, amplifying load 3× on both Rocketman and Cassandra simultaneously. Under Rocketman degradation, message-service becomes a traffic multiplier — confirmed by graph community analysis showing Rocketman as a shared downstream.
AI Confidence:93%
● HIGH · API Over-Coupling
pricing-control-center-ui depends on multiple tightly coupled APIs
PCC UI calls PCC JTier directly for ILS creation flows, and PCC JTier calls dynamic_pricing for price resolution — creating a 3-layer chain (UI→JTier→Pricing) where any middle layer failure blocks the entire revenue management workflow. No anti-corruption layer between UI and backend pricing logic.
AI Confidence:89%
● HIGH · Silent Data Dependency
machine-learning-toolkit affects runtime pricing decisions silently
ML Toolkit Airflow DAGs feed min-price floors directly to dynamic_pricing via Pricing Service API. A DAG failure, Hive upstream quality issue, or Bayesian model drift causes silent price miscalculation with no immediate Grafana alert — invisible to oncall until a downstream SLA breach triggers investigation.
AI Confidence:91%
Risk Radar — All 6 Repositories
incentive-service
22,346 nodes · 47,303 edges · checkout critical path · 5 known risks
97
CRITICAL
dynamic_pricing
6,204 nodes · 13,521 edges · bidirectional PCC coupling · BoneCP P99 80ms
92
CRITICAL
message-service
8,821 nodes · no DLQ · 6 background jobs no lock · retry amplification risk
72
HIGH
subscription-programs-app
2,417 nodes · Membership god-object deg 197 · incentive-service hard dependency
68
HIGH
machine-learning-toolkit
420 nodes · silent min-price dependency · DAG failure invisible to oncall
55
MEDIUM
pricing-control-center-ui
267 nodes · 3-layer API chain · no anti-corruption layer · SOX scope
42
MEDIUM
🔗
Service Dependency Intelligence● CRITICAL
incentive-service: 4 direct consumer services
checkout-flow, subscription-programs-app, message-service, dynamic_pricing (ILS). Betweenness 0.137 — confirmed dominant hub. Any API contract change requires coordinated release across all 4.
AI Confidence:99%
● HIGH
subscription-programs-app: community #0 entirely incentive-service calls
The largest community (78 nodes, ~4%) in subscription-programs-app is dedicated entirely to calling incentive-service — the strongest cross-service coupling signal in the platform graph.
AI Confidence:95%
● HIGH
Circular dependency: dynamic_pricing ↔ PCC JTier
dynamic_pricing → PCC JTier (ILS scheduling) AND PCC JTier → dynamic_pricing (price resolution). Bidirectional coupling with no anti-corruption layer creates coordinated failure modes.
AI Confidence:92%
● HIGH
ML Toolkit is an implicit dependency of dynamic_pricing
min-price DAG (Airflow → Pricing Service API) means machine-learning-toolkit is a runtime upstream of dynamic_pricing — not a build-time dependency, so it's invisible in standard dependency graphs.
AI Confidence:90%
● MEDIUM
message-service: Campaign god-node degree 176
Campaign class bridges treatment, scheduling, audience, and template communities through intentional composition — healthy architecture. But Campaign is referenced by message-service internals making it a refactor pinch-point.
AI Confidence:87%
● HEALTHY
dynamic_pricing shows clean layer boundaries
Graph community separation confirms clean HTTP → DAO → Service → Publish layer isolation. ExceptionFilterChain is the only cross-cutting concern — and it's expected. Layer discipline is strong.
AI Confidence:94%
🎯
Change Impact Predictiondynamic_pricing
TIER-1
Nodes: 6,204Fanout: HIGH
incentive-service
TIER-1
Nodes: 22,346Fanout: CRITICAL
message-service
TIER-2
Nodes: 8,821Fanout: MED
machine-learning-toolkit
DATA
Nodes: 420Fanout: MED
pricing-control-center-ui
TIER-3
Nodes: 267Fanout: LOW
subscription-programs-app
TIER-2
Nodes: 2,417Fanout: HIGH
✦ AI Impact Analysis
Downstream Services
Dependent APIs
Affected Workflows
📊
Runtime Bottleneck Analysis| Service | Component | P50 | P99 | AI Root Cause | Priority | Impact |
|---|---|---|---|---|---|---|
| incentive-service | Cassandra byKey() | 18ms | 120ms 🔴 | 2-thread pool starvation (SVC-8782) | P0 | |
| dynamic_pricing | MySQL BoneCP | 12ms | 80ms 🔴 | Pool exhaustion under TPIS+VIS burst | P0 | |
| message-service | /api/getemailmessages | 12ms | 50ms 🔴 | incentive-svc sync, no circuit breaker | P1 | |
| incentive-service | CTAOrchestratorActor | 14ms | 45ms ⚠ | Redis miss → MySQL fallback per request | P1 | |
| ML Toolkit | Bayesian STAN training | 4h | 8h | n1-standard-96 expected · no alert | P2 |
✦ AI RECOMMENDATION
Highest ROI fix: expand incentive-service Cassandra thread pool + add BoneCP→HikariCP migration
These two changes address the two P99 spikes (120ms Cassandra, 80ms MySQL) that account for ~65% of observed platform latency overhead. Both are low-effort (<1 sprint each) with critical impact. Recommend prioritizing before next Q release freeze.
🎓
Developer Onboarding InsightsRecommended onboarding path for a new engineer joining the Pricing & Incentives platform — ordered by blast radius understanding.
1
Understand the pricing data model first
Start with dynamic_pricing architecture: RP (Retail Price), PP (Program Price), EP (Established Price), CP (Contractual Price). These 4 concepts appear in every downstream service and are the platform vocabulary.
2
Map the checkout flow end-to-end
Trace: GAPI → Nginx → dynamic_pricing → incentive-service → subscription check. This path is the most critical and most commonly broken. Understanding it unlocks 80% of incident triage scenarios.
3
Learn the ILS lifecycle before touching PCC
ILS (Item Level Sale) is orchestrated across 3 services: pricing-control-center-ui (create) → PCC JTier (schedule, 11 Quartz jobs) → dynamic_pricing (execute). Modifying any layer without understanding the full lifecycle causes silent failures.
4
Understand audience qualification before touching message-service
message-service's audience import pipeline (GCS → Cassandra/Bigtable) feeds the incentive eligibility lookup. Understanding this chain prevents incorrect assumptions about why users see or don't see campaigns.
5
ML pipeline is offline — learn its outputs, not its internals
For most engineers, machine-learning-toolkit is a black box that produces min-price floors and Bayesian elasticity tables. Know which tables it writes and when — that's what matters for debugging pricing anomalies.
Key Concepts to Learn First
🗝️
ILS (Item Level Sale)
Temporary price reduction for an inventory product. Managed by PCC JTier + dynamic_pricing. Affects ~40% of daily pricing events.
🗝️
Federated Inventory
VIS (vouchers) + GIS (goods) implement the same Federated Inventory interface consumed by dynamic_pricing. Changes to either propagate through mBus topics.
🗝️
CTA (Call to Action)
Incentive display logic in incentive-service. CTAOrchestratorActor resolves the best message for a user-deal combination. Referenced across checkout, email, and push notification flows.
🗝️
Audience Qualification
Users are pre-qualified against incentives via AMS batch import → Cassandra/Bigtable store → eligibility lookup at checkout. Not real-time — 1-minute lag from audience change to eligibility.
🗝️
min-price floor
Machine-learning-toolkit computes the minimum allowable price for each product. dynamic_pricing enforces this as a guardrail. Violations trigger -1 sentinel response (no discount allowed).
🔧
Suggested Refactoring Opportunities1
Extract PricingRuleEvaluator into shared pricing-rules-sdk
Referenced by incentive-service, PCC JTier, and VIS — 3 external services coupling to implementation code. Extract to a versioned JAR. Breaking changes become explicit API versioning decisions rather than silent runtime failures.
Effort:
High effortCRITICAL impact
2
Add ILSCoordinatorService to break dynamic_pricing ↔ PCC JTier circular dependency
Introduce a thin coordination layer that owns ILS state transitions. Neither service knows about the other directly. Eliminates the confirmed bidirectional dependency and allows independent deployment windows for pricing and scheduling teams.
Effort:
Very high effortCRITICAL impact
3
Add circuit breaker + DLQ to message-service outbound delivery paths
Two quick wins: (a) Resilience4j CircuitBreaker on incentive-service call in getEmailMessages, (b) dead-letter topic for Rocketman failures. Together eliminate the retry amplification risk and the silent-drop failure mode with ~2 days of engineering effort each.
Effort:
Low effortHIGH impact
4
Migrate dynamic_pricing BoneCP → HikariCP + expand Cassandra thread pool
BoneCP is unmaintained. HikariCP offers 2–4× faster pool acquisition. Combined with expanding the incentive-service audience-bulk-insert pool from 2→10 threads, these two changes eliminate the confirmed P0 bottlenecks causing 80ms and 120ms P99 spikes respectively.
Effort:
Low effortCRITICAL impact
5
Decompose Membership god-object in subscription-programs-app
Membership (degree 197, betweenness 0.137) bridges 30+ communities. Extract SubscriptionStatus, BillingRecord, and IncentiveActivationState as distinct value objects. Reduces blast radius of any future Membership change from "entire service graph" to "isolated domain objects".
Effort:
Very high effortCRITICAL impact
6
Add Airflow DAG SLA alerting for ML Toolkit price floor feed
Currently zero alerting exists for ML Toolkit DAG failures that affect the min-price feed. Add an Airflow SLA miss callback that pages oncall@example.com when the min_price_pipeline DAG misses its schedule. Converts a silent failure mode into a managed incident.
Effort:
Low effortHIGH impact
GraphLens AI Copilot · Pricing & Incentives Platform · Generated 2026-05-13 · graphifyy v1.26.5 · Groupon P&P Engineering