Merit · Engineering onboarding · Internal

How Merit moves an order

Two teams run the live system. Aditya's Marketplace team builds one shop per client. Akshay's Platform Services team builds the machines every shop calls. A third stack, the E-Commerce Solution, is being built to absorb both. This page is diagrams: where each part sits, how work moves between them, and exactly which behaviour the new stack still cannot do.

Owner: Brian Arfi Faridhi, Product Director · For engineers joining Merit commerce

00Read this first

How much of this is documented fact, and how much is reconstruction.

The architecture wiki is mostly empty

Confluence carries a page named "Application Architecture" for Marketplaces, MGC, Peoppl, RewardsBy, GiftcardsBy, GiftiGlobal, LMS, Content API, Communication Service and Identity Service. Nearly all are unfilled C4 templates. Several say "To be Filled". The Points Exchange one says "lorem ipsum". The Email Service page has an empty body. An empty page is not a simple system.

So these diagrams were rebuilt from the places that do carry current truth: the Platform Sprint Backlog Review pages, the Saudia storefront RFCs, live Jira ticket bodies, the infrastructure and database pages, and Merit's product documentation. No source code was read. Where a diagram shows a dashed arrow, that path is agreed but not built.

Amber

Marketplace

Aditya Sanka. The shops. Jira MP.

Violet

Platform Services

Akshay Chennupati. The machines. Jira MPS.

Green

E-Commerce Solution

Muneeb Meer leads engineering, Khawar Rasheed is PM, built with Tintash. The replacement stack, and the owner of OMS. Jira MSP and STOR.

The sentence that reorganises everything

Aditya's stack and Akshay's stack are both the Old World. They are two halves of one live production system, not two competing designs. The New World is a third stack beside them.

What the migration actually is

Al Fursan is moving to a different platform, not moving its code. Only data migrates: product data does not, sellers re-upload their catalogue into PIM through the Seller Portal instead. The migration is done when Al Fursan runs entirely on the E-Commerce Solution and the legacy system for Al Fursan is decommissioned.

Only Al Fursan moves. Agora, Taino Marketplace, DreamPoints and the Legacy Shops stay on the Old World.

The rollout is a canary, not a shadow run. Real members transact on the new system in growing cohorts: Merit internal first, then a closed user group, then 5%, 25%, 50% and 100% of members. Each cohort's output is compared against legacy for parity, a member stays on whichever side they were first assigned to, and each cohort has its own kill switch back to legacy. Legacy stays warm as a fallback throughout.

The approach is develop the gaps: audit what legacy does, match it against what the New World already has, build whatever gap is missing, then take on new requirements. PIM replaces the Online Catalogue, and a Seller Portal admin role becomes the hub for operating physical orders.

MGC, the legacy commerce and shipping engine, is replaced for Al Fursan by the Fulfillment Service and TMS on OTO, except for gift cards: MGC stays as a supplier the Fulfillment Service calls. Point Exchange and Payout Service also stay on the Old World; the New World calls them rather than rebuilding them. It is not the same as retiring Platform Services. DPR and Communication stay live and in active development, with no deprecation planned. Do not read this page as "the violet band disappears".

01The map

Every part, and the twelve places work crosses from one part to another. Each numbered badge on the diagram is a seam listed underneath.

MemberBank or airline customerClient systemPoints balance, SSO, LMSMerit OpsCatalog and order statusby handSupplierAleph, Jasani,GoldenScent, STCPartner programmePoints exchangecounterpartiesSellerSelf-serve on the SellerPortalCarrierOTO reaches 200+ GCCcarriersOld World, band 1 · the shops · Adityasaudia-marketplaceAl Fursan, moving to New Worldagorainternal marketplace, stays OldWorldtaino-marketplacestays Old Worlddreampoints-marketplacestays Old Worldlegacy shopsReact and RoR, stays Old WorldShared plumbing · used by both bandsKeycloak and SSO Hubidentity at auth timeTenant Context Servicetenant details, MGC credentialsAPI Gateway and ALBin front of webhooksOld World, band 2 · the machines · AkshayMGCorders, inventory, float, POSMerchandise Servicecatalog and supplier integrationsLegacy Catalog and OCbrands, variants, supplier productsPoints Exchangepoints to partner currenciesPayout ServicePayPal, Revolut, THUNESCommunicationSMS, email, WhatsApp plannedMobile Topupsupplier DTOneDPR and Experiencepay by points in storeNew World · the E-Commerce Solution · Khawar and TintashStorefront Admin Portaltenant shops, board STORE-commerce Coreoffers, inventory, channelsPIMcanonical productOMSorder state machineSeller Portalsupply side, self serveFulfillment Serviceroutes by product type: OTO, MGC, STCTMS on OTOcarrier aggregationB2C Super Appconsumer front endThe reporting edgePer-service ETL jobsPII columns excludedDatalakeS3, Athena, GlueDashboardsdashboards.meritincentives.comPayment gatewaysper client, card rail129561034781112

