The schema knowswhat nobody said
SPECROOM reads your database schema and, if you allow it, your code. Not a single row of data. Then it interviews you across eight zones until the feature is checkable.
We want users to be able to pause a subscription — for a month or for three.
users
- iduuid
- emailcitext
- created_attimestamptz
plans
- iduuid
- codetext
- price_centsinteger
- intervalinterval
subscriptions
- iduuid
- user_iduuid
- plan_iduuid
- statussubscription_status
- period_endtimestamptz
invoices
- iduuid
- subscription_iduuid
- amount_centsinteger
- paid_attimestamptz
enum subscription_status
- trialing
- active
- past_due
- canceled
data & migrations
Subscription status has four values, and all four are about running or ended. Does pause become a fifth value or an entity of its own?
The schema, yes. Data, no. Code, your call.
Code is optional: your own agent reads it on your machine, and what leaves is a map, not files. A dump with data rows the parser will not take at all.
- 42
- tables
- 318
- columns
- 6
- views
- 57
- foreign keys
- a dump with data rows
- a dump that is not Postgres
Eight zones, and the seventh is the one
The list is closed: eight coverage fields, not eight topics left to the model.
Data & migrations stands seventh, not last: what happens to the rows you already have, is backward compatibility needed, how do you roll back — three questions too late to ask on day four of the sprint.
“I don’t know” is an address, not a blank
Not knowing becomes research with an address of its own, and it blocks exactly what depends on it.
R3
What happens to a scheduled charge if the pause is switched on two hours before it?
2waiting for an answer
- S4charge on the day of the pause
- S7refund for unused days
3moving on
- S1the Pause button
- S2limit on the pause length
- S9the resume email
You cannot answer “I don’t know” on Problem and Goals: without them there is nothing to synthesize.
A register you can check
A scenario has three parts, and the third is not invented: no result, no scenario.
- S1
- backend
- frontend
- testing
- if
- the subscription is active and the charge is more than a day away
- when
- the user pauses it for 30 days
- then
- the charge is cancelled, access holds to the end of the paid period
- S5
- backend
- testing
- data
- if
- the subscription is paused and the pause has run out
- when
- the resume date arrives
- then
- status goes back to active, the charge is queued for the same date of the month
- S8
- backend
- frontend
- testing
- if
- the subscription is paused
- when
- the user changes plan
- then
- the change waits for the resume and does not lift the pause
Testing gets the whole register: testing sits on every scenario — that is its acceptance checklist.
Once signed, the text does not change quietly
After the gate nobody — you included — changes a line without stating a reason.
- not passed
- signed by one side
- passed
before the gateafter the gate
if the subscription is active and the charge is more than a day away, when the user pauses it — the charge is cancelled, access holds to the end of the paid period
reasonThe gateway will not cancel a charge less than an hour out — the cutoff moved to a day.
revision02.08 · 11:24Pyotr Kim · CTO
S1 · subscription pause
The cutoff moved from two hours to a day.
reason: the gateway will not cancel a charge less than an hour out; checked on the sandbox on 01.08
gate14.07 · 16:08Anna Dorokhova · PM
Project foundation
Gate passed: the foundation is frozen, 9 elements.
scenario12.07 · 10:05SPECROOM
S1 · subscription pause
Assembled from the theses of the data & migrations zone.
sample
SPECROOM
Which feature do we work through?
A pilot is a read of three of your features before the sprint. A request commits you to nothing.