Domain-knowledge primer for the professional-services vertical (agencies, consulting firms, creative studios) so architect/pm don't spec naively against PSA incumbents (Scoro, Productive, Accelo, Ruddr, BigTime). Supplies the vocabulary, the non-obvious billing/margin rules, the entities a real proposal/portal/time/profitability product must model, and the per-product wedge. Applied by architect/pm during spec authoring for any of the four products in this vertical — proposals, client-portal,...
Scanned 8/31/2026
Install via CLI
openskills install avelikiy/great_cto---
name: vertical-professional-services
description: Domain-knowledge primer for the professional-services vertical (agencies, consulting firms, creative studios) so architect/pm don't spec naively against PSA incumbents (Scoro, Productive, Accelo, Ruddr, BigTime). Supplies the vocabulary, the non-obvious billing/margin rules, the entities a real proposal/portal/time/profitability product must model, and the per-product wedge. Applied by architect/pm during spec authoring for any of the four products in this vertical — proposals, client-portal, time-invoicing, profitability.
when_to_use: |
Apply when:
- architect is writing ARCH-*.md for a professional-services product
(proposals, client-portal, time-invoicing, profitability)
- pm is decomposing one of these into tasks and needs to model the
domain entities (SOW, retainer, time entry, change order) correctly
- any spec touches agency/consulting/studio billing, margin, or scope
Do NOT apply for other verticals (home services, restaurants, etc.) —
the billing economics here (utilization × realization) are specific.
effort: low
allowed-tools: Read, Write, Grep, Glob
paths:
- "docs/architecture/**"
- "docs/plans/**"
- "docs/design/**"
---
# Vertical: professional services — bill time, defend margin, sell the scope
Agencies, consulting firms, and creative studios sell hours and deliverables, not
units. Their economics are unintuitive: revenue can rise while margin collapses, and the
document that wins the work (the proposal/SOW) is also where margin leaks. Incumbents
(Scoro, Productive, Accelo, Ruddr, BigTime — collectively "PSA", professional-services
automation) model this correctly; a naive build does not. Spec against the real domain.
## 1. Domain vocabulary
- **SOW (statement of work)** — the binding scope: deliverables, timeline, price, terms.
It IS the contract and the upsell surface.
- **Engagement types**: **project** (fixed scope/price), **retainer** (recurring
fee for a capacity/hours bucket), **T&M** (time & materials — bill actuals).
- **Utilization rate** — billable hours ÷ available hours. The first lever of margin.
- **Realization rate** — billed amount ÷ standard value of hours worked (i.e. how much
of what you *could* bill you actually invoiced and collected). The second lever.
- **Billable vs non-billable** — every time entry carries this flag; non-billable
(admin, sales, rework) is pure cost.
- **WIP (work in progress)** — unbilled-but-delivered work; revenue earned, not yet
invoiced. Agencies carry it for weeks.
- **Blended rate** — single effective $/hour across a mixed-seniority team on an
engagement (vs per-person rate cards).
- **Change order** — a formal amendment when scope grows; the antidote to scope creep.
- **Milestone billing** — invoice tied to deliverable acceptance, not the calendar.
- **Scope creep** — uncompensated work beyond the SOW; the silent margin killer.
- **Gross margin per project** — (revenue − cost of delivered hours) ÷ revenue, *per
engagement* — not company-wide, not revenue.
- **e-signature** — legally binding accept on the proposal (ESIGN/UETA, see §6).
- **Net-30 terms** — payment due 30 days after invoice; drives cash flow and reminders.
## 2. Non-obvious domain rules
- **The proposal/SOW is the contract AND the upsell.** It's not a marketing PDF — it's
where price, scope, and acceptance live. Optional line items and tiers turn a quote
into expansion revenue. Treat it as a revenue surface, not a document export.
- **Margin is utilization × realization, not revenue.** A firm can grow billings and
lose money if people are busy on non-billable work or hours never get invoiced.
Profitability must compute *margin per engagement*, never top-line revenue.
- **Retainers need burn-down tracking.** A retainer is a bucket of hours/fees that
depletes through the month. Without burn-down you over-deliver (margin loss) or
under-deliver (churn). Show consumed vs remaining, continuously.
- **Agencies live and die on scope creep + change orders.** The default human behavior
is to "just do it" rather than raise a change order — which silently converts billable
work into non-billable. The product must make raising a change order frictionless.
- **Time tracking is hated but is the source of truth for billing.** No time entry → no
defensible invoice → realization drops. The constraint is *adoption*, not features.
## 3. What a naive build gets wrong
- **Proposal as a static PDF** instead of **accept-to-pay** — losing the e-sign +
deposit/first-invoice moment where the deal actually closes and cash starts.
- **No change-order flow** — scope creep eats margin invisibly because over-delivery is
never captured as a billable amendment.
- **Time entry so tedious nobody uses it** — a 12-field modal per entry kills adoption;
with no entries, billing and profitability are both fiction. Timers + one-tap +
defaults beat a perfect schema.
- **Profitability that shows revenue, not margin** — a dashboard of billings is
vanity; the firm needs margin per project/retainer with cost-of-hours subtracted.
- **Ignoring retainer burn-down** — treating a retainer like a flat subscription
instead of a depleting bucket misses the entire reason retainers are risky.
## 4. Must-model entities
Spec these explicitly; they recur across all four products. Build them
[[migration-ready-schema]] (stable external IDs, soft-delete, audit timestamps) because
agencies switch from incumbents mid-engagement and import open work.
- **SOW / Proposal** — header (client, engagement type, terms, net-N) + **line items**
(description, qty, rate, optional/tiered flags) + **e-signature** state (sent → viewed
→ signed) + **accept-to-pay** link (deposit or first invoice on acceptance). Status
machine: draft → sent → signed → active → closed.
- **Retainer** — period, committed hours/fee, **burn-down** (consumed vs remaining),
rollover policy, renewal date.
- **TimeEntry** — who, project/task, duration, **billable flag**, **rate** (snapshot at
entry time, not a live lookup), billed/unbilled (WIP) status.
- **Project** — budget (hours and/or fee), engagement type, rate card, computed
**margin** (revenue − cost-of-delivered-hours), milestones.
- **ChangeOrder** — links to a Project/SOW, delta scope + delta price, its own
e-sign/acceptance, and a reason — so scope growth becomes captured revenue.
## 5. Per-product notes (wedge vs incumbent + the one thing to nail)
- **proposals** (marketplace-lite) — **the wedge.** Revenue-adjacent and **low switching
cost**: a firm can adopt it for the *next* proposal without migrating anything, and it
touches money immediately. Incumbents bury proposals inside a heavy PSA suite. **Must
nail: accept-to-pay** — e-sign that flows straight into a deposit/first invoice. See
[[vertical-onboarding]]: first activation = first signed, paid proposal.
- **client-portal** (crud) — wedge: one clean client-facing surface for deliverables,
approvals, status, and billing, vs incumbents' internal-ops focus. **Must nail:
approvals as billing triggers** — an approved deliverable should be invoiceable
(milestone billing), not just a checkbox.
- **time-invoicing** (crud) — wedge: timers → invoices → reminders with **no spreadsheet
in between**; incumbents make time entry a chore. **Must nail: frictionless capture +
rate snapshot** — adoption is the product; a wrong/stale rate corrupts every downstream
invoice and the realization number.
- **profitability** (dashboard) — wedge: **real-time margin**, not month-end revenue
reporting. **Must nail: margin = utilization × realization per engagement**, with
cost-of-hours subtracted and retainer burn-down surfaced — not a billings chart.
## 6. Compliance (light)
Keep this proportionate — defer anything money-movement-shaped to the
subscription-billing-engineer.
- **e-signature validity** — ESIGN Act + UETA (US): capture intent-to-sign, consent to
electronic records, an audit trail (timestamp, IP, signer identity), and a tamper-
evident copy. For EU clients, eIDAS levels apply. This is what makes accept-to-pay
legally binding.
- **Invoice / tax basics** — sequential invoice numbers, required fields, sales-tax/VAT
where applicable. **Defer the engine** (tax calc, payment rails, dunning) to the
subscription-billing-engineer; the architecture doc only needs the *contract* with it.
- **1099 for contractors** — agencies pay sub-contractors/freelancers; if the product
touches contractor payouts, track payee tax info for 1099-NEC reporting (US). Note it;
don't build a payroll system into a proposals tool.
## Output
When applied, contribute a **Domain model** note to the architecture doc capturing: the
engagement types in scope (project/retainer/T&M), the must-model entities above that this
product owns, the margin definition (utilization × realization, per engagement) if
profitability is in scope, and the e-sign/accept-to-pay contract if proposals is in scope.
No comments yet. Be the first to comment!