Glossary
Terminology used throughout the Legacy Platform Modernization project.
Architecture & Patterns
| Term |
Definition |
| Monolith |
Architecture where the entire application is deployed as a single unit. All modules share the same codebase, process, and database |
| Microservices |
Architecture that splits an application into small, independently deployable services, each owning its own data |
| Strangler Fig |
Migration pattern — incrementally replace parts of the monolith with new services, running in parallel until the monolith is fully retired. Named after the Strangler Fig tree that wraps around and replaces its host |
| ACL (Anti-Corruption Layer) |
Intermediary layer between new services and the legacy system. Translates contracts/formats between both sides, preventing legacy from corrupting the new architecture |
| Bounded Context |
DDD concept — an autonomous boundary for a domain. Each bounded context = a potential microservice, owning its own models and logic |
| DDD (Domain-Driven Design) |
Software design methodology centered on the business domain. Divides systems along domain boundaries rather than technical layers |
| CQRS (Command Query Responsibility Segregation) |
Pattern that separates read models (query) from write models (command). Reporting Service uses this pattern — read-only, no writes |
| Event-Driven Architecture |
Architecture where services communicate via events. Service A publishes an event, Service B subscribes and reacts. Loose coupling, async |
| Clean Architecture |
Layered code structure: Domain → Application → Infrastructure → API. Dependencies point inward (domain knows nothing about infrastructure) |
| API Gateway |
Single entry point for all client requests. Routes traffic to the correct service. Handles cross-cutting concerns: auth, rate limiting, logging |
| Service Mesh |
Infrastructure layer managing service-to-service communication: mTLS, retry, circuit breaking. Typically transparent to application code |
Data & Database
| Term |
Definition |
| CDC (Change Data Capture) |
Technique that captures all database changes (insert/update/delete) in real-time. Used to sync data from the legacy DB to new service DBs without modifying legacy code |
| Per-Service Database |
Each microservice owns its own database. No service directly accesses another service's DB. Communication via APIs or events |
| Read Replica |
A read-only copy of a database. Reporting Service reads from replicas to avoid impacting the primary service's performance |
| ETL (Extract, Transform, Load) |
Process of extracting data from a source, transforming its format, and loading it into a target. Used for initial one-time bulk data migration |
| Dual-Write |
Writing data simultaneously to 2 databases. Risky because consistency is hard to guarantee — generally avoided in favor of CDC |
| Event Store |
Stores all domain events in chronological order. Foundation for AI/ML analytics — replay events to analyze business patterns |
| Feature Store |
Pre-processed data warehouse for ML models. Aggregated features from raw events + operational data |
| Schema Migration |
Changing database structure (add/modify/remove tables, columns). Managed via EF Core migrations or Flyway |
Infrastructure & DevOps
| Term |
Definition |
| IaC (Infrastructure as Code) |
Managing infrastructure (servers, DBs, networking) via code instead of manually. This project uses Bicep (Azure-native) |
| Bicep |
Microsoft's IaC tool for Azure. Simpler syntax than ARM templates. Azure-native. Chosen over Terraform because the team is 100% Azure |
| CI/CD |
Continuous Integration / Continuous Deployment. Automatically build, test, and deploy code on push |
| GitHub Actions |
CI/CD platform integrated into GitHub. Runs workflows on events (push, PR, schedule) |
| Docker |
Container platform — packages an application + dependencies into an image that runs consistently anywhere |
| Azure Container Apps |
Managed container platform on Azure. Serverless, auto-scale, no Kubernetes cluster management required |
| ACR (Azure Container Registry) |
Registry for storing Docker images on Azure. CI builds image → pushes to ACR → deploys from ACR |
| YARP (Yet Another Reverse Proxy) |
.NET-native reverse proxy by Microsoft. Used as the API Gateway + Strangler Fig router |
| Rolling Update |
Deployment strategy — gradually deploy new instances while retiring old ones. Zero downtime |
| Canary Deployment |
Release strategy — route a small fraction of traffic (5%) to the new version, monitor, then gradually increase |
| Blue-Green Deployment |
Two identical environments (blue = current, green = new). Switch traffic from blue → green when ready |
| Feature Flag |
Toggle to enable/disable a feature in production without redeploying. Acts as a kill switch for fast rollback |
Communication & Messaging
| Term |
Definition |
| Azure Service Bus |
Azure's managed message broker. Supports topics, subscriptions, dead-letter queues. Enterprise-grade |
| Topic |
A publish/subscribe channel. Publisher sends messages to a topic, multiple subscribers receive them |
| Subscription |
An enrollment to receive messages from a topic. Each service has its own subscription, receiving independent message copies |
| Dead Letter Queue (DLQ) |
Queue for messages that couldn't be processed. Instead of losing the message → move it to the DLQ for later handling |
| Idempotency |
Property where performing the same operation multiple times yields the same result. Critical when the Event Bus retries messages |
| Correlation ID |
A unique ID used to trace a single request across multiple services. Generated at the API Gateway, propagated through all services |
| REST (Representational State Transfer) |
Synchronous communication style over HTTP. Request → Response. Used for client calls and queries |
| gRPC |
High-performance RPC framework using Protocol Buffers. Faster than REST for service-to-service. Under consideration for future use |
| MCP (Model Context Protocol) |
Protocol connecting AI models to external tools/data sources. Enables AI agents to query DBs, trigger CI, read docs |
Testing
| Term |
Definition |
| Contract Testing |
Tests verifying that 2 services are compatible (API contract). Consumer declares expectations → Provider verifies compliance |
| Pact |
The most popular contract testing framework. Consumer-driven: consumer writes tests first, provider verifies afterward |
| Unit Test |
Tests a single function/class in isolation. Fast, no external dependencies. Largest portion of the test pyramid |
| Integration Test |
Tests interaction with external systems (DB, message bus, APIs). Slower than unit tests, uses Docker in CI |
| E2E Test (End-to-End) |
Tests the entire flow from UI to DB. Slowest and most fragile. Only used for critical paths |
| Playwright / Cypress |
Tools for running E2E tests in a browser. Simulate user interactions |
| TDD (Test-Driven Development) |
Write tests first → write code to pass → refactor. With AI: AI generates tests first → AI generates implementation |
| SAST (Static Application Security Testing) |
Scans source code for security vulnerabilities without running the app. CodeQL is one SAST tool |
| DAST (Dynamic Application Security Testing) |
Scans a running application for vulnerabilities. Tests with real HTTP requests |
| Load Test |
Tests system performance under high load. Simulates 40K concurrent users |
Observability
| Term |
Definition |
| OpenTelemetry (OTel) |
Standard framework for distributed tracing, metrics, and logging. Vendor-neutral — exports data to any backend |
| Distributed Tracing |
Tracks a single request across multiple services. Shows per-service latency and identifies bottlenecks |
| Serilog |
Structured logging library for .NET. Outputs JSON logs → easy to query, filter, and analyze |
| Structured Logging |
Key-value format logs instead of plain text. E.g., {event: "booking_created", bookingId: "BK-123"} instead of "Booking BK-123 created" |
| Health Check |
Endpoint (/health, /ready) indicating whether a service is operational and ready to receive traffic. Used by load balancers + orchestrators |
| Anomaly Detection |
AI/ML detection of abnormal behavior in metrics/logs. E.g., latency spikes, error rate surges |
| Jaeger / Zipkin |
Backends for distributed tracing. Receive trace data from OpenTelemetry, display trace timelines |
| Seq / ELK |
Log aggregation platforms. Seq (structured log server), ELK (Elasticsearch-Logstash-Kibana) |
| SLA / SLO / SLI |
SLA: commitment to customer (99.9% uptime). SLO: internal target. SLI: actual measurement metric |
AI & AI-First
| Term |
Definition |
| AI-First |
Mindset where AI is the default approach. AI executes first, humans review after. Not "AI assists" but "AI executes, humans decide" |
| AI Multiplier |
Productivity factor when using AI. 2x = 5 engineers produce the output of 10. Calculated as a weighted average by task type |
| Agentic AI |
AI that autonomously plans → executes → verifies → iterates. Not just answering questions but completing tasks end-to-end |
| Cursor Pro |
AI-integrated IDE (VS Code fork). Agent mode edits multi-file. @codebase queries the entire codebase |
| Claude Code |
Anthropic's CLI agent. Runs in terminal, autonomously codes → tests → commits. Ideal for batch migration |
| CodeRabbit |
AI auto-review tool for PRs. Integrates with GitHub/GitLab. First-pass review, flags issues for humans |
| Prompt Library |
Collection of tested and optimized prompts, versioned in git. Shared across the team for consistency |
| Prompt-as-Code |
Managing prompts like code: version control, review changes, test before deploying |
| AI Hallucination |
AI generates incorrect information but presents it confidently. E.g., calling nonexistent methods, wrong logic that looks correct |
| AI Governance |
Process for managing AI usage within the team: review gates, quality checks, security scanning, knowledge transfer |
| RAG (Retrieval-Augmented Generation) |
Pattern: retrieve relevant data from a knowledge base → feed into the AI model → generate answer. Reduces hallucination |
| LLM (Large Language Model) |
Large AI model trained on massive text data. Claude, GPT-4o, Gemini are LLMs |
| Few-shot Prompting |
Providing the AI with a few examples (shots) before the request → AI learns patterns from examples → more accurate output |
| Fine-tuning |
Additional training on proprietary data. Unlike prompting — modifies model weights. Generally unnecessary for code tasks |
Project Management
| Term |
Definition |
| Shape Up |
Project management framework by Basecamp. 6-week cycles, appetite-based (fixed time, variable scope), no story point estimation |
| Appetite |
Shape Up concept — "how much time are we willing to invest in this feature?" instead of "how long will this feature take?" |
| Cooldown |
The final week of each Shape Up cycle. Dedicated to tech debt, learning, experimentation. No feature work |
| WIP Limit |
Limit on tasks "in progress" simultaneously. Prevents context switching. WIP limit = team size (1 task/person) |
| Bus Factor |
Minimum number of people who must leave before the project stalls. Bus factor = 1 = dangerous. Target ≥ 2 for every module |
| ADR (Architecture Decision Record) |
Document recording an architecture decision: context, decision, alternatives considered, consequences. Stored in repo |
| Spike |
Time-boxed research task. Delivers knowledge, not code. E.g., "2-day spike to evaluate which CDC tool fits best" |
| Vertical Slice |
A complete feature from UI → API → DB. Instead of finishing all APIs before starting the UI |
| Tech Debt |
Shortcuts in code/architecture accepted for speed. Must be repaid (refactored) later — otherwise compounds |
| Scope Creep |
Uncontrolled project scope expansion. "Just add this small feature" × 20 times = missed deadline |
Domain-Specific (Product A)
| Term |
Definition |
| Product A |
Enterprise travel, event & operations management platform. ~40,000 global users |
| Travel Booking |
Module for: search, booking, itineraries, travel service providers |
| Event Management |
Module for: event creation, scheduling, venues, attendee management |
| Payment Processing |
Module for: payments, invoicing, reconciliation. Frozen in Phase 1 — no changes |
| Workforce Management |
Module for: personnel, assignments, shifts, skills |
| Communications |
Notification module: email, SMS, push notifications, templates |
| Operational Reporting |
Reporting module: dashboards, data exports, cross-module reports |
| Allocation Algorithm |
Algorithm for automatically assigning personnel based on skills, availability, and constraints |
PhoenixDX Context
| Term |
Definition |
| PhoenixDX |
Company — AI-first engineering hub in Ho Chi Minh City |
| Vietnam Hub |
New R&D center focused on AI-augmented engineering and enterprise modernization |
| Phase 0 |
Month 1 — setup AI toolchain, ingest legacy codebase, Comms pilot migration, CI/CD, IaC, team training |
| Phase 1 |
Month 2–4 — Core Services: Travel Booking go-live (M3), Event Management go-live (M4) |
| Phase 2 |
Month 5–7 — Scale Out: Workforce (M6), Communications + Reporting go-live (M7) |
| Phase 3 |
Month 8–9 — Hardening: performance, monitoring, DR, documentation, Payment ACL v2 |
| Legacy Modernization Framework |
PhoenixDX framework: rebuild frontend (React) + extract backend (.NET 8 microservices) + event-driven + per-service DB |
| 2x Multiplier |
AI productivity target: 5 engineers producing the output of 10 through agentic AI workflows |
High Availability & Deployment
| Term |
Definition |
| Azure Front Door |
Global load balancer + WAF + DDoS protection. Routes users to the nearest healthy region, auto-failover < 60s |
| Geo-Replication |
Replicates databases across Azure regions. Async replication < 5s lag. Auto-failover groups for DR |
| RTO (Recovery Time Objective) |
Maximum acceptable recovery time after an outage. Target: < 5 min (service), < 60s (region) |
| RPO (Recovery Point Objective) |
Maximum acceptable data loss during failover. Target: < 30s (async replication lag) |
| Error Budget |
SLO-based: allowed downtime/errors per month (e.g., 0.05% = 26 min). Exceeding budget → feature freeze |
| Shadow Mode |
Traffic mirroring: send a copy of requests to the new service, discard responses. Validates without affecting users |
| Compare Mode |
Send requests to both legacy and new service, compare responses. Find mismatches before switching traffic |
| Dual-Write Transition |
DB transition phases: Phase A (legacy writes, CDC syncs), Phase B (both write), Phase C (new writes, legacy deprecated) |
| Man-Month |
Capacity unit: 1 engineer working full-time for 1 month. Project: 45 raw, ~44 effective (with AI 2x) |
| Canary Deploy |
Route 5% traffic to the new version, monitor 30 min–48h, gradually increase to 100%. Auto-rollback if errors exceed threshold |
DDD (Domain-Driven Design)
| Term |
Definition |
| Entity |
Object with a unique identity (ID). Lifecycle: created → modified → deleted. E.g., Booking, User, Event |
| Value Object |
Object without identity, compared by value. Immutable. E.g., Money(100, "USD"), DateRange, Address |
| Aggregate |
Cluster of entities + value objects with 1 Aggregate Root. Transaction boundary: save/load as a unit. E.g., Booking (root) + BookingItems + Travelers |
| Aggregate Root |
The sole entry point into an aggregate. External code references the aggregate only through its root |
| Domain Event |
Records "something happened" in the domain. Past tense: BookingCreated, PaymentProcessed. Triggers side effects within/across services |
| Repository |
Interface for accessing aggregates from persistence. E.g., IBookingRepository.GetById(id). Implementation: EF Core |
| Domain Service |
Logic that doesn't belong to a single entity, stateless. E.g., PricingService.CalculateTotal(booking, rules) |
| Application Service |
Orchestrates use cases, contains no business logic. MediatR handler = application service |
| Ubiquitous Language |
Shared language between developers and business within a bounded context. Code must reflect business language |
| Context Map |
Diagram describing relationships between bounded contexts: customer-supplier, ACL, shared kernel, partnership |
| Shared Kernel |
A small shared model between 2+ bounded contexts. Must be kept minimal: UserId, Money, DateRange |
| Subdomain |
Subdivision of a domain: Core (competitive advantage), Supporting (needed but not a differentiator), Generic (commodity) |