Twelve seams, numbered. Band 1 is one shop per client. Band 2 is the services every shop calls. The New World stack is a third band being built to absorb both.

1Member arrives. SSO redirect out of the client’s own app into the storefront.
2Points, read and burn. The shop calls the client’s system for the balance, then again to debit. Merit never holds the points.
3Tenant token. The shop logs in to the Tenant Context Service and caches the token, refreshing on expiry.
4Tenant credentials. The same service returns tenant details and the MGC credentials for that tenant.
5Suppliers. MGC and the Merchandise Service hold every supplier integration. Each one is wired separately.
6Partner programmes. Points Exchange converts Merit points into a partner currency and back.
7Order placement. The shop forwards the order to MGC, which is why MGC is the source of truth for sales and inventory.
8Catalog and stock sync. The live bridge between the two stacks. Signed webhooks outward, a synchronous decrement inward.
9Ops, by hand. Ops copies catalog data into each client panel, updates merchandise order statuses, and places orders for the clients that have no storefront. Recorded on the wiki in 2023 and never revised, so verify the volumes before quoting them.
10Sellers, self serve. The Seller Portal is the New World supply side. One seller serves every tenant at once.
11Legacy as a supplier. The Fulfillment Service calls MGC, the legacy Merchandise Service or STC by product type, normalises each provider’s status, and pushes it back to OMS. The dependency is inverted.
12Reporting. Each service ships its tables to the datalake through its own ETL job. Dashboards never read production.
The shape to hold in your head

Old World is two bands: one shop per client on top, one shared set of services underneath. New World is a single band where the shop, the catalog, the orders and the supply are parts of the same product. Migration is not rewriting a box. It is collapsing two bands into one.

02The words that mean two things

This costs new joiners about two weeks. Read it once now.

WordMeaning AMeaning BHow to tell
StorefrontA running client shop: Saudia, Nielsen, Kantar, MCM. Aditya.The Storefront Admin Portal product, board STOR. E-Commerce Solution.Names a client, meaning A. Says admin portal, template or tenant, meaning B.
PlatformAkshay's team and its services.Loosely "the whole system", in exec conversation.Platform is an Old World word. The new stack is called the E-Commerce Solution.
OMSPlatform's team page lists "order lifecycle infrastructure" among its components.The OMS product, built by Muneeb Meer's team in the E-Commerce Solution.Meaning B wins, and it is not Akshay's. OMS core and the state machine belong to Muneeb's team on the E-Commerce Solution side. Platform appears only as a consuming dependency, such as the order-status webhook into B2C. The Platform team page was never corrected and still misleads.
CatalogLegacy Catalog and the Online Catalogue. Akshay's.PIM plus E-commerce Core.OC and MGC are always Old World words.
Product versus Offer
Product is what an item is: iPhone 15, 128GB, black. It lives in PIM. Offer is one seller's listing of it: their price, their stock. It lives in E-commerce Core. Two sellers, one product, two offers. The Buy Box picks which offer the shopper sees.
Seller on record
Anything from the Online Catalogue arrives with no seller attached, so Merit is recorded as the seller and the real one is resolved afterwards. That is process P-04.

03Who owns what

Two Jira instances, four boards.

