AWS Database Blog

From bottlenecks to breakthroughs: Dutchie’s database migration journey

Dutchie is the cannabis industry’s unified technology platform, helping retailers and brands sell more cannabis, faster, and at stronger margins. More than 6,500 cannabis businesses rely on Dutchie to run revenue critical operations that power over $22 billion in annual transaction volume and millions of ecommerce transactions each month. Its customers depend on the system’s reliability, especially during the industry’s highest volume period: 4/20 week, when dispensaries experience their equivalent of Black Friday-level traffic. As dispensaries rely on Dutchie’s infrastructure to handle everything from online ordering and inventory management to compliance tracking and point-of-sale operations, maintaining peak performance during this critical sales period is paramount.

Dutchie transformed its database infrastructure to meet these demanding workloads through a strategic database transformation initiative. Several critical objectives drove Dutchie’s migration from Azure SQL Managed Instance to Amazon Relational Database Service (Amazon RDS) for SQL Server. These included the need to scale infrastructure dynamically to handle unpredictable traffic spikes, optimize database performance for heavy concurrent user loads, reduce operational costs while maintaining reliability, and build a foundation for future growth and modernization. For dispensaries nationwide, system performance during this peak period directly impacts their ability to serve customers on one of their busiest sales weeks of the year.

In this post, we explore how Dutchie successfully navigated the challenges of migrating mission-critical workloads to Amazon RDS for SQL Server in preparation for 4/20 week in 2025.

Customer background

As Dutchie scaled to serve its rapidly expanding customer base, the database architecture needed to keep pace. Supporting real-time, high-volume transactions across a complex platform required a foundation built for speed, resilience, and consistent performance under pressure.

About the application

Dutchie delivers a unified platform designed specifically for cannabis operators, combining e-commerce, point-of-sale, and payments into a single connected experience. The system helps dispensaries simplify operations, drive revenue growth, and deliver modern, personalized retail experiences both in-store and online.

Dutchie addresses complex industry challenges including regulatory compliance, dynamic promotions, loyalty programs, and storefront customization. Dutchie’s architecture streamlines operations while maintaining fast, reliable transactions across the sales channels. Advanced capabilities such as real-time cart synchronization, curbside pickup capabilities, and comprehensive API integrations enable dispensaries to remain agile without compromising performance or compliance.

Technical requirements

Dutchie’s database migration strategy focused on four essential objectives: speed, safety, scalability, and consistent performance.

Fast, zero-data loss migration: The system demanded a zero-data loss migration with minimal downtime. The environment required that switchovers complete within a two-hour maintenance window. The migration process needed to maintain system availability throughout the transition while facilitating complete data integrity across operational components.

Improved storage performance without overprovisioning: Storage performance optimization without compute overprovisioning became essential to Dutchie’s new architecture. The solution required instance types with efficient core-to-memory ratios and storage with improved throughput and latency. This configuration aimed to balance compute capacity precisely with actual workload demands, removing resource over-allocation while facilitating optimal performance during peak periods. The architecture also needed to support dynamic scaling without any downtime to accommodate varying transaction volumes, particularly during high-traffic events, without compromising responsiveness or reliability.

Resilient backup and failover strategy: The system required engineering for business continuity through the strategic use of multi-AZ redundancy and warm failover infrastructure. Automated failover capabilities within the backend architecture needed to satisfy Dutchie’s recovery time objectives while maintaining the agility needed for long-term scalability.

Scalable architecture: The architecture needed to scale horizontally to support business growth without service disruption. The system would need to accommodate new dispensary onboarding and increased end-user traffic across multiple markets without redesigning the existing solution.

Peak-ready performance: The system had to remain fast and responsive during heavy-traffic events. The new architecture needed to provide sustained low-latency performance across checkout, search, and point-of-sale check-in, even during peak traffic.

These priorities guided Dutchie’s migration strategy and confirmed that RDS for SQL Server provided the flexibility, performance, and cost efficiency required for long-term scalability.

The challenge

Dutchie’s previous infrastructure on Azure SQL Managed Instance presented significant scaling challenges that impacted performance and reliability goals. The predefined configuration of Azure SQL Managed Instance SKUs, which bundled compute and storage together, proved inadequate for handling variable workload patterns. Dutchie’s platform had resource limits that constrained IOPS during sudden spikes in database activity, while inefficient core-to-memory ratios complicated right-sizing its instances for optimal cost performance. This directly impacted the real-time experience for dispensaries and their customers. The lack of support in Azure SQL Managed Instance for critical features like in-Memory OLTP metadata operations restricted its ability to optimize high-throughput workloads. These constraints required extensive engineering resources to develop application-level workarounds. The additional complexity not only slowed release velocity but also complicated scaling efforts. As transaction volumes grew and traffic patterns became more diverse, it became clear that Dutchie’s platform required a more flexible and robust database infrastructure to support its expanding business requirements.

