5 years of software development in the world’s largest marijuana company, part III

Roman Kliotzkin
6 min readJan 16, 2021

Previously: Part 1, Part 2

2018: Legalization High

Canada legalized the possession and consumption of recreational marijuana federally in 2017, but pushed down the rules of sale to the provinces. This resulted in every province having a different set of rules, allowed buyers and retailers, which was in turn a headache for every licensed producer. To complete the chaos, provinces were finalizing their legislation in the run up to October 17, 2018 — the date when sales were to become legal.

In August, Constellation Brands announced a 4.2B investment, but really a purchase, of Canopy. This only added to the euphoria of the atmosphere, though added some tension for me — I was wondering if there were going to be more IT standards imposed on our work.

The election of Doug Ford and the Conservative party in Ontario led to chaos as the assumed scheme of Ontario Cannabis Store (OCS)-only retail stores was thrown out and switched to OCS being the only allowed online retailer, with a lottery license for retail stores, that didn’t materialized in time for legalization. We scrambled to refactor our apps yet again.

It was clear that the ERP was not going to be ready by the time we needed to ship our first pallet of recreational marijuana to the OCS, so the task fell to our team. Whether it’s good or not, I think if there is one thing I still excel at, it’s diving head-first into what I think are company-saving projects and motivating everyone around me to do the same. We re-purposed our catalogue app by bolting on mini-ERP functionality that was able to track bulk finished inventory (jars), pack it into pallets, print the labels that OCS wanted, and mark it as shipped. While that sentence sounds simple, it really exposed how complex these things can get, and our app only had to work for a couple of months.

The first shipment of recreational marijuana (1000 or so of 5g and 15g jars) was sent off to the OCS on a Brinks truck with armed guards. As far as I know, it was the first in Canada (and therefore the world), and our re-purposed mini-ERP made it possible, at least digitally. Could they have done it using Excel and a hand-made label? Probably, but then nobody knew how long we were going to be running like this so it was also a proof of capability for our software and team.

After many late nights, meetings, and wringing of hands, the ERP was deemed ready to launch in time for the first retail sale. On October 18, 2018, the CEO, Bruce Linton, flew to St Johns to make the sale himself at midnight and the whole company stayed up until 3am to watch. Our team saw see the order flow from the Shopify POS through our middleware, to the database and the ERP successfully (more or less). Recreational marijuana was fully legal in Canada.

first sale in St Johns

2019: The Adults Are In Charge

As the high of the recreational launch wore off, the reality had set in of market expectations not matching reality. The CEO was fired, which sent shockwaves through the industry. The new CEO, a former CFO of Constellation, set about downsizing departments, although IT was thankfully spared.

The message was clear that the name of the game is cutting costs and standardizing operations, not new development. We turned our attention to a project that tracked plant inventory and another for financial reconciliation. Plants being the core company product, this was something that occupied a large chunk of everyone’s mindshare; but tracking plant inventory in accordance to Health Canada regulation, ICFR, and GMP standards was becoming mind-numbing.

Piece by piece, the fun and quick components of our work changed into codified process and meetings. The next big project for the company was the implementation and launch of SAP and the opening of the US hemp market.

Consumer Packaged Goods

The focus of all of IT shifted to the launch of SAP. I learned what SAP was and why it was loved and hated at the same time. The attention from the top was mostly on the interface we were building to SAP and it was clear that any app development was going to take a back seat to getting these massive 3rd party applications working together.

I was sent to SAP TechEd in Vegas to try and understand how to work with SAP, and discovered a parallel ecosystem of software, where businesses built their whole operations around this massive, expensive product. What role does “normal” software development play in this ecosystem? It’s limited to manipulating the objects that SAP provides using their language, playing in the sandbox. I tried learning it, but I never got past the poorly written introductions, as my motivation to do so was non-existent. There are good reasons why SAP is so limited for developers; it’s designed to contain the developer in the sandbox and keeping the core functionality intact. When you add something new, the appropriate SAP thing to do is to try your hardest to twist your new process into SAP functionality rather than changing anything in the application.

2020: Departure

I knew I wanted to leave as far back as 2019, for several reasons. The culture of co-operation and camaraderie that permeated the hot startup of 2015 gave way to silos, processes, and long meetings. I suppose this is not an uncommon story for an enterprise organization, though I would guess that momentum could have been maintained if the cannabis market met expectations.

In any case, the bigger issue for me was my future at Canopy. It was clear that the software development team and function was not going to grow any time soon. It was also clear that if I wanted to learn new things or do something else, I would be moving in the direction of IT management — comparing vendors, supervising implementation of 3rd party software, writing policy and generally hating my life. Maybe it’s the lack of control that comes with deploying someone else’s product rather developing something new, but I knew it wasn’t something I was going to be happy with, so the job search started in earnest.

10 things I Learned

Canopy was a pivotal part in my career and I was forced to learn a ton of new things — and that’s what anyone can expect out of a good tenure, right? The

  1. For internal software apps, “just barely good enough” is usually sufficient to deploy — this includes your app or even a 3rd party app. Users expect their software to be terrible and training frequently involves learning all the ways to work around the app’s bad UX. Rising just above that bar will earn praise.
  2. I learned the Shopify API inside out and copied their API design across most apps we built, because of how nice it is to use (most of the time).
  3. Django, Flask, Postgres, Docker, AWS, SQL are all words I can confidently throw on my resume.
  4. Is Django/SQL stack a good choice for business CRUD apps? I still think so, but I would have liked to try something else.
  5. Remote work is surprisingly easy but it takes a bit to get used to.
  6. People will leave when there is no focus to the mission (we, uh, make software for the business?). They will state different reasons for leaving.
  7. Organizations where the software is not the product will treat software as a cost, and will try to minimize any related expenses — that includes you, as a software developer.
  8. Internal processes of most companies are held together by spreadsheets and duct tape. Trying to automate or optimize them will be met with resistance.
  9. I don’t want to go through a merger of IT systems and data ever again.
  10. Managing more than 12 people is exhausting. Teams need to be split once they get larger than 6–7, with leads being trained or hired well before the fact.

--

--