The Core Formula
Every task is billed using this formula:The Billing Formula
- average = Midpoint of the t-shirt size range (the quoted estimate)
- maximum = Upper bound of the t-shirt size range (the cap)
- actual = Time actually logged by the team
How It Works
The formula creates three possible outcomes depending on how long the work actually takes:- Fast Completion (Actual < Average)
- Normal Completion (Average ≤ Actual ≤ Maximum)
- Overrun (Actual > Maximum)
Scenario: Work completes faster than the quoted averageFormula result: Bill the average (not the actual)Example:
- Quoted: M (3-6 hours, average 4.5 hours)
- Actual: 3 hours
- Billable: MIN(6, MAX(4.5, 3)) = MIN(6, 4.5) = 4.5 hours
- Banked: 1.5 hours (efficiency gain)
T-Shirt Sizing
Work is estimated using t-shirt sizes that represent time ranges:| Size | Time Range | Average | Maximum | When to Use |
|---|---|---|---|---|
| XS | 0-30 mins | 15 mins | 30 mins | Tiny fixes, small text changes |
| S | 1-2 hours | 1.5 hours | 2 hours | Simple updates, minor features |
| M | 3-6 hours | 4.5 hours | 6 hours | Standard features, moderate complexity |
| L | 8-16 hours | 12 hours | 16 hours | Complex features, multiple components |
| XL | 24-40 hours | 32 hours | 40 hours | Major features, significant work |
| XXL | 40-120 hours | 80 hours | 120 hours | Very large deliverables, multi-week work |
Averages are rounded to the nearest 15 minutes for clean scheduling. The midpoint calculation may result in values like 22.5 mins, which round to 15 or 30 mins for practical use.
What’s Included in the Size?
T-shirt sizes represent the total time needed to complete the deliverable, including:- Core work (80%): Design, development, or implementation
- QA and feedback (20%): Testing, fixes, client feedback rounds
Per-Requirement Billing
Billing is calculated per requirement, not per task. This provides granular tracking and prevents masking issues.Why Per-Requirement?
Tasks often have multiple requirements (e.g., design + development). If billing was calculated only at the task level: Problem scenario:- Design: 2 hours under budget (banked)
- Development: 2 hours over budget (overage)
- Task total: 0 net (hides both the efficiency and the problem)
- Design: +2 hours banked ✓ (visible)
- Development: -2 hours overage ⚠️ (visible)
- Reports show both metrics separately for analysis
Requirement Types
Design
Visual design work including:
- Initial design
- Client design feedback
- Design revisions
Development
Code work including:
- Implementation
- Internal QA fixes
- External QA fixes
- Deployment
Worked Examples
Example 1: Efficient Delivery (Banked Time)
Task: “Homepage Redesign”- Requirement: Design, sized M (3-6 hours)
- Team logs: 3.5 hours
- Calculation:
- Average: 4.5 hours
- Maximum: 6 hours
- Actual: 3.5 hours
- Billable = MIN(6, MAX(4.5, 3.5)) = MIN(6, 4.5) = 4.5 hours
- Result: 1 hour banked (4.5 - 3.5)
- Client is billed 4.5 hours (as quoted)
- Agency worked 3.5 hours
- 1 hour of efficiency creates profit margin
- Team should be rewarded for efficient work
Example 2: On-Target Delivery
Task: “Add Blog Integration”- Requirement: Development, sized L (8-16 hours)
- Team logs: 14 hours
- Calculation:
- Average: 12 hours
- Maximum: 16 hours
- Actual: 14 hours
- Billable = MIN(16, MAX(12, 14)) = MIN(16, 14) = 14 hours
- Result: No banked time or overage
- Client is billed exactly what was worked
- Estimate was accurate
- No profit margin, but no loss either
Example 3: Overrun (Overage Absorbed)
Task: “Build Product Catalog”- Requirement: Development, sized L (8-16 hours)
- Team logs: 20 hours
- Calculation:
- Average: 12 hours
- Maximum: 16 hours
- Actual: 20 hours
- Billable = MIN(16, MAX(12, 20)) = MIN(16, 20) = 16 hours
- Result: 4 hours overage (20 - 16)
- Client is billed 16 hours (the maximum)
- Agency worked 20 hours
- 4 hours of overage are non-billable (absorbed)
- Triggers review: Why did we underestimate?
Example 4: Multi-Requirement Task
Task: “Checkout Flow Redesign”- Design: M (3-6 hours, avg 4.5)
- Logged: 4 hours
- Billable: MIN(6, MAX(4.5, 4)) = 4.5 hours
- Banked: 0.5 hours
- Development: XL (24-40 hours, avg 32)
- Logged: 36 hours
- Billable: MIN(40, MAX(32, 36)) = 36 hours
- Overage: 0 (within range)
- Quoted: 36.5 hours (4.5 + 32)
- Actual: 40 hours (4 + 36)
- Billable: 40.5 hours (4.5 + 36)
- Net: +0.5 hours banked
- Design was slightly efficient
- Development took longer but stayed under maximum
- Overall: Small efficiency gain despite development taking longer
The 80/20 Split
T-shirt sizes are internally allocated using an 80/20 split for scheduling purposes:How the Split Works
- Development Tasks
- Design Tasks
Core Development: 80%
- Writing code
- Initial implementation
- Feature completion
- Internal QA review time
- Fixing bugs found in QA
- External QA feedback fixes
- Multiple fix rounds draw from this pool
- QA budget: 60 minutes (20% = 54 mins, rounded UP to 60)
- Development: 210 minutes (270 - 60 = 210)
The 20% Pool
The 20% buffer is a shared pool for all review-related work: For Development:- Internal QA finds 3 bugs → fixes come from the 20%
- Client UAT finds 2 more bugs → fixes also come from the 20%
- Once the 20% is exhausted, additional fix time is overage
- First client feedback round → uses part of the 20%
- Second feedback round → uses more of the 20%
- Third round pushes into overage if pool is depleted
- Getting designs right the first time
- Thorough internal QA before client review
- Clear communication to minimize feedback rounds
Key Billing Terms
| Term | Definition | Example |
|---|---|---|
| Quoted Minutes | Average of the t-shirt size | M = 270 mins (4.5 hours) |
| Quoted Max Minutes | Maximum of the t-shirt size | M = 360 mins (6 hours) |
| Actual Minutes | Sum of logged time entries | Team logs 210 minutes |
| Billable Minutes | Result of the formula | MIN(360, MAX(270, 210)) = 270 mins |
| Banked Minutes | Efficiency gain (average - actual) | 270 - 210 = 60 mins banked |
| Overage Minutes | Non-billable excess (actual - max) | If actual = 400, overage = 40 mins |
| Budget Used % | Actual as % of maximum | 210 / 360 = 58% |
When Hours Are Deducted
Hours are deducted from the client’s retainer allocation in real-time as work is logged, but the billable amount (not raw logged time) is what counts.The Flow
1
Time Entry Logged
Team member logs time to a task or subtask
2
Billing Calculated
System calculates current totals:
- Sum all logged time for the task
- Apply billing formula per requirement
- Aggregate to task level
3
Client Balance Updated
Billable hours (not raw logged) are deducted from monthly allocation:
- Hours used = Sum of billable across all tasks
- Hours remaining = Monthly allocation - hours used
4
Client Sees Update
Client portal shows updated remaining balance in real-time
In-Progress vs. Completed
While work is in progress:- Client sees actual logged time (may be less than what they’ll be billed)
- Formula not yet finalized
- Formula is applied
- Billable amount may jump to the average (if under)
- Client is billed the final calculated amount
Why This Model Works
Rewards Quality and Efficiency
Rewards Quality and Efficiency
Teams are incentivized to:
- Work smart, not just fast
- Do it right the first time (avoid rework)
- Build reusable components
- Improve processes
Protects Clients from Overruns
Protects Clients from Overruns
Clients have cost certainty:
- Maximum is always capped
- No surprise invoices
- Risk is shared fairly
- Focus on value, not hours
Encourages Better Estimation
Encourages Better Estimation
Over-runs hurt the agency, so:
- Teams learn from past tasks
- Estimates get more accurate over time
- Complexity is accounted for upfront
- Scope is clarified before work starts
Transparent and Fair
Transparent and Fair
Both sides win:
- Client: Cost capped, fair pricing
- Agency: Efficiency rewarded, overruns limited
- Team: Quality matters more than speed
Common Scenarios
Scenario: Consistent Banked Time
Situation: Team consistently finishes 10-15% under estimates What it means:- ✅ Efficient delivery
- ✅ Good estimation (realistic but beatable)
- ✅ Strong profit margins
- ⚠️ Consider: Are estimates too conservative?
- Celebrate and reward efficiency
- Review if estimates can be tightened
- Share best practices across team
Scenario: Consistent Overage
Situation: Tasks consistently exceed maximum by 20-30% What it means:- ⚠️ Chronic underestimation
- ⚠️ Scope creep
- ⚠️ Technical debt slowing delivery
- 🔴 Profitability issues
- Review estimation process
- Analyze overage patterns (which types of work?)
- Tighten scope management
- Consider larger t-shirt sizes
Scenario: Mixed Performance
Situation: Some tasks banked, others overage, net neutral What it means:- ✅ Normal variation
- ⚠️ May be masking issues
- Need granular analysis
- Review per-requirement metrics
- Identify patterns (design vs dev performance)
- Train on specific areas with issues
- Maintain overall balance