North Star
- single metric most predictive of an organization's long term successgreen path
- long term roadmapTAM
- Total Addressable/Available Market - total possible market demandSAM
- Serviceable Addressable/Available Market - TAM that is within geographical reachSOM
- Serviceable Obtainable Market or Share Of Market - SAM that is realistically capturableICP
- Ideal Customer Profile - firmographic, environmental and behavioral attributes of accountsContact Roles
- people external to your company that influence decision making on a sales opportunityAccount-Based Marketing
- marketing strategy: concentrate resources on a set of target accounts within a marketsegment
- business descriptionpersona
- person description
3PL
- Third-Party Logistics - provides outsourced logistics servicesD2C/DTC
- "Direct to Consumer" - no wholesaler/distributor/retailerKitting
- taking different individual products and pairing them together to create a new SKU that includes multiple products but is sold as a single item.ASN
- Advanced Shipping Notice - notification of pending deliveriesBill of Lading
- document from carrier to shipper detailing type, quantity, destination of goods carried. Also a shipment receipt when goods are deliveredcarrier
- transports goodsshipper
- supplier or owner of goods to be shippedshrinkage
- loss of inventory (theft, error, fraud, damage, mislabel, miss-picked, cross-shipment)cross-shipment
- order shipped to wrong destinationReverse Logistics
- Managing flow of finished goods from consumer to origin - returnsDelivery Promise
- date by which order will be delivered - consists of the below:Order Processing Time
- Once payment is confirmed. Merchants may opt to wait to allow for cancel/changeHandling Time
- 3PL SLA - pick, pack, generate shipping labelDelivery Speed
- Carrier SLA
Cycle Count
- perpetual inventory auditing procedure, regularly repeated sequence of checks on a subset of inventoryMerchant Disposition
- rules set by merchants re: returned goods - can be reintegrated into inventory vs. needs to be discardedSales Velocity
- pace at which items are sellingSales Lift
- increases in sales when businesses run promotional campaigns during a specific time period
- Shopify Acronyms
BFCM
- Black Friday/Cyber Monday - huge loadspike
- time box investigationPXW
- Past X WeeksFlexport
- upstream shipping (manu to warehouse)Apdex
- pick T-value; <T = satisfied, >T<4T = tolerating, >4T = frustrated; Apdex = (satisfied + (tolerating/2))/total- In Splunk:
apdex(2)
Usage:apdex(t-value, field)
,apdexCustom(3)
Usage:apdexCustom(t-value, field, f-value-multiplier)
- In Splunk:
- SFN Glossary Doc OR SFN Glossary Wiki
Fulfillment Center
,node
,warehouse
- SFN merchant inventory warehouses- Warehouse O (OTT - ON), Yavin (USSE3 - GA), DM (USMW2 - MO), DM (USNE4 - PA), ITS (USW3 - NV)
FMS
- Fulfillment Managment System generally, also the Shopify x 6RS product6RS
- Six Rivers Systems - warehouse automation and management technology developer acquired in 2019MiCo
- Mission ControlSpecial Projects
- tasks performed by fulfillment centers that aren't part of the usual fulfillment workflows (sometimeswork orders
)- Assembly
- Custom Packaging
- Specialized Service - i.e. wax boots, fold jackets specific ways
Bundling
- fulfillment center takes products available for individual sale and combines them into a set to be shipped as the physical implementation of a bundleProduct Reworking
- fulfillment center alters a finished product to “update it”. Includes repackaging, relabeling, changing components, repair, etc.
Easy Button
- Create the simplest direct to consumer merchant fulfillment solution with simplified inbounding, order management, inventory balancing, and accurate inventory visibility, fully integrated with Shopify’s back office and sales channels.BaseLayer
- Mission encompassing Features that result in easy fulfillment with simple pricing - M1 and M2 milestonesReach > Lead
- MAL to PQLLead > Close
- PQL to Closed-WonC2D
- Click to Deliver rate - % of SFN orders delivered on timeMQL/SAL/SQL
- See here and SFNLead
- potential customer, part of an account, targeted for an opportunityMAL
- Marketing-Accepted Lead - marketing demographically qualified leadsMQL
- Marketing-Qualified Lead - marketing behaviourly qualified leads (take some action)PQL
- Product-Qualified Lead - Lead who has experience with the productSAL
- Sales-Accepted Lead - engaged C2A to contact salesSQL
- Sales-Qualified Lead - qualified by sales teamClosed-Won
- Successfully signed up shop (accept terms)
DAO
- Daily Active OrdersCTOR
- Click-To-Open Ratefulfillment complexity
- everything warehouse does with products from inbound to packout - aim to reducebusiness complexity
- everything related to getting order into 3PL (multi-channel, wholesale, ERP needs) - aim to increasedock to stock
- time in induction from truck reaching warehouse to stock ready to ship out
- North Star: # of 2 Business Day Fulfillments
- Tripwires:
- Cost per Package - node placement rather than label upgrades?
- % of Merchants > SLA - failing smaller volute merchants?
- % of 2-Day Fulfillments - high volume?
- North Star: # of merchants discovering SFN and starting onboarding
- Primary Metrics:
- Discovery: # of visits to the top of our funnel i.e shopify.com/fulfillment (leading)
- Acceptance: % of new leads generated starting onboarding (leading)
- Expansion: # total obtainable merchants (leading)
- Retention: % of merchants exiting SFN app (lagging & tripwire)
spin up <repo> [--no-snapshots] [--name NAME]
- create instance of from snapshot (or direct from main with --no-snapshots) with name NAMEspin code
- open instance in vs codespin open
- run instance in browserspin shell
- connect to instance shell- run
bundle install
after to setup bundles
- run
spin list
- list all open instancesspin destroy [<instancename>|--all]
- destroy open instance(s)update
- run in instance after pulling main to stop, update, migrate, restart- Connecting to DB:
- From VS Code - SPIN sidebar panel - shopify - db icon OR, the long way...
spin ssh; cd your_project; echo $MYSQL_PORT; exit
mysql -u root -h $(spin show -o fqdn) -P <MYSQL_PORT>
GRANT ALL ON *.* TO 'root'@'%';
- grant remote login access
- on Sequel Ace login with host='shopify.spin_instance.joseph-carino.us.spin.dev', username=root, port=MYSQL_PORT
- FBS constellations:
fbs
: Shop 1 onboardedfbs:no_onboard
: emptyfbs:part_onboard
: Shop 1 onboarded, Shop 2 installed
The OS spin instances run. Docs
iso procs list
- returns application namesiso procs [stop|start|restart] <applicationName>
cartridge create <name>
create new cartridge at ~/.data/cartridges/cartridge save <name>
save to cloudcartridge list
list cartridges. to see inserted justls ~/.data/cartridges/
cartridge insert <name>
retrieve from cloud to ~/.data/cartridges/
- if "error: gpg failed to sign the data" then
killall gpg-agent; gpgconf --launch gpg-agent; spin shell
- may need also to set
export GPG_TTY=$(tty)
- test signing:
echo "test" | gpg --clearsign
- PIN entry setup:
brew install pinentry-mac
echo 'pinentry-program /opt/homebrew/bin/pinentry-mac' >> ~/.gnupg/gpg-agent.conf
dev github auth
- when personal access token expires for local pushdev open pr
- open a pr in browser for branch, use from spindev annotate
- update annotations in modelsdev g
- update graphql schemadev deploy <stagingenvname>
- deploy to staging environmentdev packages update
- update packwerk referencesdev typecheck
ordev tc
- run sorbet typechecksdev rbi gems [gem...]
- generate RBIs from gems (using tapioca)dev rbi dsl [constant...]
- generate RBIs for constants (using tapioca)
rails generate lhm <Name>
- generate lhmVERSION=<timestamp> rake lhm:run
- run lhm migrationVERSION=<timestamp> rake lhm:revert
- run lhm migration
How to Use
Either message a channel that includes @spy or msg @spy and skip the spy
prefix
Docs
- claim - claim staging environments
[spy] claim list <project>
- list staging environments[spy] claim take <project> [<environment>]
- claim<project>
, optionally specify exact<environment>
dev deploy <environment>
- deploy to environment- view pending deployment at
https://shipit.shopify.io/shopify/<project>/<environment>
Use cloud console directly to access rails app:
- Cloud Portal > fbs > rails-node-ssr (because crashing this pod is less risky than the job pods) > open shell (rails) > /exec rails c -- --noautocomplete --nocolorize
- how to graphql in merchant app
- generate fulfillment charges: run
rake billing:test_charges:fulfillment
- regen graphql types:
yarn graphql
- setup blog See below condensed version:
- podman machine init -v $HOME:$HOME
- podman machine start
- npm run clean:all
- npm i
- npm run build
- npm run dev-local
-
- npm run sls-offline-dev-fresh (first time only?)
- npm run sls-offline-dev
-
full setup:
podman machine stop && echo 'y' | podman machine rm && podman machine init && podman machine start && npm run sls-offline-dev-fresh
-
dev integration:
dev up
=>dev server
-
testing:
npx jest <options>
- more real time than Panama
- Use ShopifyQL
- after adding images, run 'bin/optimize-images'
- if
rails c
is throwing, addIRB.conf[:USE_AUTOCOMPLETE] = false
to~/.irbrc
- Check flag:
Verdict::Flag.enabled?(handle: "my_flag_handle", subject: @shop)
- Enable flag local:
bin/rails g verdict:configure_flag flag_handle --enable_ids 1
- Disable flag local:
bin/rails g verdict:configure_flag flag_handle --disable_ids 1
- ::ShopIdentity::BetaFlags::Disable.perform( shop_id: Component::TrustedId.new(1), name: "beta_name", ) ::ShopIdentity::BetaFlags::Enable.perform( shop_id: Component::TrustedId.new(1), name: "beta_name", )
- so first thing is to create a new Shopify store, and go into the settings to set the shop name to whatever you want it to be - it's best to do this before installing the SFN app
- you then need to set it as a staff store, instructions here: https://vault.shopify.io/page/Staff-Stores~2132.md#how-do-i-get-my-trial-or-paid-store-set-to-staff-or-staff-business-plan
- After you do that, you can install SFN on it. You need to install it manually because the eligibility criteria that runs when you try to install SFN from the app store/marketing pages will disqualify your shop since it is a dev shop.
- To do this, go to SFN Internal, and on the left side, scroll to "Install". Clicking on that link will open up a new page and you can input your shop domain there to manually install SFN.
- After that, go back to SFN Internal, go to Shops, click in your shop and then mark it as a dev shop
sdp-prd-interim-data-loaders.shopify.<tablename>
- extracts of shopify tables (from longboat), previously shopify-dw
sdp-ingest.monorail.monorail_<topicname>
- monorail events, previously sdp-prd-back-office-logistics