TeamLeadBoardOwns
MarketplaceAditya SankaMP, merit-incentivesSaudia and Al Fursan, Nielsen, Kantar, Mastercard, Agora, demo marketplaces, checkout geocoding
Platform ServicesAkshay ChennupatiMPS, merit-incentivesMGC, Merchandise Service, Online Catalogue, Points Exchange, Payout, Communication, DPR, Experience, SPL AWB
E-commerce Core and Seller PortalMuneeb Meer, engineering. Khawar Rasheed, PMMSP, tintashPIM, E-commerce Core, OMS, Seller Portal, MGC legacy sync
Storefront productKhawar Rasheed, PMSTOR, tintashStorefront Admin Portal, template, tenant provisioning, basic CMS

Scale check. The legacy boards MP and MPS carry roughly twenty times the issue history of the new-world boards MSP and STOR. That ratio is the honest measure of how much behaviour lives in the Old World and was never written down anywhere except a closed ticket.

Marketplace, under Aditya

Arpan Kundu on Al Fursan. Raneen on UX. Sahil Kumar, Mohammed Ehtisham, Nadeem Siddique in the engine pool. Manoj Dhiman on infrastructure.

Platform Services, under Akshay

Tahsin Ali facilitating the OC legacy team. Prateek Srivastava on finance and reconciliation. Rohit on chatbot and automatic supply switching. Dmitriy on fulfilment APIs and AWB. Marthino Yuda on notifications.

04The processes

Six processes carry almost everything. Each has its own diagram below.

IdProcessWhat movesWhose
P-01Order in the Old WorldMember buys, points burn at the client, MGC fulfilsMarketplace and Platform
P-02Order in the New WorldSame purchase through Core, OMS and the Fulfillment ServiceE-Commerce Solution
P-03Catalog and stock syncSeller Portal to Core to Online Catalogue to MGC, plus the synchronous decrementBoth, this is the bridge
P-04Seller on recordWho the seller really was, resolved after the orderBoth
P-05Points: burn, exchange, earn, payoutEvery path money and points takePlatform
P-06The Al Fursan migrationCanary cohorts, parity comparison, kill switchAll three teams

P-01An order in the Old World

The shop orchestrates. It holds neither the points nor the inventory.

Memberin the client appStorefrontsaudia-marketplaceTenant Context Svcshared plumbingClient systempoints live hereMGCorders and inventorySupplierexternalCommunicationSMS and emailStep 1 · entry and identitySSO redirect from the client applogin, get access tokencached in memory, refreshed on expirytenant details and MGC credentialsStep 2 · browseget point balancebalancerender the catalogproducts were copied in per client by OpsStep 3 · orderplace the orderdebit N pointsor a card payment through the client gatewaydebit confirmedforward the ordercheck the client floatfloat can go negative, race condition still openmint the card or reserve the stockone bespoke integration per supplier, no generic adaptercode or fulfilment referenceorder detailsupdate the order statusnotify the memberMany clients never touch a storefront: Opsplaces their orders by CSV upload in the MGCdashboard, and others call the MGC order APIdirectly. The split recorded on the wiki,about 60 by Ops and 25 by API, dates from2023. Treat it as a shape, not a currentnumber.

Process P-01. Points live at the client, inventory and money live at MGC, and the shop orchestrates while holding neither.

P-02The same order in the New World

Read step 3 against step 3 of P-01. That is the migration in one comparison.

ShopperStorefront or B2Cnew world front endE-commerce Corethe only doorOMSorder state machineFulfillment Servicestandalone, not part of OMSSeller Portal and OTOseller-sourced goodsLegacy suppliersMGC, Merchandise Service, STCStep 1 · browseopen the shoplist offers for this sales channelchannel JWT, reads scoped to salesChannelIdoffers with price and stockproduct facts come from PIM, behind CoreStep 2 · checkoutcheckoutreserve inventoryone offer maps to one inventory recordtarget zero oversell, 500 reservations a secondcreate the orderStep 3 · fulfilment, split by where the item came fromfulfil these itemsseller-sourced itemSeller Portal seller, carrier leg through OTOgift card, catalogue or STC itemrouted by product type: MGC for gift cards, legacy Merchandise Service or STC otherwisefulfilment referencestate changeadvance the state machineThe inversion that defines the migration: thenew stack owns catalog, inventory and orders,and calls the old stack as a supplier insteadof depending on it as a platform.

Process P-02. Same purchase, new stack. Compare step 3 with P-01 step 3.

