Revision: a product-planning guide built around a worked client-approval workflow, access boundaries, subscription decisions and pilot acceptance.
SaaS application development starts with a repeatable customer task and the responsibility for operating it. A login screen, subscription checkout and dashboard do not yet provide a useful service. Define the work customers must complete, the records that prove it happened, and the exceptions your team must support.
This guide uses a hypothetical B2B product for agencies collecting client approval of deliverables. The example is a proposed first release, not a client case study or a claim that its features have been built. It separates product decisions from the deeper implementation choices covered in our architecture guide.
Start with one usable approval workflow
The agency creates a workspace and project, uploads a deliverable revision, and invites a designated client reviewer. The reviewer opens the current published revision, adds feedback, and either approves it or requests changes. Staff can then identify the decision, the person who made it and the exact revision it concerns.
That last detail matters: replacing a file must not silently preserve its old approval. A new revision starts a new review decision while the previous version and decision remain available in history. Agree what happens if a reviewer has an old page open when staff publish a replacement. For this pilot, the old page cannot approve the newer revision or change a superseded decision.
The first release includes one review stage, one designated reviewer per project, a basic file preview or download, revision history, email notifications and workspace billing. Multi-stage approval chains, image annotation tools, native apps, public share links and deep project-management integrations are deferred. The initial outcome to evaluate is whether a client can find the correct work and return an attributable decision without completing the approval through an email thread.
Before building, walk this scenario with an agency operator and a client reviewer using representative sample work. Observe where they disagree about “approved,” who has authority, and how revisions are named. Record those decisions in the brief; interface design cannot resolve an undefined approval process.
Separate identity, membership and project access
A user is a login identity. A workspace represents an agency subscribing to the product. Membership connects that user to a workspace, while project grants constrain reviewer access and staff publishing actions. The same person might own one agency workspace and review a project in another; their privileges must remain separate.
| Role | Permitted work | Boundary to demonstrate |
|---|---|---|
| Workspace owner | Manage workspace membership, project assignments, billing and workspace exports; perform staff work. | Authority applies to this workspace, not every workspace associated with the same login. |
| Staff member | Read projects in their workspace; create revisions and publish work on assigned projects. | Cannot manage billing, publish to unassigned projects or approve on the client's behalf. |
| Client reviewer | View the assigned project's published work and submit its review decision. | Cannot see staff drafts, other client projects or workspace administration. |
This pilot permits internal staff to read all projects in their own workspace. A product for agencies with restricted internal teams needs additional project-level read grants. External reviewers remain limited to their assigned projects.
Owner access does not permit rewriting a client's recorded decision. Define corrections as explicit actions with history. Also decide how ownership transfers if the original owner leaves, rather than allowing the last owner to remove themselves and strand the workspace.
Treat invitations as a lifecycle: pending, accepted, expired or revoked. Bind acceptance to the intended identity and scope. A pending invitation must not itself grant access before acceptance, and replaying an accepted token must not create additional memberships. Define whether issuing a replacement invalidates an earlier pending invitation.
Test revocation with an already-open browser page and a previously issued file link. Decide how quickly access must end and ensure the download mechanism can meet that requirement. Hiding a navigation item does not revoke permission. OWASP's authorization guidance recommends denying access by default and checking authorization on every request.
Make the tenant boundary a product decision
In this example, the agency workspace is the tenant boundary. Its client companies are records within that boundary, not independent subscriptions merely because they have reviewers. Decide whether a project can ever move between agencies; excluding such transfers from the pilot avoids an undefined data-ownership operation.
Write down which records belong to the workspace: projects, deliverables, revisions, invitations, decisions and files. Require the same boundary in search, exports, notifications, background processing and support tools. A download URL or a queued email should not expose a document just because its database row is protected.
The choice between shared or separate storage is an engineering decision informed by isolation, recovery and operating requirements. A separate database does not automatically decide which project a reviewer may access. Our SaaS architecture and scaling guide goes deeper into implementation and verification; the planning brief should state the boundaries that implementation must preserve.
Define billing and product access separately
Payment status answers what happened financially. An entitlement answers what the workspace may do now. Project permissions still decide what each person can do within that entitlement. Agree all three; a paid workspace does not give every member administrator access.
The table below is an illustrative product policy for this pilot. These are application states and decisions to approve, not the names or automatic behavior of a payment provider. Define trial length, limits, grace duration and notice periods before implementing them.
| Situation | Workspace behavior | Decision or evidence required |
|---|---|---|
| Trial active | Permit the agreed pilot workflow within stated limits. | Record the trial end and what happens to unfinished reviews afterward. |
| Paid period active | Enable the purchased limits while retaining member and project permissions. | Use confirmed billing evidence and a clear entitlement period. |
| Payment needs attention | Show the owner a recovery action; apply the agreed grace policy. | Define the deadline and notices. A browser redirect alone must not grant paid access. |
| Access restricted | Stop new uploads and decisions; retain authorized reading and owner export under this example's policy. | Explain the restriction and restoration path without exposing another workspace's data. |
| Cancellation requested | Continue the already-granted entitlement until its defined end, unless a separately agreed immediate cancellation applies. | Display the effective date; do not silently delete work. |
Workspace closure and deletion need their own process: who can request it, what gets exported, which records must be retained, and when removal occurs. Do not make deletion an accidental side effect of a failed invoice. For plan reductions, define what happens if existing projects or storage exceed the new limit; silently discarding records is not a reasonable default.
Map the chosen provider's actual events to these rules and test delayed, repeated and out-of-order delivery. For example, Stripe documents duplicate and unordered webhook events and signature verification. Verify incoming events, retain processing identifiers and reconcile uncertain state before changing access. The browser's subscription-success page is useful feedback, not the sole source of financial truth.
Give each integration an owner and a failure path
The pilot needs transactional email, file storage and billing. Document what each integration owns, which data it receives, who controls its account and how an operator detects failures. Keep provider credentials outside client-side code and provide separate testing configuration.
An email failure should not erase an uploaded revision or pretend that the client saw it. Show the review request in the application, record delivery status where available and give staff a controlled resend action. Likewise, a failed file upload must not publish a revision with a broken attachment. Decide whether publication is blocked until the file is ready.
Keep retries tied to stable operation identifiers. Repeating a notification should not create a second review decision, and processing the same billing event should not add another entitlement period. Define what support can repair and which actions require the workspace owner's participation.
Use an acceptance worksheet to decide whether to release
For every requirement, record the scenario, expected result, evidence, owner and release decision. Include a second workspace from the beginning so isolation is demonstrated rather than assumed. The following are proposed acceptance checks for the example, not reported test results.
| Scenario | Expected result | Evidence and owner |
|---|---|---|
| First complete review | An assigned staff member publishes a revision; the assigned reviewer approves it; both see the same revision-specific history. | Recorded walkthrough and record identifiers; product owner. |
| Old revision open | Publishing a replacement does not transfer approval; a stale browser cannot alter the wrong revision. | Concurrent-session check; delivery lead. |
| Cross-workspace request | Changing a project or file identifier does not reveal another agency's records. | Automated checks plus file/export review; engineering owner. |
| Invitation or access revoked | Expired/revoked invitations cannot grant access; removed project access stops the next protected action. | Invitation and existing-session cases; engineering owner. |
| Billing event repeated | One confirmed operation produces one entitlement change under the approved policy. | Provider test event and reconciled application state; billing owner. |
| Notification or upload fails | The application exposes a recoverable state and preserves the correct review history. | Controlled failure and repair demonstration; support owner. |
| Restore and handover | An isolated restore recovers related records and files with access rules intact. | Restore record, operating instructions and named maintainer; operations owner. |
Define acceptable performance on representative files and workloads, along with keyboard and mobile use. Record remaining limitations explicitly. A passing happy-path demonstration does not compensate for an unresolved access leak or lost approval history.
Run a pilot that can change the plan
Recruit a small, identified set of agencies and their client reviewers. Provide a support route and agree what staff will do if a review cannot continue. Separate defects, confusing workflow and genuinely new requirements; each needs a different response.
Measure completed review decisions within a defined observation window, time from publication to decision, abandoned invitations and support effort per review. Keep the cohort consistent and state how withdrawn or superseded revisions are handled. Include absolute counts and reasons for failure. Do not treat a few enthusiastic trial users as proof of durable demand.
Agree the expansion decision in advance: whether the workflow is usable, operating effort is acceptable and customers have a reason to keep paying. A successful software test proves specified behavior; pilot evidence evaluates whether that behavior helps the business. Preserve that distinction when reporting progress.
Turn the scope into a delivery brief
Use the existing software requirements template to capture the workflow, boundaries, acceptance evidence and open decisions. Assign responsibility for content, customer onboarding, provider accounts, release approval and ongoing support before requesting estimates.
Our SaaS development cost guide separates implementation effort from recurring operations. The SaaS outsourcing guide covers selecting and managing delivery. For a project discussion, our SaaS development service starts with the first workflow and the decisions needed to make its scope reviewable.
