← All case studies

Fulfillment Architecture & Commerce Workflow Design · Life Sciences / Consumer Testing

Activation Codes as a Fulfillment Architecture

Industry

Life Sciences / Consumer Testing

Engagement type

Fulfillment Architecture & Commerce Workflow Design

Methodology

6-step approach

Capabilities

Workflow AutomationPlatform ModernizationSystems IntegrationArchitecture Leadership

A product-based testing platform had built its purchase flow around a tightly coupled sequence: account creation, entity registration, then payment. As the business sought to expand its commerce channels and support more flexible purchasing scenarios, this sequence became a structural constraint. Protabyte redesigned the fulfillment model by introducing activation codes as an intermediate layer between purchase and final assignment. The result was not a checkout feature. It was an architectural separation that gave the business the flexibility to support new purchase scenarios, new channels, and new customer behaviors without rebuilding its backend each time.

The challenge

The platform had been built around a clear internal assumption: by the time a purchase was complete, the system would know exactly who was buying, what entity the test would be associated with, and what account the order belonged to. That assumption was reasonable when the platform served a narrow, well-understood customer journey. But as the business grew, the assumption became a constraint.

Customers who wanted to purchase a test as a gift had no clean path through a flow that required them to register an entity they did not own. Customers who wanted to buy in advance and assign later encountered a checkout that had no concept of deferred fulfillment. Partners and resellers who needed to distribute purchased tests across multiple end users faced a model that assumed a one-to-one relationship between buyer and recipient at the moment of transaction.

Channel expansion compounded the problem. The checkout flow was tightly coupled to the platform’s internal onboarding sequence. Adding Stripe Checkout or Shopify as purchase surfaces was not a configuration task. It required changes to a flow that assumed mid-session account and entity creation before payment could be initiated. Every new channel was a negotiation with the same underlying constraint.

The deeper issue was that the system had no concept of a purchase that was complete but not yet assigned. Fulfillment and assignment were the same event. That conflation had worked in the original context, but it was limiting everything that came after it.

The approach

Protabyte approached this as a fulfillment architecture problem, not a checkout improvement. The goal was to introduce a durable abstraction between the act of purchasing and the act of assigning, one that the platform could rely on across channels, use cases, and future scenarios without requiring structural changes each time.

The mechanism introduced was an activation code. Not a discount mechanism or a promotional tool, but a first-class fulfillment object: a record representing a purchased entitlement that had been paid for and was valid, but had not yet been assigned to a specific entity or end user. When a purchase was completed, the system issued an activation code. That code held the purchased entitlement in a portable, assignable state until the buyer, recipient, or platform operator was ready to complete the downstream association.

This required changes at several layers. The backend order and payment handling was refactored to treat a purchase as complete at the point of payment, independent of whether downstream entity associations existed. The account creation and mapping logic was redesigned so that account linkage could occur at or after purchase without blocking the transaction. Activation code generation, storage, validation, and redemption became defined operations in the fulfillment layer, with consistent behavior regardless of how the purchase originated.

With that foundation in place, channel expansion became a significantly simpler problem. Stripe Checkout and Shopify could be integrated as purchase surfaces without requiring custom fulfillment logic for each. The backend issued activation codes through both channels in the same way it issued them through the platform’s native checkout. The fulfillment model was channel-agnostic by design.

The approach also addressed the gifting and delayed-assignment scenarios directly. A buyer purchasing a test for someone else could complete the transaction without knowing that person’s account details. A buyer purchasing in advance could hold an unassigned code until they were ready to use it. The downstream assignment step was separated from the purchase event and could occur in whatever context made sense for the customer.

01Fulfillment Layer Design02Purchase and Assignment Decoupling03Activation Code System Implementation04Backend Order and Entitlement Refactoring05Multi-Channel Commerce Support06Assignment Workflow Design
01

Fulfillment Layer Design

Introduced activation codes as a first-class fulfillment object, creating a defined intermediate state between purchase completion and downstream entity assignment.

02

Purchase and Assignment Decoupling

Redesigned the fulfillment sequence so that a purchase could be complete and valid without requiring entity registration or account creation before payment.

03

Activation Code System Implementation

Built generation, storage, validation, and redemption as defined operations within the fulfillment layer, with consistent behavior across all purchase channels.

04

Backend Order and Entitlement Refactoring

Refactored backend order handling and entitlement logic to support the new fulfillment model without compromising the integrity of existing order, payment, and account association requirements.

05

Multi-Channel Commerce Support

Designed the fulfillment architecture to be channel-agnostic, enabling consistent activation code issuance and redemption across native checkout, Stripe, and Shopify without channel-specific fulfillment logic.