P-03Catalog and stock sync, the live bridge

Three routes. Two run today, one is agreed and not built.

SellerSeller Portalnew worldE-commerce Corenew worldOnline CataloguePlatform, AkshayMGCPlatform, AkshayMerchandise ServicePlatform, AkshayRoute A · price and stock outward, asynchronousupdate price or stockwrite the offerwrite an outbox row, sign itHMAC-SHA256, rotatable secret, filter by event type and supplierinventory.updated and price.updatedoutbox pattern, 6 attempts over about an hour, at least oncededup on event_id, highest version winsthe existing OC to MGC syncalready automated for nine months, which is why this route was chosenRoute B · inventory decrement inward, synchronousPOST /v1/inventory/decrementcalled during order placement, strictly idempotentdecrement appliedThis is the only edge that must staysynchronous. Making it asynchronous meansoverselling.Route C · a new variant on an existing product. Agreed, not built.add a variant, Ops approves in PIMproduct updated eventOC already does this internally, the ask is to replicate it

Process P-03. The live bridge between the two stacks. Scope is physical merchandise only. Gift cards, digital codes and vouchers are excluded.

The original plan was a direct bridge from the Seller Portal to legacy MGC. That was dropped in favour of syncing to the Online Catalogue instead, because OC already had an automated sync into MGC that had been running for months. The method changed at the same time, from pull-based polling to bi-directional webhook push.

Seller warehouse addresses live in the Identity Service. The Fulfillment Service mirrors them and registers the corresponding pickup locations with OTO.

P-04Who the seller really was

Resolved after the order, not before it.

ShopperB2C Super Appnew worldOMSnew worldMerchandise ServicePlatform, AkshaySeller Portalnew worldOffers ingested from the Online Cataloguearrive with no seller attached, so Merit isrecorded as the seller on record.buy a catalogue-sourced itemcreate the orderseller = Meritwho actually supplies this SKU?the SKU alone, no sellerwebhook back with sellerIdis that seller onboarded on the Seller Portal?yes: replace Merit with the real sellerthe order now appears in that seller’s queueno: the order stays under Merithandled in the legacy Merchandise Service until that seller transitions

Process P-04. Seller resolution happens after the order, not before it. This applies only to Merit-seller orders, meaning catalogue-sourced ones.

P-05Points: burn, exchange, earn, payout

Every path that money and points take. Three of these four have no New World counterpart.

MemberClient LMSowns the pointsShopold or new worldPoints ExchangePlatform, AkshayPayout ServicePlatform, AkshayPartner or bankexternalBurn · the loop Merit exists to increaseread the balancespend points on a rewarddebit the points, then update the orderExchange · points into someone else’s currencyconvert to a partner programmeexchange requestcredit the partner accountMastercard, Kapital Bank, STC, ANB, Mokaafa, Wala OneEarn · cashback in milesBuilt and proven on legacy: configurable perproduct, about ten minutes of admin work,Apple products only today. Not built in theNew World. The blocker is a Saudia Financefunding percentage, not engineering.Payout · value back out to a client or a memberpay outPayPal live, Revolut live, Hyperwallet and THUNES in buildPerformSwitch on a low balanceautomated failover between supplier accounts

Process P-05. Merit never holds the points. It reads them, burns them, converts them, and pays value back out.

P-06The Al Fursan migration

Saudia only. Every other client stays on legacy.

Al Fursan only. Every other client stays on the Old World.Merit internalClosed user group5%25%50%100%Canary cohorts, growing left to right. Each opens only once the one before it shows no unexplained difference from legacy.kill switch: any cohort can be rolled back to legacy on its ownLegacy systemstays warm as fallback for every cohort, for as long as any cohort needs itCohort stickinessA member stays on the side they were first assigned to.They do not move back and forth as cohorts grow.Cohort parity comparisonEach cohort’s orders are checked against legacy behaviourbefore the next, larger cohort is opened.

Process P-06. A canary rollout, not a shadow run. Real members transact on the new system in growing cohorts, each compared against legacy before the next one opens.

Gift card fulfilment does not move at all. The legacy system becomes a supplier sitting behind Merit's own pipeline: storefront, then E-commerce Core, then order state management, then the Fulfillment Service, and only then does legacy issue the card.

