Cannabis Dispensary Software Problems: The 7 That Cost Real Money, and How to Avoid Them
The most expensive failure in this category is a silent METRC sync gap. A batch of sales receipts fails during the after work rush, the retry queue gives up without telling anyone, and nobody finds out until a monthly true up three weeks later, by which point the fix is a package adjustment with a reason code and a story nobody remembers. Operators at this stage typically burn 15 to 25 hours a week of skilled labour on reconciliation per state, forever, and the variance that cannot be explained is the one that becomes a finding rather than a footnote.
Why does a dispensary software project turn into a full point of sale (POS) replacement?
The brief that arrives is almost always narrow. Somebody wants the METRC reconciliation to stop eating Sunday nights, or wants purchase limits enforced across all six stores. Twelve weeks later the scope has grown a register interface, a cash drawer driver, a label printer and an offline mode, because every one of those turned out to be attached to the thing that was actually asked for.
This is specific to cannabis retail because the point of sale is not a separate system from compliance. In grocery you can bolt an analytics layer onto a till and the till carries on. Here the receipt is the compliance event. The moment you decide your own inventory ledger is the source of truth, you have taken responsibility for what the register writes, and the register is now yours to build, support and keep running when the internet drops.
The fix is to decide the boundary in writing before any code exists, and to pick one of two shapes deliberately. Either you keep Dutchie, Flowhub, Treez or Cova at the counter and build a compliance layer that reads from it, reconciles against METRC and enforces limits through a companion screen at the door, or you replace the register outright and accept the hardware, offline and conflict resolution scope that comes with it. The builds that fail are the ones that started as the first shape and drifted into the second without anyone renegotiating budget or date.
What goes wrong when you migrate three years of sales history and package tags?
Migration off an incumbent point of sale is treated as a data export in the estimate and turns out to be a two to three week workstream in reality. The reason is the tag. A METRC package tag is the join key that lets a historical audit resolve against state records, and if it does not survive the move, every sale before cutover becomes an orphan you cannot defend.
Three things break in practice. Partially depleted deli jars have an on hand figure in the old system that nobody physically verified, so you inherit a variance on day one and it looks like the new system caused it. Loyalty balances and customer records carry duplicate identities, because online ordering created one person and the in store identity scan created another, and merging them after go live means merging their purchase histories too, which is exactly the data your daily limit ledger depends on. And open transfers sitting in an accepted but not received state at cutover belong to neither system.
The fix is unglamorous. Preserve the tag as the join key on every historical row. Run both systems in parallel with a daily diff and only cut over after the diff is clean for five straight days. Do a physical count of every open jar at cutover and record it as an adjustment with a reason before the new ledger opens, so the variance is dated and explained rather than discovered. Sequence stores one at a time. A bad cutover during a Friday rush is a revenue event, not a support ticket.
Why do the menu, loyalty and payment integrations break after launch?
They break because most of them are batch pushes rather than reads against a shared balance. Dutchie Ecommerce, Jane, Weedmaps and Leafly all pull inventory on a schedule. Between syncs your last two carts sell at the counter and three online orders come in for them. The pickup desk tells three customers no, and one of them writes the review. Alpine IQ or springbig fires a promotion against a segment built from yesterday's data. Aeropay, Dutchie Pay or CanPay settles on its own rhythm and the reconciliation lands somewhere else entirely.
The industry specific part is that nothing reserves anything. On hand is a number pushed outward every few minutes rather than a balance with holds against it, which is tolerable when one channel sells and untenable when four do. Add per channel pricing and the same product now has four prices maintained in four places.
The fix is one inventory service where on hand minus reserved equals available, reservations created at cart with a time to live and released on abandonment, and every channel reading the same available number from an event stream rather than a scheduled export. Per channel price and availability become configuration on one record. Then, and only then, add the intelligence that pays for itself: demand forecasting on flower trained on your own sales by batch, weekday and promotion history, which tells purchasing on Monday which lines go out of stock by Thursday and which flower is aging past the point where it sells at full price.
What happens when purchase limits are not enforced across every store?
A customer buys their daily limit at your first store at noon and buys again at your second store at six. Both carts were legal. The person was not. Your point of sale enforced the cart in front of it, because that is what a single store product is built to do, and your exposure is now a regulator asking how you enforce a per person per day rule when your systems only understand a per transaction rule.
It gets harder because limits are expressed in equivalency, not units. California adult use runs 28.5 grams of flower and 8 grams of concentrate. Illinois gives residents 30 grams of flower and 5 grams of concentrate and halves that for non residents. Colorado runs a one ounce flower equivalency where an edible eats the same bucket. Medical cards carry their own profile and their own expiry. A budtender cannot compute that mentally with a queue behind them.
The fix is a single rolling daily equivalency ledger shared by every location, keyed on an identity resolved at the door from the identity scan and stored as a hashed key rather than the raw document, never in a URL. The budtender sees remaining headroom in grams equivalent before the item enters the cart. The rules themselves live in a versioned policy table with effective dates so an operations lead changes a state on the day the rule changes rather than waiting for a deploy. Every check is logged, so when the state asks how you enforce, you show a ledger instead of a policy document.
Should you build custom or configure what you already own?
Configure, genuinely, if you run one to three stores in a single state, sell packaged product and prepackaged eighths, do no delivery and your revenue is under roughly six million dollars. Dutchie, Flowhub, Treez and Cova are real products built by people who understand this industry, and at that size the per store subscription is cheaper than one engineer. Most of the pain at that scale is process, not software. Anyone recommending a build at three stores is selling you something.
Before you commission anything, exhaust the configuration you already paid for. Turn on the exception reporting your vendor ships, even if it is weak. Standardise how deli jars are received and weighed, because a tare discipline problem does not become a software problem just because you write software. Consolidate to one traceability system per state rather than tolerating a second because one acquisition used it.
Build when the signals stack: five or more locations or a second state, more than one full time person on reconciliation, deli style weighing at volume, a delivery operation, or vertical integration where cultivation, manufacturing and retail all touch the same packages. The clearest signal is roadmap. You asked your vendor for cross store limit enforcement or a workable exception queue, they said it was on the roadmap, and it has been on the roadmap for four quarters. At that point you are paying a subscription to wait.
How do hidden costs get into the quote?
Not through dishonesty. Through categories that look like configuration and are actually integration. In Digital Heroes delivery experience the recurring ones in this category are consistent enough to list.
- A second traceability system. BioTrack in some markets and Leaf Data Systems in Washington are separate integrations, not a configuration flag on the METRC one.
- Offline mode at the register. You need it, because stores lose internet and cannot legally stop selling, and conflict resolution against a state ledger is genuinely difficult engineering rather than a caching decision.
- Hardware drivers. Label printers, scales and cash drawers each carry their own driver, their own firmware generation and their own failure behaviour.
- Each payment rail. Every processor is its own settlement file, status vocabulary and reconciliation job.
- Historical migration. Usually a two to three week workstream by itself, and almost always quoted as an afternoon.
The fix is to make the developer price these as named line items before kickoff rather than as a contingency. Ask which of them are in the number and which are excluded. A partner who has shipped this will volunteer the list without being asked, because they have been caught by it.
What separates a dispensary build that works from one that fails?
Four tests, and they separate the field quickly. Make them draw the data model on the call and ask how packages, items, batches, lots and stock keeping units relate, and where the tag lives. If they conflate a METRC package with a product record, they have never shipped this, and that single mistake costs a rebuild.
Ask what the system does when METRC returns an error at six on a Friday. The right answer involves idempotency keys per receipt, a durable outbox, exponential backoff and a human facing exception queue with the original cart, budtender, register and timestamp attached. The wrong answer is that they retry.
Ask where the rules live. Jurisdiction limits, tax ordering and rounding belong in versioned data your compliance lead can edit, with effective dates and a harness that replays last quarter's receipts against a proposed change so you can see the exposure before flipping it. If a rule change needs a sprint, you have bought a liability.
Then settle ownership in writing before kickoff. You should hold the repository, the cloud accounts and the right to bring in another firm at any point. Compliance systems outlive vendor relationships, and the whole reason you left the off the shelf tool was to stop waiting on somebody else's release schedule.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- The average documented online shopping cart abandonment rate is 70.22% (based on 50 studies), and large ecommerce sites can achieve a 35.26% increase in conversion rate through better checkout design. Source: Baymard Institute (2024) →
- Item-level RFID tagging enabled 99.9% order accuracy in the retail supply chain, versus a baseline where 69% of orders shipped between brands and retailers contained data errors - showing how RFID-at-POS integration reduces inventory inaccuracy. Source: Auburn University RFID Lab & GS1 US (2018) →
- SMS reminders that stated the specific cost of the appointment to the health system reduced missed appointments in Trial One, with the DNA (did-not-attend) rate falling from 11.1% (control) to 8.4% (specific-costs message) - an odds ratio of 0.74 (95% CI 0.61-0.89), i.e. roughly a 24-26% relative reduction - at no additional cost. (Trial Two replicated this at an 8.2% DNA rate.). Source: PLOS ONE (Hallsworth et al.) (2015) →
- Mordor Intelligence sizes the field service management market at USD 6.26 billion in 2026, forecasting USD 9.87 billion by 2031 at a 9.54% CAGR, confirming sustained double-digit-adjacent demand for FSM software. Source: Mordor Intelligence (2026) →
Shubham is a senior full stack developer working mainly on SaaS and web platform builds. Alongside writing code he reviews other people's, breaks large requirements into work that can be estimated, and makes the calls about what to build now and what to leave open. Useful reading for anyone planning a product build.
View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.
Frequently asked questions
Our METRC and point of sale numbers disagree every month. Where do we start?
Can we enforce daily purchase limits without replacing our point of sale?
How do we keep historical audits resolvable after migrating off Dutchie or Flowhub?
Why do online menu oversells keep happening even after we shorten the sync interval?
Do we need offline mode at the register, and what does it really cost?
How do multi jurisdiction taxes and discounts go wrong, and how do we test a change safely?
Where does AI genuinely help a dispensary, and where is it decoration?
What is the single question that exposes a developer who has not built for cannabis retail?
What happens to a custom POS when the internet goes down?
Can a custom POS beat Square's 2.6% plus 10 cents processing rate?
Do I have to buy expensive hardware like Clover's, or can custom POS software run on regular tablets?
Will a custom POS scale if we grow from 3 locations to 30?
Does it matter which tech stack the agency wants to use?
What does it cost to keep custom software running after launch?
Should I use a freelancer or an agency to build my POS system?
What should I prepare before contacting a software development agency?
What are the biggest mistakes first-time software buyers make?
Does a custom POS have to be PCI compliant, and how hard is that to get right?
How do I vet a development agency for a POS project specifically?
Who can build a custom POS software system?
Digital Heroes builds custom POS software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.
Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.
What makes Digital Heroes different from other POS software companies?
Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.
Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.
How can I check Digital Heroes is legitimate before getting in touch?
Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.
Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.