06

Assignment Workflow Design

Designed the downstream assignment workflow to support multiple scenarios: self-assignment, gifted-code redemption, delayed assignment, and partner-managed distribution.

Why it matters

Most commerce systems are built with fulfillment tightly coupled to purchase. That coupling is rarely a deliberate design choice. It is usually the natural result of building the simplest thing that works for the original use case: one buyer, one entity, one test, one account. The internal data model gets embedded into the purchase flow, and the purchase flow becomes the only path the system understands. The problem surfaces when the business tries to grow beyond that original scenario. Gifting requires a buyer to purchase something they will not use themselves. Delayed assignment requires a completed purchase to exist before its end use is known. Partner and reseller models require purchased entitlements to be distributed across multiple accounts that may not exist at the time of sale. None of these are unusual business requirements. But they are all structurally incompatible with a fulfillment model that assumes everything is known at checkout. Introducing an intermediate fulfillment layer changes that. When a purchase produces a portable, assignable entitlement rather than immediately locking into a specific account and entity, the business gains the ability to move through commerce scenarios it could not previously support. The fulfillment model becomes a capability rather than a constraint. This is not a checkout problem or a UX problem. It is an architectural problem, and it requires an architectural answer. Organizations that address it at that level tend to find that the flexibility they gain extends well beyond the immediate use cases that prompted the work.

Technologies & domains

Fulfillment ArchitectureEntitlement SystemsCommerce Workflow DesignActivation Code SystemsMulti-Channel CommerceBackend ModernizationPlatform ArchitecturePythonDjango

Outcome

The introduction of an intermediate fulfillment layer changed the structural relationship between purchase and downstream workflow requirements. Purchases could be completed without pre-existing entity records. Tests could be assigned after the fact by the buyer or by the recipient. Gifting became a natural use case rather than an edge case requiring workarounds. Channel compatibility improved substantially. With fulfillment decoupled from the native checkout sequence, Stripe Checkout and Shopify could be supported without requiring each channel to replicate or adapt the platform’s internal onboarding logic. The backend handled activation code issuance consistently regardless of purchase origin. The broader architectural outcome was a platform better equipped to evolve. New purchase scenarios, new channels, and new distribution models no longer required renegotiating the relationship between payment and fulfillment. That relationship had been made explicit, defined, and manageable.

Key results

6 documented
  • Activation code fulfillment layer introduced as a durable architectural abstraction between purchase and assignment
  • Gifting and delayed-assignment purchase scenarios supported without workarounds or flow exceptions
  • Channel-agnostic fulfillment design enabled consistent behavior across native checkout, Stripe, and Shopify
  • Backend order and entitlement logic preserved and extended across all purchase paths
  • Platform better positioned to support new channels and distribution models without structural rework
  • Assignment workflow designed to accommodate buyer-assigned, recipient-assigned, and partner-managed scenarios

Capabilities applied

  • Workflow Automation
  • Platform Modernization
  • Systems Integration
  • Architecture Leadership
Start a conversation

Related engagements

Life Sciences / Consumer Testing

Decoupling Purchase From Onboarding in a Commerce-Driven Testing Platform

A product-based testing platform required customers to create an account and register an entity before completing a purchase. The model reflected internal platform assumptions that had accumulated over time, but it created meaningful checkout friction, limited the organizations commerce channels, and constrained customers who wanted to buy quickly, purchase as a gift, or assign a test after the fact. Protabyte redesigned the purchase and fulfillment architecture around an activation-code model that allowed customers to buy first and assign later, expanding channel support and contributing to a 20 percent increase in sales in the first year.

Read case study →

E-Commerce / Operations

E-Commerce to Operations Integration Architecture

We designed and implemented an integration architecture connecting a high-volume e-commerce platform to downstream operations, fulfillment, and financial systems — replacing brittle point-to-point connections with a reliable, observable event-driven backbone that could support the company's growth without constant manual intervention.

Read case study →

Technology / Growth-Stage Platform

From Product Code to Platform Architecture

As a growing platform expanded its offering, its engineering architecture had not kept pace. What started as a focused set of product-specific systems had, over time, become a collection of parallel implementations — each built to serve an individual offering, and each accumulating its own services, workflows, data models, and operational overhead. Protabyte led an architecture engagement focused on identifying the shared domain model underneath the product-specific layer, designing a consolidation strategy, and establishing the technical direction that would allow the platform to scale without continuing to multiply its complexity.

Read case study →

Work with Protabyte

Ready to tackle a similar challenge?

Every engagement starts with a focused conversation. No obligation, no sales pitch. Just an honest assessment of where we can help.

Discuss a fulfillment architecture engagement