Why discovery is hard

No single person can answer "what does Al Fursan do today". The behaviour is split three ways: Aditya's code and routes, Akshay's platform services, and rules that exist only in the Ops team's heads. Those are the three discovery lenses.

05Feature parity, Old World against New

Green works today. Amber is partial. Red does not exist. This is the register the migration is actually measured against.

CapabilityOld World, live todayNew World
Shop and storefront
Branded storefront per clientworks todayFive bespoke builds: Saudia, SAIB, Kantar Verian, Mastercard, MCMpartialTenant provisioning for the Storefront Admin Portal, still to do. The single largest item in the migration
Content and CMS pagesworks todayContent APIdoes not existbasic CMS, to do
Product searchworks todaytuned over yearspartialadvanced search, in progress and untuned
Data-driven product orderingworks todaymaterialized view rankingdoes not existno counterpart
Promotions engineworks todaydone on legacydoes not existno counterpart
Catalog and supply
Merchandise catalog, source of truthworks todaythe legacy Merchandise Servicepartialcatalog management, in progress
Product import splitworks todaylive on legacypartialin progress
Catalog selection and approval per clientworks todaylive on legacydoes not existno counterpart
Merit Online Catalogueworks todaythe current Old World catalog systempartialPIM replaces it. Sellers re-upload their catalogue rather than migrating product data
New variant on an existing product, syncedworks todayOC does it internallydoes not existagreed, not built. Waiting on the OC side to replicate it
Seller Portal API for suppliersnot applicablesuppliers are onboarded by Merit staffdoes not existindividual and bulk upload exist, an API does not. Blocks supplier migration
Orders and fulfilment
Order placement and inventoryworks todayMGC is the source of truthworks todayE-commerce Core plus OMS
Gift card fulfilmentworks todayMGC mints or calls the supplierworks todayreclassified, not a gap: legacy becomes a supplier behind the Fulfillment Service
MGC lazy fulfilmentworks todaylive on legacypartialMGC legacy sync, in progress
Order item fulfilment cooling periodworks todaylive on legacydoes not existno counterpart
Bulk order placement via admin portalworks todaylive on legacydoes not existhow corporate bulk redemptions actually get placed
Admin order lookup for supportworks todaySaudia admin dashboarddoes not existnot built. Third-party support cannot find an order
Location-aware stock, STCdoes not existlegacy was built for gift cards, it has no location awarenessworks todaywarehouse-location aware, matches STC city-level stock
Money
Points burn against the client programmeworks todayshop calls the client LMSpartialthe same client APIs still have to be wired per tenant
Points exchangeworks todaysix partner programmes livedoes not existno counterpart. Point Exchange stays Old World; the New World calls it rather than rebuilding it
Payoutsworks todayPayPal and Revolut livedoes not existno counterpart. Payout Service stays Old World; the New World calls it rather than rebuilding it
Earn model, cashback in milesworks todayproven on legacydoes not existnot built. Blocked on a Saudia Finance funding percentage, not on engineering
Client float managementworks todayMGC, with an open negative-balance racedoes not existno counterpart described
Reconciliation with SABdoes not existexplicitly not implementeddoes not existnot scoped
API client onboardingworks todayclients place orders straight into MGC by APIdoes not existno path for them
Messaging and integration
SMS and emailworks todaylive on legacypartialnotifications, provider layer sits with Marthino
WhatsAppworks todayruns through Saudia’s Accenture systemdoes not existmust move to Merit. No team assigned
Internal webhooks and syncworks todaylive on legacyworks todaydone. The one clean match in the whole register
Read the red column first

Ten capabilities are live on legacy and absent from the new stack. Two of the reds are not gaps at all: gift cards were reclassified, legacy becomes a supplier, and RewardsBy is out of scope. One row runs the other way: location-aware stock for STC exists only in the New World, because legacy was built for gift cards and has no location awareness.

06The decisions this forces

Five choices come out of the register. Each is written as options with a recommendation, so approving one costs a word. None of them are decided.

Decision needed

Tenant provisioning for the Storefront Admin Portal

The new stack needs generic tenant provisioning, and it is still to do.

  • Build generic provisioning first, then onboard Al Fursan
  • Hand-provision Al Fursan, generalise afterwards
