Problem & Constraints
The existing restaurant POS was designed years before off-premises dining became a meaningful part of casual dining. It handled the core restaurant transaction well, but it was never designed for the additional workflows required to manage pickup and delivery. The goal was not to replace the POS. It was to extend it with a new operational platform that could be delivered quickly, work reliably inside the restaurant, and evolve as the off-premises business grew.
- Legacy POS
- The decades-old POS had no modern API. Integration depended on structured text files written to and consumed from the restaurant file system.
- Unreliable connectivity
- Restaurants could not stop fulfilling orders when connectivity to centralized systems was interrupted. Critical capabilities needed to continue operating locally.
- Seven-month MVP
- The first production capability had to be designed, built, and deployed in seven months, requiring an architecture that could move quickly without creating a dead end.
- Path to scale
- The MVP would begin with a small group of restaurants, but the architecture needed to accommodate hundreds of locations and a growing set of off-premises capabilities.
Architecture Overview

The platform was designed around a resilient restaurant edge. A POS Agent isolated the legacy POS and its file-based integration model from the new platform, translating POS events into a common OPD domain model. A local API, SQL Server database, and restaurant applications handled fulfillment and delivery workflows without depending on continuous connectivity to centralized systems. Google services provided geocoding and routing capabilities, while the architecture later connected to the Enterprise Cloud Platform for centralized configuration, deployment, and other shared services.
Key Architecture Decisions
Extend the POS rather than replace it
Keep the existing POS as the system of record for restaurant transactions and build OPD as an independent platform around it. A POS Agent adapted the legacy file-based integration into the OPD domain model, isolating POS-specific behavior so the fulfillment platform could evolve independently.
Keep critical operations at the edge
Run the API, data, applications, and supporting services locally so restaurant fulfillment did not depend on continuous connectivity to centralized systems. This preserved local resilience while allowing centralized capabilities to be introduced as the broader OPD ecosystem evolved.
Use geography to drive delivery decisions
Geocode guest addresses and compare them with restaurant-specific trade areas to determine delivery eligibility. The same geospatial foundation supported routing, mileage and toll estimates for driver reimbursement, and later fleet-management capabilities such as multi-order delivery optimization.
Build for continuous evolution
Focus the seven-month MVP on the capabilities required to operate off-premises fulfillment while establishing clear boundaries between POS integration, APIs, persistence, and applications. Separation of concerns and a common domain model allowed new capabilities to be added without repeatedly restructuring the restaurant platform.
Engineering Approach
The engineering approach emphasized performance, reliability, modularity, testability, and long-term maintainability. Clear separation of concerns, well-defined interfaces, and deliberate use of design patterns kept components loosely coupled and extensible. Testing, deployment automation, observability, and security were treated as integral parts of the platform rather than concerns added later.
- Application & Services
- .NET · RESTful APIs · AngularJS · WPF · SignalR
- Data & Integration
- SQL Server Express · Dapper Async · Swagger · Google Geocoding & Routing
- Patterns & Principles
- Adapter · Strategy · Factory · Abstract Factory · Dependency Injection · SOLID Principles · Separation of Concerns
- Release & Reliability
- 90% minimum unit-test coverage · Azure DevOps CI/CD · NLog · Operational auditing
- Security
- HTTPS · PCI network isolation
Results & Evolution
What began as a seven-month MVP continued to evolve as off-premises dining became a larger and more sophisticated part of restaurant operations. The original architecture remained the foundation as new capabilities, operational intelligence, and connections to the broader OPD ecosystem were added over time.
- A capable foundation from the start: The MVP established much of the core operating model: guest information, delivery eligibility, driver availability, dispatch, routing, mileage and toll information for driver reimbursement, and the restaurant-side workflows required to manage pickup and delivery.
- Better quoting and delivery decisions: Fast-follow capabilities introduced increasingly sophisticated calculations for expected ready and delivery times, giving restaurant teams better information to quote guests and manage fulfillment. Business-defined guardrails and overrides kept operational judgment in the process as the algorithms matured.
- More sophisticated fleet intelligence: The platform continued to combine order state, calculated times, driver availability, geospatial data, and configurable business rules. Smart Doubles and Triples could recommend combining multiple orders into a single driver trip when geography, timing, and operating conditions made it practical.
- Connected platform: As the broader OPD ecosystem matured, Restaurant Operations connected with centralized configuration and deployment capabilities, guest-facing order tracking, and reusable last-mile delivery services while retaining local execution for critical restaurant workflows.
- Proven when the operating model mattered most: By 2020, four years of investment had produced a mature platform deployed across hundreds of restaurants, with established processes for takeout, delivery, dispatch, and fleet management. When COVID-19 restrictions closed or severely limited dining rooms, the company already had the technology, processes, and restaurant experience needed to continue serving guests outside the dining room.
- Growth of a major revenue channel: Off-premises dining ultimately grew to nearly 30% of company sales, turning a capability originally built to support an emerging channel into a significant part of the business.
Architectural Perspective
One of the things this platform reinforced for me is how much the decisions made early in a system's life influence its ability to evolve years later. We could not have predicted everything OPD would become when we built the MVP in 2016, but we could make deliberate choices about boundaries, responsibilities, coupling, and how the platform interacted with the systems around it.
That foundation proved remarkably durable. New capabilities could be introduced progressively without repeatedly restructuring what was already there. Clear separation of concerns, focused responsibilities, and loosely coupled components made change easier to isolate and reduced the risk that extending one part of the platform would destabilize another.
The opposite compounds over time as well. Tightly coupled systems and poorly defined responsibilities make each successive change harder, often requiring increasing amounts of refactoring and retrofitting just to accommodate the next capability. OPD reinforced for me that sound architecture at the beginning is not about predicting the future. It is about creating a foundation that can absorb it.