Multi-Tenant POS Platform: Build, Operate, Transfer
A Spanish restaurant chain with 200+ locations across 3 countries needed to migrate from a legacy monolith POS to a cloud-native, multi-tenant platform — with zero operational disruption.
40%
Cloud Cost Reduction
200+
Locations Migrated
12
Months Total Duration
Industry
Hospitality & Retail
Model
Build-Operate-Transfer
Duration
12 months
Team
8 specialists
Key Result
200+ locations migrated
Client Context
The Client Situation
The client is a rapidly growing restaurant group headquartered in Spain, operating over 200 locations across Spain, Portugal, and France. Their Point of Sale (POS) system — the backbone of daily operations — was a legacy monolithic application originally built in-house over a decade ago. It handled order management, kitchen display, payment processing, inventory tracking, and basic reporting for every location.
The monolith had reached its limits. Cloud hosting costs were escalating because the system couldn't scale efficiently — every location's data resided in a single shared database, and peak dinner service loads caused noticeable latency across all restaurants. Adding new features required coordinated deployments affecting all 200+ locations simultaneously, with any regression impacting revenue across the entire chain.
A franchise expansion into new markets required multi-tenant data isolation that the existing architecture simply could not provide. Franchisees needed their own customizable menus, pricing, loyalty programs, and operational dashboards — while the corporate team required consolidated reporting and centralized menu template management.
The client's CTO wanted an external team to build the new platform, stabilize it in production, and then transfer operations and knowledge to an expanded in-house engineering team. The Build-Operate-Transfer model was the explicit requirement from the start, with clear milestones for each phase.
Scope & Approach
The BOT Engagement Structure
Envadel was engaged under a full Build-Operate-Transfer contract spanning 12 months with three defined phases: Build (months 1-4) — architecture, development, and deployment of the new multi-tenant POS platform; Operate (months 5-8) — running the platform in production, migrating locations incrementally, stabilizing, and optimizing; Transfer (months 9-12) — hiring support, training, documentation, and gradual handover to the client's new internal team.
The approach prioritized incremental migration: the new platform was deployed alongside the legacy system, with locations migrated in waves of 20-30 restaurants. Each wave included a pilot phase (2-3 locations for 1 week), validation, and then bulk migration. A real-time data synchronization layer ensured that corporate reporting was accurate regardless of which platform individual locations were running on.
Each BOT phase had explicit exit criteria and executive sign-off gates. The Build phase required passing acceptance tests for all core modules (orders, payments, inventory, reporting, multi-tenancy). The Operate phase required 200+ locations successfully migrated with 99.5%+ uptime. The Transfer phase required documented architecture, runbooks, on-call procedures, and a new internal team independently operating for 30 days.
Team Composition
Full BOT Team Composition
The Envadel team operated as a self-contained unit with full delivery ownership. The team composition evolved across phases: the full engineering team was present during Build and Operate, with a planned ramp-down during Transfer as client engineers took over.
Tech Lead / Architect (1) — Node.js, multi-tenant systems
Sr. Full-Stack Engineer (2) — TypeScript, React, PostgreSQL
Sr. Backend Engineer (1) — Event-driven, Redis, integrations
DevOps / Platform Engineer (1) — Azure, Terraform, K8s
QA Automation Engineer (1) — E2E testing, Cypress
Project Manager (1) — Agile delivery, stakeholder mgmt
UX/UI Consultant (part-time) — Design system, POS interfaces
Data Migration Specialist (1) — ETL, legacy data mapping
Architecture & Technology
Architecture & Technical Decisions
The new platform was built on Node.js with TypeScript for the backend services and React with TypeScript for the frontend (POS terminal interface, kitchen display, management dashboard). PostgreSQL was the primary database, using row-level security (RLS) policies and tenant-scoped schemas to enforce data isolation at the database level — ensuring that no query from one tenant could ever access another tenant's data, even in case of application-level bugs.
Redis served multiple purposes: session management for POS terminals, real-time order queue synchronization between POS and kitchen display systems, and caching of menu configurations and pricing rules. An event-driven architecture using RabbitMQ handled asynchronous workflows: payment processing confirmations, inventory updates, and cross-location reporting aggregation. Each location maintained a local event buffer for offline resilience — if connectivity dropped, the POS continued operating and synchronized when reconnected.
The infrastructure ran on Azure (client's existing cloud provider), fully codified with Terraform. AKS (Azure Kubernetes Service) hosted the application layer with auto-scaling configured per service. Azure Database for PostgreSQL provided the managed database tier with automated backups, point-in-time recovery, and read replicas for the reporting workload. Azure CDN served the React frontend, and Azure Front Door provided global load balancing and WAF protection.
The migration tooling was purpose-built: a custom ETL pipeline extracted data from the legacy MySQL database, transformed it into the new multi-tenant schema (adding tenant IDs, normalizing menu structures, mapping legacy payment references), and loaded it into PostgreSQL. Each location's migration was atomic and reversible — if any validation check failed, the location was automatically rolled back to the legacy system with zero data loss.
Security & Compliance
Security & Payment Compliance
Payment processing was handled through PCI-DSS certified third-party payment gateways (Adyen, Redsys). The POS platform never stored card data — tokenized references were used for all payment flows. PCI-DSS compliance was maintained through network segmentation, encrypted communications, and regular vulnerability assessments of the payment integration layer.
Multi-tenant data isolation was enforced at three levels: application middleware (tenant context injection), database (PostgreSQL RLS), and infrastructure (namespace-level network policies in Kubernetes). Penetration testing conducted by an independent firm validated that no cross-tenant data leakage was possible through any attack vector tested.
GDPR compliance was critical given the cross-border operation (Spain, Portugal, France). Customer data (loyalty programs, order history) was stored with explicit consent management, data retention policies were configurable per jurisdiction, and a "right to deletion" API was built into the platform from day one. All data processing was documented in a GDPR-compliant data register shared with the client's DPO.
Delivery Process
Phased Delivery & Governance
The Build phase (months 1-4) followed 2-week sprints with demo sessions every sprint to the client's CTO and operations director. The first production deployment (pilot with 3 locations) happened at the end of month 3, providing early real-world feedback that shaped the remaining build work. Key decisions — like adding offline resilience capabilities — emerged from this pilot feedback.
The Operate phase (months 5-8) shifted to a dual track: ongoing feature development in sprints plus a dedicated migration workstream. Locations were migrated in waves of 20-30, with each wave taking approximately 2 weeks (pilot → validate → bulk migrate). A war room was established during migration weekends with both Envadel and client operations teams present for real-time issue resolution.
The Transfer phase (months 9-12) was structured around knowledge transfer and team building. Envadel's team conducted 40+ hours of recorded training sessions covering architecture decisions, operational runbooks, deployment procedures, and troubleshooting guides. The client hired 4 new engineers during this phase, each paired with an Envadel engineer for hands-on knowledge transfer.
Executive reporting followed the same cadence throughout: weekly status, monthly executive summary, and phase-gate reviews at each transition (Build→Operate, Operate→Transfer). The Transfer was formally completed when the client's team operated independently for 30 consecutive days with metrics meeting the agreed SLA thresholds.
Results & Impact
Measurable Outcomes
40%
Reduction in cloud infrastructure costs vs. legacy system
3x
Faster feature deployment cycle (from 6 weeks to 2 weeks)
200+
Locations migrated with zero revenue-impacting incidents
10 mo
Full transfer completed (2 months ahead of initial estimate)
99.8%
Platform uptime across all locations post-migration
40+ hrs
Recorded training material delivered during transfer phase
Lessons Learned
Key Insights from This Engagement
The Build-Operate-Transfer model works best with explicit, measurable exit criteria for each phase. Defining "what done looks like" upfront — including uptime thresholds, migration completion targets, and independent operation periods — prevented ambiguity and ensured smooth transitions.
Pilot-first migration strategy was essential for a 200+ location rollout. The 3-location pilot in month 3 revealed operational requirements (offline resilience, kitchen display latency tolerance) that would have been expensive to retrofit later. Early production exposure de-risked the entire migration.
PostgreSQL row-level security proved to be the right choice for multi-tenant data isolation in this context. It provided defense-in-depth at the database layer without the operational complexity of schema-per-tenant, while satisfying the independent security audit requirements for franchise data isolation.
Knowledge transfer is not a documentation exercise — it's a mentorship process. The most effective transfer mechanism was pairing new client engineers with Envadel team members on real production tasks and incidents, not just handing over written documentation.
Discuss a Similar Challenge
Schedule a confidential discovery call to explore how we can deliver measurable outcomes for your organization.
Schedule a Call