Solution architecture

To meet its goals, Dutchie designed a system-wide backend architecture focused on flexibility, performance, and horizontal scalability. In Dutchie’s multi-cell deployment model, each production cell operates independently with its own namespace and dedicated WebAPI services. At the database level, both multi-AZ and read replicas are available to provide resiliency, isolate workloads, and scale horizontally without creating cross-service contention. It also enables fine-grained control over traffic and resource allocation during high-traffic periods.

These same principles guided its database architecture as well. Dutchie needed the ability to scale individual workloads independently, provide performance isolation, and respond quickly to spikes in demand. The database infrastructure mirrored this model, providing horizontal scalability and flexible load distribution that aligned with its overall backend strategy.

Dutchie’s platform supports both single-tenant and multi-tenant deployment configurations across environment tiers, including production, user acceptance testing (UAT), staging, and development. This architecture gives Dutchie the control and agility to meet the needs of enterprise customers and multi-store operators while maintaining consistent performance at scale.

Database infrastructure

Dutchie migrated its application databases to RDS for SQL Server to gain more control over scaling and operations.

“Amazon RDS for SQL Server gives us the flexibility to scale compute, storage, and replicas independently while maintaining high availability and performance. With x2iedn instances for our memory-intensive, write heavy workloads, we can easily handle traffic spikes and maintain a consistently reliable experience for our users. We have a variety of options to distribute load, which is easy to manage with RDS handling provisioning.”

– said Kendra Little, Staff Database Reliability Engineer at Dutchie.

For performance-critical workloads, the x2iedn instance family provides a high core-to-memory ratio and local NVMe storage for tempdb, significantly improving throughput and responsiveness without excessive overprovisioning.

Migration strategy

Dutchie approached the migration in carefully planned phases with a strong focus on automation, safety, and minimizing customer impact. Key steps included:

  • Enabling Read Committed Snapshot Isolation (RCSI): RCSI in SQL Server is a database option that modifies the behavior of the default READ COMMITTED isolation level. It uses row versioning to provide a more optimistic concurrency model, reducing blocking between readers and writers. This helped prevent blocking under high-traffic workloads and improved post-migration data synchronization with downstream data stores. It also modernized how Dutchie’s application handles isolation and locking, making the codebase more adaptable to future data stores like Amazon Aurora PostgreSQL-Compatible Edition that rely on multi-version concurrency control (MVCC).
  • Automating the backup and restore process: Dutchie built and refined Python scripts using the AWS Command Line Interface (AWS CLI) to fully automate the migration workflow. These scripts validated critical database settings, provided consistent configuration across environments, and allowed it to rehearse and verify the process on full-sized datasets.
  • Measuring performance before and after migration: Dutchie established detailed monitoring baselines prior to cutover and compared them to post-migration metrics across key workloads to validate performance improvements.
  • Improving deployment automation: Dutchie moved database code deployments from Azure DevOps to GitHub Actions, which provided a faster and more reliable release pipeline.

Results and benefits

Migrating to RDS for SQL Server unlocked performance improvements, reduced operational overhead, and gave Dutchie greater flexibility in how it manages and scales its system.

Performance improvements

After the migration, Dutchie saw measurable gains in every area that mattered. It achieved significant performance improvements across its database operations. The company’s I/O latency decreased, which improved performance for its data-heavy operations. Its cache efficiency improved, allowing for more data pages to remain in memory for longer periods of time. Through the implementation of RCSI, Dutchie reduced blocking across its high-concurrency workloads. The company streamlined its database deployment process by using GitHub Actions, resulting in faster and more reliable deployments.

Dutchie refined its scaling capabilities to enable independent adjustment of IOPS and compute resources. This improved its scaling flexibility, allowing the company to respond effectively to performance demands during peak periods while avoiding overprovisioning. This led to improved operational efficiency and cost management.

“Migrating from Azure SQL Managed Instance to Amazon RDS for SQL Server gave us the precise control and scalability we needed for our most demanding workloads. During 4/20 week, which brings Black Friday-level traffic to cannabis dispensaries, our system held strong during the highest sustained traffic week in our history. Our system stayed fast and responsive throughout the event. The flexibility and reliability of RDS for SQL Server proved essential in supporting thousands of dispensaries during their busiest time of the year,”

