Capacity contracts: clients buy points, not hours
Clients buy a quarterly point allowance, and every request gets a size class before work starts. The price is fixed before anyone picks up the ticket.

If you sell ongoing support by the hour, you know the conversation that follows the invoice: the client asks why a "small fix" took six hours. Capacity contracts flip the order. The client buys a point allowance per quarter, every request gets a size class before work starts, and the price is settled before anyone picks up the ticket.
Why points instead of hours
Billing by the hour puts the risk in the wrong place. When something takes longer than expected, the client pays, and you have the conversation about it afterwards. Small requests often never get raised at all, because they aren't worth a quote.
With a capacity contract:
- The price is known up front. A class costs a fixed number of points, however long the work ends up taking.
- You carry the hour risk. In exchange, you define the classes and their point values.
- Hours stay internal. Your team keeps tracking time. That shows you what a class really costs, so you can recalibrate the point values after a quarter or two. The client sees none of it.
- Invoicing stays where it is. Spedy records what was agreed and what was spent. The invoice is sent from outside Spedy.
How a ticket runs under a contract
A client files a request on a project attached to a contract. The ticket's Properties tab shows a Size class card.
- Propose a size class. Someone on your team picks a class and adds a short rationale: how many places are affected, how much testing it needs, how clear the requirement is. You can also do this when creating the ticket.
- Agree or object. The client gets a notification and an email. Agree to the class reserves the points. Object keeps the ticket on hold until you agree. Once per quarter a dispute can be settled without discussion: the next smaller class applies.
- Do the work. Only now can the ticket move into an active status. A ticket without an agreed class does not start.
- Accept the delivery. When the work is done, Spedy asks the client to accept it. The reserved points are only consumed on Record acceptance. Dragging a card to "Done" is not enough.
If a ticket turns out bigger than agreed, use Change the size class. The old reservation goes back first, the new class goes to the client for agreement again, and a ticket in progress pauses until then. A class can never be raised quietly.
What costs nothing
- Free classes: Each package decides which classes are included, for example everything in XS.
- Free work stays visible: a class that costs nothing still appears in the ledger with its point value. At the end of the quarter you know how much you gave away.
Limits you can pass on purpose
A contract governs pace as well as price.
- Concurrent tickets: Every contract caps how many tickets can be in progress at once. When the cap is reached, the card says so before the status change is refused ("Concurrency limit reached (2/2)"). If a ticket has to start anyway, override the limit for that one ticket, with a reason.
- Delivery times: Each class comes with a commitment in working days. The clock starts when the ticket goes into progress and pauses while it sits in a blocked status, for example while you wait on the client. The card shows the date with the pause included: "Committed by …".
- Allowance used up: The client can still size and agree. The ticket is flagged Over allowance, and before acceptance you record how it will be settled: extra points, next quarter or goodwill.
What the client sees
Clients get a Contract item in the navigation. It shows their quarter in points: allowance, consumed, reserved, remaining. Below that are the sized tickets, the covered projects, the operating positions and every point movement, filterable by month, quarter or a custom date range.
Every covered board has a chip in its header, such as 42 points left. Clients on a contract project see hours nowhere: not on the ticket, not under "Time & Budget", not in the API.
Internally everything stays. Time booked on sized tickets is flagged non-billable by default and sent to MOCO that way, since the package pays for it.
Setting it up
Everything lives under Settings → Capacity contracts, split into three tabs.
- Classes: On first use Spedy seeds five classes with Fibonacci points: XS 1, S 3, M 8, L 21, XL 55. Names, point values, list prices, internal hours and order are all yours to change. A class that has already been used is retired rather than deleted.
- Packages: Templates for new contracts, with points per quarter, concurrent tickets, free classes and a delivery time per class. Editing a package later never touches a running contract.
- Contracts → Create contract: Pick a package, set the start date (quarters follow this date, not the calendar) and adjust values under More settings if needed.
- Attach projects: Add the client's projects on the contract page. The contract only takes effect from here. Tickets already in flight finish under the old arrangement.
- Request acceptance: Optionally pick the status, say "Ready for live", at which the client is asked to accept. Without one, any final status counts.
Two weeks before a quarter ends, Spedy produces a statement with deliveries, point movements and the remaining balance. Unused points expire at the end of the quarter, open reservations stay.
If you never create a contract, nothing changes for you. Every other project keeps running on hours.
Read more
- Capacity contracts: setup, sizing, ledger and the client view in detail
Frequently asked questions
Quick answers to the most common questions about this topic.
What is a capacity contract in Spedy?
Does the client still see hours?
When are points deducted?
What if the client disagrees with a size class?
How does time on contract tickets reach MOCO?
Keep reading

Budgets now count billable hours – and weekly hours are finally editable
Budgets measure only what gets charged. Plus: weekly hours per person, approving agent time on the ticket, and credit notes in the invoice list.

Three bookable plans, preview media on the PR, and time & budget in the board header
Spedy now has four plans (Free, Starter, Pro, Business) you can book directly. Plus: automatic screenshots and video on the pull request, a compact time & budget summary in the board header, and natural duration formats for quick time booking.

Time & Budget for customers, all GitLab pipelines, and duplicating permission groups
Customers get a transparent Time & Budget overview with one-click approvals. Plus: every GitLab pipeline instead of only merge-request ones, duplicable permission groups, and status text on linked tickets.