Play
A Play is a named, repeatable strategy with the Metric it moves and its cost, run by a Startup as a Process.
A seed Play finds the first Customers; a compound Play builds an engine that keeps growing.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
family | string | required | The job it does, such as demand, retention, or pricing. |
cost | money | What one run costs. | |
cohort | json | The Portfolio query a Studio rolls it out to. | |
from | string | Lineage: the slot it compiles from, as Hypothesis#<slot>@v<version>. | |
spend | money | Media, data and creative spend posted against the Play. | |
workerCost | money | What the Workers running it cost: model tokens, compute, upstream calls and human minutes. | |
customersAcquired | integer | Outside Customers whose Acquisition names the Play. | |
outsideRevenue | money | Revenue collected from those Customers, net of refunds. | |
margin | money | Outside revenue less spend, Worker cost and the cost to serve those Customers. | |
paybackDays | integer | Days from the first spend until margin covers spend and Worker cost; empty until it does. |
Object
{
"$id": "https: //api.sb/ tutorloop.com/ plays/ play_1",
"$type": "Play",
"family": "demand",
"cost": {
"amount": 60,
"currency": "USD"
},
"cohort": {},
"from": "Hypothesis#approach@v1",
"spend": {
"amount": 60,
"currency": "USD"
},
"workerCost": {
"amount": 60,
"currency": "USD"
},
"customersAcquired": 1,
"outsideRevenue": {
"amount": 60,
"currency": "USD"
},
"margin": {
"amount": 60,
"currency": "USD"
},
"paybackDays": 1
}Relationships
- A Play is carried out by many Processes: a Process runs the steps of a Play each time the Startup runs it.
carriedOutBy, inversecarriesOut. - A Play is included in many Play Mixes: a Play Mix names each Play the Startup runs this week, with its state, budget and stop rule.
includedIn, inverseruns. - A Play moves many Metrics: a Play exists to move named Metrics, read before and after every run.
moves, inversemovedBy. - A Play is paid by many Demand Budgets: a Demand Budget’s spend buys demand Plays.
paidBy, inversepays. - A Play targets many Portfolios: a Studio rolls a Play out across a Portfolio one cohort wave at a time, measured as an Experiment.
targets, inverseplays.
Verbs
createCreates a Play.POST /{namespace}/playsgetReturns one Play by id.GET /{namespace}/plays/{id}listReturns Plays, newest first, one page at a time.GET /{namespace}/playsupdateChanges the given properties of a Play.PATCH /{namespace}/plays/{id}deleteDeletes a Play; its history is kept.DELETE /{namespace}/plays/{id}applyApply runs a Play across a Portfolio cohort, one wave at a time, measured as an Experiment.POST /{namespace}/plays/{play}/apply
Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.
| Operation | owner | admin | member | viewer |
|---|---|---|---|---|
Play.create | Yes | Yes | Yes | No |
Play.get | Yes | Yes | Yes | Yes |
Play.list | Yes | Yes | Yes | Yes |
Play.update | Yes | Yes | Yes | No |
Play.delete | Yes | Yes | Yes | No |
Play.apply | Yes | Yes | Yes | No |
Call it
Apply the latest play.Example
A creator-partnership Play gives a cooking creator 15% of the revenue her followers bring to a meal-planning App. It moves paid signups, costs nothing until a sale, and runs as a seed Play. After 60 days its ledger shows 23 Customers acquired, $1,840 in outsideRevenue and a paybackDays of 9.