Proposed, not decided

Hand-provision Al Fursan for the canary rollout. Generic provisioning is the right product to build, but should not block the rollout.

Decider: Khawar, Brian

Decision needed

Earn model, cashback in miles

The mechanism is built and proven on legacy. The blocker on the new side is a funding percentage from Saudia Finance.

  • Wait for the funding percentage, then build
  • Build the mechanism now and leave the percentage configurable
Proposed, not decided

Build now, configure later. A pending commercial number should not hold engineering time.

Decider: Brian, Hamza Shahbaz

Decision needed

Promotions engine and product ranking

Both are done on legacy and absent from the new stack. Neither breaks an order.

  • In scope for the initial rollout
  • A fast follow, after the initial rollout
Proposed, not decided

A fast follow, unless Saudia treats either as launch-blocking. They move revenue, they do not affect correctness.

Decider: Brian, Aditya

Decision needed

Seller Portal API

Bulk and individual upload exist, a programmatic API does not, and its absence blocks supplier migration.

  • Build it before supplier migration
  • Migrate suppliers by upload, build the API later
Proposed, not decided

Before. Every supplier migrated by hand is a supplier that has to be migrated again.

Decider: Khawar

Decision needed

WhatsApp notifications

They run through Saudia’s Accenture system today and have to move to Merit. No team is assigned.

  • Assign it to Platform, under the Notification Hub
  • Assign it to the E-Commerce Solution notification work
  • Keep Accenture through the rollout and move afterwards
Proposed, not decided

Give it an owner soon, whichever way it goes. Unowned, it becomes a rollout blocker instead of a scheduled task.

Decider: Akshay, Marthino

07Traps

All recorded in the system's own documents. None of this is folklore.

Money

Float can go negative

Finance recorded a race condition that drives a client's prepaid balance below zero. No fix is recorded against it.

Data

The MGC schema was never cleaned

MGC is an enhancement on top of a system built for something else. Many tables are unused and no clean ERD exists. Never infer meaning from a table name.

Ranking

Magic numbers meaning "unpinned"

Ranks of 5, 99 and 999 are conflated with "not pinned", so most of the Saudia catalog falls through to alphabetical order. A fix replacing them with NULL is a hard prerequisite.

Deadline

Aurora and ElastiCache are reaching end of support

MGC runs on both. Blue/green Aurora deployment, four to ten minutes of downtime. Whether ElastiCache carries queue state was still unconfirmed.

Ops

Large parts of the flow are humans

Ops copies product data into each client panel, updates merchandise order statuses by hand, and distributes gift cards by email and spreadsheet. If your change moves a manual step, tell Ops before you ship.

Duplication

Forked, not shared

The Go marketplaces carry their own pkg/catalog, pkg/loyalty and identity.Service instead of calling Platform for all of it. A getEnvVariables helper is pasted into six packages.

Suppliers

No generic supplier integration

Every supplier is wired separately. There is no adapter to reuse. Budget for it every single time.

Silent failure

HTTP 200 is not delivery

CloudFront logs stopped reaching New Relic while New Relic kept returning 200. The Lambda applied Lambda-shaped filtering to CloudFront JSON and dropped every record. Check the destination, not the status code.

08Where the truth lives, and your first two weeks

