Illustrative sample, not a client project
The client, company, customers, systems and names in this document are invented. It shows the structure and level of detail of the real document; it is not a record of work for a client.
Written scope · fixed-price project
Customer order-status portal
- Client
- Larkfield Industrial Supply (fictional)
- Prepared by
- Webb Technologies
- Document
- Scope of work and fixed-price basis
- Status
- Illustrative sample, not a client project
1.Background and goals
Larkfield Industrial Supply (“the Client”) is a mid-sized distributor of industrial parts, selling to business customers and dealers, many of them with several ship-to locations. Customers who want to know where an order is call or email the Client's customer service team, who look the order up in the Client's order system and then on the carrier's website, and reply by phone or email. The same questions reach the sales representatives, who do the same lookups. Nobody outside the Client can check an order themselves.
This project delivers a web portal where people at each customer or dealer account sign in and see the status of their own account's orders and shipments, read from the Client's order system without changing it, and where the Client's sales staff see the same view across every account. The goals are:
- Customer users see the status of their account's orders and shipments, with carrier tracking, at any time, without calling or emailing the Client.
- Each person sees only what their account and role allow. Which account and ship-to locations a request may reach is decided on the server from the signed-in session, never from anything the browser sends.
- The Client's sales staff see every account in the same portal, signed in with their existing staff accounts.
- The order system is read, never written. Customer traffic doesn't reach it directly, and the Client's staff keep working in it as they do today.
- The Client's IT team can run, change and extend the system after handover without us.
2.In scope
- Order list and search. Signed-in users see the orders they are allowed to see, newest first, with the order number, their own purchase order number, ship-to location, date received and status. Search by order number, purchase order number, item or tracking number, and filters by status, ship-to location and date.
- Order detail. Order lines with quantities ordered and shipped, holds with the reason the Client chooses to show customers, and each shipment with its carrier, tracking number and milestones. Status is derived from the shipments, as recorded in the order system and reported by the carrier.
- Carrier tracking. Every tracking number links to the carrier's own tracking page, from a link template per carrier that administrators maintain. For the carriers named in phase 1, milestone updates (picked up, in transit, out for delivery, delivered) are read from each carrier's tracking service through the Client's own carrier accounts.
- Roles. Three roles: customer user (their account's orders, limited to the ship-to locations they are assigned), customer admin (every order for their account, and the people who can sign in for it) and internal sales (every account, with the account and ship-to location on each order). A Client administrator role sets up accounts and their first customer admin.
- Account-scoped access, enforced on the server. Every API request is filtered by the account and ship-to locations of the signed-in session. An order outside that scope gets exactly the same response as an order that doesn't exist, so the portal never confirms that it does.
- Customer sign-in. A customer identity service (Amazon Cognito, in the Client's AWS account) for customer and dealer users: sign-in by invitation only, multi-factor authentication, password reset, and each user's account, role and ship-to locations stored with their sign-in. Customer admins invite and deactivate people for their own account and set each person's ship-to locations.
- Staff sign-in. Single sign-on for the Client's staff through the Client's existing staff identity provider (over OpenID Connect), with the internal sales and administrator roles taken from groups the Client's IT team manages.
- Order data. A read-only connection to the order system, through named database views, a read replica or the order system's own API, chosen with the Client's IT team in phase 1. A sync copies the order, line and shipment fields in the data dictionary into the portal's own read store at an interval agreed in phase 1, and every screen shows when the data was last updated. Cost prices, margins and internal notes are not copied.
- Access log. Who opened which order, and every search, recorded per account with the user and time, searchable by Client administrators for security reviews and customer questions.
- Infrastructure and delivery. Infrastructure defined as code (AWS CDK), deployed through a CI/CD pipeline (GitHub Actions) into separate test and production environments.
- Monitoring. Alarms for application errors, a sync that fails or falls behind, carrier tracking errors, invitation emails that fail to send and unusual sign-in failures.
- Documentation and handover. Runbooks, a data dictionary, architecture and security documentation, and knowledge-transfer sessions, as set out in section 11.
3.Out of scope
- Placing, changing or cancelling orders, reorders and quote requests. The portal shows status only; orders keep reaching the Client the way they do today.
- Payments, invoices, statements and credit information.
- Returns and return authorizations.
- Any write to the order system, including customer, contact and ship-to records. Account and ship-to data is maintained in the order system, as today, and read by the portal.
- Prices, price lists and product availability.
- Email or text notifications of order and shipment changes. A candidate for a later phase, quoted separately.
- Milestone updates for carriers not named in phase 1. Their tracking numbers still link to the carrier's own tracking page.
- Mobile apps and offline use.
- Integration with any other business system.
- Hardware, network changes and software licenses. We specify what is needed; the Client's teams make the changes and hold the licenses and accounts.
- Support, maintenance or new features after handover. Available as separately quoted work.
4.Systems and data sources
Systems this project connects to, the access it needs and who owns each one on the Client's side
- System
- Order system
- Role in this project:
- Source of accounts, ship-to locations, orders, lines, holds and shipments
- Access needed:
- Read-only access through one of: named database views, a read replica, or the order system's own read API, chosen in phase 1. Reached from the Client's AWS account over its site-to-site VPN, or over HTTPS for an API
- Owner (Client):
- IT (order system administrator)
- System
- Carrier tracking services
- Role in this project:
- Shipment milestones for the carriers named in phase 1
- Access needed:
- API credentials on the Client's own account with each named carrier, used for tracking lookups only
- Owner (Client):
- Shipping (with IT)
- System
- Customer identity service (Amazon Cognito, in the Client's AWS account)
- Role in this project:
- Sign-in for customer and dealer users, with invitations and multi-factor authentication
- Access needed:
- Built in this project
- Owner (Client):
- IT
- System
- Staff identity provider (Client's existing)
- Role in this project:
- Sign-in and roles for the Client's staff
- Access needed:
- An application registration and two groups
- Owner (Client):
- IT
- System
- Email sending (Amazon SES, in the Client's AWS account)
- Role in this project:
- Invitation and password-reset emails, from an address on the Client's domain
- Access needed:
- DNS records on the Client's domain to verify the sending address
- Owner (Client):
- IT
- System
- AWS account (Client-owned)
- Role in this project:
- Hosts the portal, its read store, customer sign-in and monitoring
- Access needed:
- A deployment role for the pipeline; named user access for us during the project
- Owner (Client):
- IT
- System
- GitHub organization (Client-owned)
- Role in this project:
- Repositories and CI/CD pipeline
- Access needed:
- Member access for us during the project
- Owner (Client):
- IT
| System | Role in this project | Access needed | Owner (Client) |
|---|---|---|---|
| Order system | Source of accounts, ship-to locations, orders, lines, holds and shipments | Read-only access through one of: named database views, a read replica, or the order system's own read API, chosen in phase 1. Reached from the Client's AWS account over its site-to-site VPN, or over HTTPS for an API | IT (order system administrator) |
| Carrier tracking services | Shipment milestones for the carriers named in phase 1 | API credentials on the Client's own account with each named carrier, used for tracking lookups only | Shipping (with IT) |
| Customer identity service (Amazon Cognito, in the Client's AWS account) | Sign-in for customer and dealer users, with invitations and multi-factor authentication | Built in this project | IT |
| Staff identity provider (Client's existing) | Sign-in and roles for the Client's staff | An application registration and two groups | IT |
| Email sending (Amazon SES, in the Client's AWS account) | Invitation and password-reset emails, from an address on the Client's domain | DNS records on the Client's domain to verify the sending address | IT |
| AWS account (Client-owned) | Hosts the portal, its read store, customer sign-in and monitoring | A deployment role for the pipeline; named user access for us during the project | IT |
| GitHub organization (Client-owned) | Repositories and CI/CD pipeline | Member access for us during the project | IT |
5.Assumptions and dependencies
- The Client provides the access in section 4 before the build phase starts. If access arrives later, the schedule moves with it; the price changes only if the scope does.
- The order system can provide read-only access by at least one of the three routes in section 4, and the Client's IT team and order system administrator agree the route in phase 1. Any change to the order system itself is the Client's.
- Account and ship-to data in the order system is correct, and each order carries its account and ship-to location. Where it isn't, the Client corrects it in the order system; the portal's read store is refreshed from the order system and never edited in the portal.
- Customer service agrees in phase 1 which fields customers may see, including which hold reasons are shown and how.
- The Client holds an account with each carrier named in phase 1 that allows tracking lookups through the carrier's API.
- The Client sets up the first customer admin for each account through the administrator screen, or supplies a list for a one-time import using the template in the data dictionary.
- The Client names one product owner who can answer questions and accept deliverables, and one contact each in customer service, sales and IT security.
- The test environment uses test accounts and a copy of the order views with test data. No production customer data is used in test.
- Hosting, license and other third-party costs are billed to the Client's own accounts.
6.Deliverables
- Source code for the portal and the sync, with automated tests, in the Client's repositories.
- Automated access tests for every role, including the cross-account tests in AC3, run by the pipeline on every change.
- Database migration scripts for the portal's read store, run by the pipeline, so the schema is versioned with the code.
- Infrastructure as code (AWS CDK) for the test and production environments.
- A CI/CD pipeline (GitHub Actions) that tests, builds and deploys every change, authenticating to AWS with OIDC so no AWS keys are stored.
- An architecture and data-flow document for the Client's security review, including every network rule with its source, destination, port and purpose.
- A data dictionary covering every field the portal reads from the order system and from carriers, which roles see it, and the first-admin import template.
- Runbooks: deploy, roll back, rotate credentials, set up an account and its first customer admin, deactivate a user, add a carrier link template, rerun or pause the sync, look up the access log, and respond to each alert.
- Knowledge-transfer sessions, listed in section 11.
7.Acceptance criteria
The system is accepted when every criterion below passes in production. Each one is checked together with the Client's product owner.
Acceptance criteria and how each one is checked
- Ref
- AC1
- Criterion:
- A customer user sees every order for their account and assigned ship-to locations, and no others, in the list, the search and the order detail.
- How it is checked:
- Test users at two test accounts, one with a single ship-to location and one with several, compared with the orders in the order system for each.
- Ref
- AC2
- Criterion:
- A customer admin sees every order for their account and the people who can sign in for it, and can invite and deactivate people and set their ship-to locations for that account only.
- How it is checked:
- Test admins at two test accounts invite, change and deactivate test users; a deactivated user can no longer sign in.
- Ref
- AC3
- Criterion:
- Signed in to one customer account, nobody can reach another account's orders, shipments or users by any route: changing order numbers or identifiers in links and API requests, replaying another session's requests, or searching for another account's order, purchase order or tracking numbers. Each attempt gets the same response as an order that doesn't exist, and appears in the access log.
- How it is checked:
- A cross-account test run: signed in as a user and as an admin at test account A, every screen and API call is tried with test account B's identifiers, by hand and by the automated tests, with the results reviewed with the Client's IT security contact.
- Ref
- AC4
- Criterion:
- Internal sales staff see every account, signed in through the staff identity provider; staff outside the portal's groups cannot sign in, and customer accounts cannot use the staff sign-in.
- How it is checked:
- Tested with staff accounts in and out of each group and with a customer account.
- Ref
- AC5
- Criterion:
- Orders, lines and shipments in the portal match the order system, and every screen shows when the data was last updated, within the sync interval agreed in phase 1.
- How it is checked:
- Twenty orders chosen by customer service, compared field by field with the order system after a sync.
- Ref
- AC6
- Criterion:
- Every tracking number links to the right carrier's tracking page, and milestone updates for each carrier named in phase 1 appear on the shipment.
- How it is checked:
- One test shipment per named carrier, and one per other carrier with a link template.
- Ref
- AC7
- Criterion:
- Nothing in the portal can write to the order system.
- How it is checked:
- IT reviews the permissions of the portal's order system login or API credentials; a write attempted with them is refused.
- Ref
- AC8
- Criterion:
- Every order opened and every search is in the access log with the user, account and time.
- How it is checked:
- The access log compared with the actions taken during AC1 to AC3.
- Ref
- AC9
- Criterion:
- The order list and order detail load in under 3 seconds on an office PC on the Client's network.
- How it is checked:
- Timed on two office PCs.
- Ref
- AC10
- Criterion:
- The Client's team deploys a change and rolls it back using only the runbooks.
- How it is checked:
- Done during knowledge transfer, observed by both parties.
| Ref | Criterion | How it is checked |
|---|---|---|
| AC1 | A customer user sees every order for their account and assigned ship-to locations, and no others, in the list, the search and the order detail. | Test users at two test accounts, one with a single ship-to location and one with several, compared with the orders in the order system for each. |
| AC2 | A customer admin sees every order for their account and the people who can sign in for it, and can invite and deactivate people and set their ship-to locations for that account only. | Test admins at two test accounts invite, change and deactivate test users; a deactivated user can no longer sign in. |
| AC3 | Signed in to one customer account, nobody can reach another account's orders, shipments or users by any route: changing order numbers or identifiers in links and API requests, replaying another session's requests, or searching for another account's order, purchase order or tracking numbers. Each attempt gets the same response as an order that doesn't exist, and appears in the access log. | A cross-account test run: signed in as a user and as an admin at test account A, every screen and API call is tried with test account B's identifiers, by hand and by the automated tests, with the results reviewed with the Client's IT security contact. |
| AC4 | Internal sales staff see every account, signed in through the staff identity provider; staff outside the portal's groups cannot sign in, and customer accounts cannot use the staff sign-in. | Tested with staff accounts in and out of each group and with a customer account. |
| AC5 | Orders, lines and shipments in the portal match the order system, and every screen shows when the data was last updated, within the sync interval agreed in phase 1. | Twenty orders chosen by customer service, compared field by field with the order system after a sync. |
| AC6 | Every tracking number links to the right carrier's tracking page, and milestone updates for each carrier named in phase 1 appear on the shipment. | One test shipment per named carrier, and one per other carrier with a link template. |
| AC7 | Nothing in the portal can write to the order system. | IT reviews the permissions of the portal's order system login or API credentials; a write attempted with them is refused. |
| AC8 | Every order opened and every search is in the access log with the user, account and time. | The access log compared with the actions taken during AC1 to AC3. |
| AC9 | The order list and order detail load in under 3 seconds on an office PC on the Client's network. | Timed on two office PCs. |
| AC10 | The Client's team deploys a change and rolls it back using only the runbooks. | Done during knowledge transfer, observed by both parties. |
Sync interval, the carriers with milestone updates and the fields customers may see: stated here in the real document, agreed with the Client in phase 1.
Acceptance is judged against these criteria only. Anything not listed here is not a reason to withhold acceptance, and is not in the price; it can be raised as a change (section 9).
8.Milestones
Work runs in five phases. Each phase ends on a written exit criterion, and working software is reviewed with the Client in the test environment throughout phases 2 and 3.
Project phases and the exit criterion that closes each one
- Phase
- 1. Access and design
- What happens:
- Access set up. The read-only route to the order system chosen with IT. Fields customers may see, roles, the carriers for milestone updates, the sync interval and the data design drafted and reviewed with customer service, sales and IT.
- Exit criterion:
- Written sign-off of the visible fields and roles by customer service and sales, and of the design and the order system connection by the Client's IT lead.
- Phase
- 2. Order data and sync
- What happens:
- Read-only connection, sync and read store built and deployed to test.
- Exit criterion:
- AC5 and AC7 pass in test.
- Phase
- 3. Screens, sign-in and roles
- What happens:
- Order list, search, order detail, carrier tracking, customer and staff sign-in, invitations and the administrator screen built and reviewed in test with customer service and sales. Access checks and the access log in place.
- Exit criterion:
- Product owner approves the screens; AC1 to AC4 and AC8 pass in test.
- Phase
- 4. Acceptance and go-live
- What happens:
- A full acceptance run in test, including the cross-account test with IT security, then deployment to production. Accounts are opened in groups the Client chooses, starting with a small first group.
- Exit criterion:
- All acceptance criteria pass in production.
- Phase
- 5. Handover
- What happens:
- Documentation delivered, knowledge-transfer sessions held, access handed over.
- Exit criterion:
- Handover checklist signed.
| Phase | What happens | Exit criterion |
|---|---|---|
| 1. Access and design | Access set up. The read-only route to the order system chosen with IT. Fields customers may see, roles, the carriers for milestone updates, the sync interval and the data design drafted and reviewed with customer service, sales and IT. | Written sign-off of the visible fields and roles by customer service and sales, and of the design and the order system connection by the Client's IT lead. |
| 2. Order data and sync | Read-only connection, sync and read store built and deployed to test. | AC5 and AC7 pass in test. |
| 3. Screens, sign-in and roles | Order list, search, order detail, carrier tracking, customer and staff sign-in, invitations and the administrator screen built and reviewed in test with customer service and sales. Access checks and the access log in place. | Product owner approves the screens; AC1 to AC4 and AC8 pass in test. |
| 4. Acceptance and go-live | A full acceptance run in test, including the cross-account test with IT security, then deployment to production. Accounts are opened in groups the Client chooses, starting with a small first group. | All acceptance criteria pass in production. |
| 5. Handover | Documentation delivered, knowledge-transfer sessions held, access handed over. | Handover checklist signed. |
Milestone dates: stated here in the real document, agreed with the Client before work starts.
9.Change process
- Either party raises a change in writing: what is needed and why.
- We reply in writing with its effect on scope, price and schedule, or confirm that it has none.
- Nothing changes until the Client's product owner approves it in writing. Approved changes are added to this document as numbered amendments.
- A change that isn't approved isn't built, and the original scope and price stand.
Until the system is accepted, fixing something that fails an acceptance criterion in section 7 is not a change. It is covered by the fixed price.
10.Security and IT review
The following are prepared for the Client's IT and security teams during phase 1, before the portal connects to any Client system or any customer is invited:
- A data-flow diagram showing every connection and its direction. The only connection into the Client's network is the sync's read-only connection to the order system (over the site-to-site VPN, unless the order system's API is chosen), on a single network rule the Client's network team controls. Customer requests never reach the order system.
- A network rule list: source, destination, port, protocol and purpose for each rule.
- Order system access: one read-only login or read-only API credential for the sync, named and documented. No shared or personal credentials in the running system.
- Access checked on the server for every screen and API call, from the signed-in session: the user's role, account and ship-to locations. Order numbers and other identifiers in a request are never trusted to decide scope.
- The cross-account tests in AC3 kept in the pipeline, so a change that widens what a customer can see fails before it reaches production.
- Customer sign-in by invitation only, with multi-factor authentication, lockout after repeated failures and password reset, using the customer identity service's own controls as of 2026. Staff sign in only through the Client's own identity provider, so its existing multi-factor and conditional access policies apply.
- Secrets, including carrier API credentials, kept in AWS Secrets Manager, never in code, configuration files, tickets or email.
- Encryption in transit on every connection, and at rest for the read store, the access log and backups.
- Logging of sign-ins, deployments, sync runs and application errors to CloudWatch, and the access log, retained according to the Client's policy.
- Dependency scanning in the pipeline, with findings reported to the Client before each release.
- Data classification: customer and dealer names, ship-to addresses, order and purchase order numbers, items and quantities, tracking numbers, and the names and work email addresses of portal users. Cost prices, margins, internal notes and payment data are not copied into the portal.
- Answers to the Client's security questionnaire, and an architecture walkthrough for the security team.
11.Handover
Handover is part of the fixed price. It is complete when the Client's team has deployed a change, rolled it back and responded to a test alert themselves, using only the documentation. It includes:
- Everything in section 6, confirmed in the Client's repositories and accounts.
- Knowledge-transfer sessions: architecture walkthrough, code tour, supervised deployment, rollback and recovery, setting up an account and its first customer admin, running the cross-account tests, and a test incident.
- Access and credentials: every account confirmed as the Client's, secrets rotated, and our access removed or reduced to whatever support is agreed.
The full contents of a handover package are shown in the sample handover package. It was written for a different invented project, a plant-floor dashboard, but it is organized the same way for a portal like this one.
12.Ownership
- The Client owns all code, infrastructure definitions, documentation and data produced under this scope. There is no license fee and no lock-in.
- Everything is built in the Client's repositories and AWS account. Nothing runs in accounts we control.
- Open-source components remain under their own licenses, which are listed in each repository.
- Confidentiality is covered by the NDA signed before this engagement.
13.Price and what it covers
Fixed price: stated here in the real document.
The fixed price covers everything in sections 2, 6, 7 and 11: design, build, testing, deployment to test and production, documentation, knowledge transfer, handover, and fixing anything that fails an acceptance criterion before acceptance.
It does not cover:
- Anything listed as out of scope in section 3.
- Approved changes under section 9, each priced before it starts.
- Hosting, software licenses and other third-party costs, billed directly to the Client's accounts.
- Support, maintenance or new features after handover, quoted separately if wanted.
Invoicing schedule and payment terms: stated here in the real document.
14.Approval
Nothing is built until this scope is accepted. Signing below accepts the scope and the fixed price stated in section 13.
For the Client
For Webb Technologies