– says Little.

Business impact

Distributors and retailers saw smoother check-ins, faster cart updates, and quicker checkouts compared to the pre-migration experience. Dutchie’s reliability improved across the board, especially for operations involving large data sets or batch changes.

Operationally, Dutchie can now segment workloads more effectively, reducing risk during deployments and analytics jobs. RDS for SQL Server also allows it to rename instances, a feature that simplifies maintenance and makes it simpler to manage environments during incidents or changes.

Together with more flexible scaling options, these improvements give Dutchie the operational agility needed to support an evolving and growing industry.

Best practices and lessons learned

A successful migration starts with a strong foundation: reliable data, clear recovery objectives, and repeatable processes.

The migration highlighted several key insights for Dutchie. Establishing a baseline for performance early and conducting thorough benchmarking, using tools like HammerDB, proved essential for measuring progress and validating optimizations. The team also found it critical to map recovery point objectives (RPO) and recovery time objectives (RTO) across potential failure scenarios and used those targets to guide architectural decisions. Selecting a migration method that made sure no data was left behind, while optimizing for simplicity, resilience, and clarity in tooling, helped streamline its execution.

For Dutchie, automation played a central role in the migration, and the customer completed multiple rehearsals using production-sized datasets to help the team migrate with confidence. When using backup and restore, it was important for Dutchie to tune its workloads for maximum throughput to reduce downtime and enhance reliability during cutover. Finally, Dutchie worked closely with AWS to right-size instances effectively, which helped achieve the right balance when optimizing performance and cost.

These best practices helped Dutchie reduce risk, move faster, and focus engineering time where it mattered most.

Conclusion

Migrating to Amazon RDS for SQL Server helped Dutchie break through the scaling and performance limitations it faced on Azure SQL Managed Instance. By investing in automation, benchmarking, and architectural flexibility, it reduced operational overhead, improved the customer experience, and built a foundation for sustainable growth.

This migration was a strategic investment in the infrastructure that powers its system. As Dutchie continues to serve dispensaries operating in a fast-moving, highly regulated industry, delivering reliable performance and the ability to scale quickly is foundational to how it supports its customers and helps them grow.

Businesses facing similar database-scaling challenges during peak periods can look to Dutchie’s experience for guidance. It is worth mentioning that customers looking to migrate should run a proof of concept to help provide a successful implementation.


About the authors

Special thanks to Rachel Stearns, for her valuable contributions to this blog post.

Kendra Little

Kendra Little

Kendra is a Staff Database Reliability Engineer at Dutchie, a Microsoft Certified Master in SQL Server, and a seasoned speaker with deep experience in consulting, DevOps, and performance tuning. Kendra enjoys partnering with developers to troubleshoot tough database problems, build smarter automation, and keep systems stable and snappy.

Mehul Y. Shah

Mehul Y. Shah

Mehul is the director leading the engineering and product organizations for Amazon RDS for SQL Server, Amazon RDS for Oracle, Amazon RDS for Db2, and Oracle Database@AWS.

Colleen Betik

Colleen Betik

Colleen is a Product Marketing Manager at AWS. She has been working in product marketing for managed databases for the last six years. In her role, she focuses on the messaging, positioning, and content strategy, and capturing customer success stories. Colleen received her B.B.A. in Marketing from Southern Methodist University, M.S. in Global Commerce from the University of Virginia, and MSc in Global Strategic Management from ESADE.

Sudarshan Roy

Sudarshan Roy

Sudarshan is a Senior Database Specialist Cloud Solution Architect with World Wide AWS Database Services Organization (WWSO). He has led large scale Database Migration & Modernization engagements for Enterprise Customers and his passionate of solving complex migration challenges while moving database workload to AWS Cloud.

Saroj Kumar Das

Saroj Kumar Das

Saroj is a Senior Technical Account Manager at AWS specializing in enterprise retail solutions. He focuses on helping organizations achieve business success through cloud solution design and deployment, system resiliency enhancement, infrastructure optimization, and application scaling. With deep expertise in database technologies, he serves as a subject matter expert in SQL Server implementations and enterprise-scale deployments.

Sudhir Amin

Sudhir Amin

Sudhir is a Sr. Solutions Architect at Amazon Web Services. In his role based out of New York, he provides architectural guidance and technical assistance to enterprise customers across different industry verticals, accelerating their cloud adoption. He is a big fan of snooker, combat sports such as boxing and UFC, and loves traveling to countries with rich wildlife reserves where he gets to see world’s most majestic animals up close.