Ranked by how much you can trust it.

  1. The code
    Ask for GitLab on day one: merit-incentives/marketplaces/*, merit-incentives/platform/*, merit-incentives/mgc/*. You will also find marketplaces/saleor/saleor-core. A 2023 ticket calls Saleor "the engine of our e-commerce workflows" for "the next generation of Merit Marketplace", and adds that it "is still experimental". Nothing in any roadmap, plan or sprint since then mentions it, and the Go marketplaces are what actually went to production. Treat it as an abandoned line until someone tells you otherwise, and ask before building on it.
  2. Jira ticket bodies
    The richest source by a distance. Repo URLs, endpoints, table names and design decisions live in descriptions and nowhere else.
  3. Platform Sprint Backlog Review
    Confluence 2199617558 and 2266365953. The only reliable current-state view of Platform Services.
  4. The Saudia RFCs
    Confluence 2133852161 and 2133262338. The best architecture writing on the Marketplace side.
  5. Slack, for what is broken right now
    #temp-ecomm-core-x-online-catalogue-sync, #seller-portal-x-merchandise-service, #merit-mgc-1-0-tech, #urgent-tech-ops, #proj-oto-integration, #marketplace-support-requests.
  6. The Application Architecture wiki pages, last
    Mostly empty templates. Useful only for the attached C4 images, where they exist.

Two weeks, in order

Week 1

Trace one real order

Take a recent Al Fursan gift card order and walk P-01 yourself, from the SSO redirect to the datalake row. Write down every point where you had to ask a human. That list is your onboarding gap.

Week 1

Get read access to everything

Both Jira instances, Linear after cutover, Confluence space ME, the Slack channels above, the Merit Drive product folder. Access is the bottleneck.

Week 2

Read one Go marketplace properly

saudia-marketplace. It is the reference for the whole family: Go, Gin, Postgres with GORM, goose migrations, Redis, River workers, Keycloak, New Relic. Focus on pkg/catalog, pkg/orders and the River workers.

Week 2

Then read E-commerce Core against it

The contrast is the migration. Every Old World behaviour with no home in the new model goes into the parity register in section 05.

Five questions, each with a name attached

AskOf
Does ElastiCache carry queue state, or is it cache only? It changes how the upgrade is planned.Akshay, Rohit
Are backend deploys still manual anywhere, or is GitLab CI/CD complete?Manoj Dhiman
Has the NULL rank convention shipped?Aditya, Arpan
Has the OC side agreed to replicate the variant-refresh mechanism, route C in P-03?Akshay, Muneeb
Which Al Fursan rules are uncoded, and who holds them?Muawiya Mawi, Raneem Ajana

09Glossary

Everything you will hear in week one.

MGC
Merit Giftcard Service. The legacy commerce engine: orders, inventory, client float, POS redemption, supplier and catalog management. For Al Fursan, replaced by the Fulfillment Service and TMS on OTO, except gift cards, which route to MGC as a supplier. Deprecated for a client once that client's migration is complete.
OC, Online Catalogue
Merit's catalog system on the Platform side, and the intermediate source of truth for catalog data between the Seller Portal and MGC.
Agora
The internal multi-tenant Go marketplace. SAIB is being migrated onto it as a tenant. Stays on the Old World.
Al Fursan
Saudia's loyalty programme, the largest client storefront, and the only client currently moving to the new stack.
PIM
Product Information Management. What a product is. Live and multi-tenant. Replaces the Online Catalogue.
E-commerce Core
The new stack's single integration boundary. Owns offers, inventory and sales channels. Nothing talks to PIM directly.
Offer
One seller's listing of one product. One offer maps to exactly one inventory record.
Buy Box
The rule that picks which offer a shopper sees when several sellers list the same product.
OMS
Order Management System. The order state machine and the source of truth for order state. Old-world orders do not pass through it.
Fulfillment Service
Standalone service owning what happens to a reward after the order. Receives fulfilment work from OMS, dispatches to OTO, MGC, the legacy Merchandise Service or STC depending on product type, normalises each provider's status and reports it back to OMS. The Seller Portal does not call it directly.
Seller Portal
New World supply side, self serve for sellers. Its admin role is the hub for operating physical orders.
Identity Service
Holds seller identity and warehouse addresses. The Fulfillment Service mirrors those addresses and registers the corresponding pickup locations with OTO.
OTO
The logistics aggregator behind TMS. One API to more than 200 GCC carriers.
Salasa
A fulfilment partner on the Platform side. Not the same portfolio as OTO.
Float
A client's prepaid balance inside MGC. A client cannot order beyond it.
DPR
Direct Points Redemption. Paying with points at a merchant's own store or WebPOS.
TCS
Tenant Context Service. Issues tokens and returns tenant details and MGC credentials to a marketplace backend.
River
The Go background job library used across the marketplace monoliths for queues and periodic workers.
Canary rollout
Running the new system on real traffic in growing cohorts, each compared against legacy for parity, each with its own kill switch, while legacy stays warm as a fallback.
Old World, New World
Merit's own names. Old World is the bespoke per-client builds plus Platform Services. New World is the single multi-tenant E-Commerce Solution.