> ## Documentation Index
> Fetch the complete documentation index at: https://docs.charle.agency/llms.txt
> Use this file to discover all available pages before exploring further.

# Efficiency

> How delivery performance is measured against estimates in CharleOS

Efficiency measures how well you're delivering work compared to estimates. It's the difference between what you **quoted** and what you **actually delivered**—and it directly impacts profitability.

## The Core Concept

Efficiency compares two values:

<CardGroup cols={2}>
  <Card title="Quoted Time" icon="file-contract">
    What you **estimated** the work would take
  </Card>

  <Card title="Actual Time" icon="clock">
    What it **actually took** to deliver
  </Card>
</CardGroup>

```formula The Formula theme={null}
Efficiency = (Quoted Time ÷ Actual Time) × 100
```

<Tabs>
  <Tab title="Over 100% (Efficient)">
    **Actual \< Quoted** - You delivered faster than estimated.

    **Example:** Quoted 6 hours, delivered in 4 hours = 150% efficiency

    ✅ **This is good!** You've created "banked time" that benefits profitability.
  </Tab>

  <Tab title="100% (On Target)">
    **Actual = Quoted** - You delivered exactly as estimated.

    **Example:** Quoted 6 hours, delivered in 6 hours = 100% efficiency

    ✅ **Perfect!** Your estimates are accurate.
  </Tab>

  <Tab title="Under 100% (Overage)">
    **Actual > Quoted** - The work took longer than estimated.

    **Example:** Quoted 6 hours, delivered in 9 hours = 67% efficiency

    ⚠️ **Needs attention.** This creates "overage" that reduces profitability.
  </Tab>
</Tabs>

## How Efficiency Works in CharleOS

CharleOS uses **value-based billing** that caps how much can be billed, regardless of time spent. This makes efficiency critical:

### The Billing Formula

For every task requirement, CharleOS calculates billable time using:

```formula Value-Based Billing theme={null}
Billable Time = MIN(max, MAX(average, actual))
```

Where:

* **Average** = The quoted time (middle of the t-shirt size range)
* **Maximum** = The upper bound of the t-shirt size range
* **Actual** = Time actually logged

This creates three outcomes:

<Tabs>
  <Tab title="Efficient Delivery (Banked Time)">
    **Scenario:** Actual \< Average

    ```example theme={null}
    Quote: Medium (3-6 hours, average 4.5 hours)
    Actual: 3 hours logged

    Billable = MIN(6, MAX(4.5, 3)) = MIN(6, 4.5) = 4.5 hours
    Banked = 4.5 - 3 = 1.5 hours
    ```

    You delivered in 3 hours but can bill 4.5 hours. The 1.5-hour difference is **banked time**—pure profit.

    ✅ This improves day rates and profitability.
  </Tab>

  <Tab title="On-Target Delivery">
    **Scenario:** Average ≤ Actual ≤ Maximum

    ```example theme={null}
    Quote: Medium (3-6 hours, average 4.5 hours)
    Actual: 5 hours logged

    Billable = MIN(6, MAX(4.5, 5)) = MIN(6, 5) = 5 hours
    Banked = 0
    Overage = 0
    ```

    You're within the estimated range. Billable time equals actual time.

    ✅ Estimate was accurate, no profit or loss.
  </Tab>

  <Tab title="Over-Run (Overage)">
    **Scenario:** Actual > Maximum

    ```example theme={null}
    Quote: Medium (3-6 hours, average 4.5 hours)
    Actual: 8 hours logged

    Billable = MIN(6, MAX(4.5, 8)) = MIN(6, 8) = 6 hours
    Overage = 8 - 6 = 2 hours
    ```

    You spent 8 hours but can only bill 6 hours. The 2-hour difference is **overage**—non-billable work you're absorbing.

    ⚠️ This hurts day rates and profitability.
  </Tab>
</Tabs>

## T-Shirt Sizing and Estimates

Estimates in CharleOS use [t-shirt sizing](/concepts/estimation/t-shirt-sizing) with time ranges:

| Size    | Time Range  | Quoted (Average) | Maximum  |
| ------- | ----------- | ---------------- | -------- |
| **XS**  | 0.5-1 hour  | 45 mins          | 60 mins  |
| **S**   | 1-3 hours   | 2 hours          | 3 hours  |
| **M**   | 3-6 hours   | 4.5 hours        | 6 hours  |
| **L**   | 6-12 hours  | 9 hours          | 12 hours |
| **XL**  | 12-24 hours | 18 hours         | 24 hours |
| **XXL** | 24-48 hours | 36 hours         | 48 hours |

When a quote is approved and converted to a task:

* `quotedMinutes` = average of the range
* `quotedMaxMinutes` = maximum of the range

These become the baseline for efficiency tracking.

## Requirement-Level Efficiency

Efficiency is tracked at the **requirement level**, not just the task level. This gives granular insights.

### Requirement Types

Tasks can have multiple requirement types:

<CardGroup cols={2}>
  <Card title="Design" icon="palette">
    Design work including:

    * Initial design
    * Client design feedback
    * Design revisions
  </Card>

  <Card title="Development" icon="code">
    Development work including:

    * Implementation
    * Internal QA review and fixes
    * External QA review and fixes
    * Deployment
  </Card>

  <Card title="SEO" icon="magnifying-glass">
    SEO optimization work
  </Card>

  <Card title="Retain" icon="repeat">
    Ongoing maintenance and support
  </Card>
</CardGroup>

Each requirement is estimated separately using t-shirt sizing, and efficiency is tracked per requirement.

### Example: Task with Multiple Requirements

**"Redesign Homepage" task:**

| Requirement    | Size        | Quoted  | Max     | Actual  | Billable | Banked/Overage |
| -------------- | ----------- | ------- | ------- | ------- | -------- | -------------- |
| Design         | L (6-12h)   | 9h      | 12h     | 7h      | 9h       | +2h banked ✅   |
| Development    | XL (12-24h) | 18h     | 24h     | 28h     | 24h      | -4h overage ⚠️ |
| **Task Total** | -           | **27h** | **36h** | **35h** | **33h**  | **-2h net**    |

**Analysis:**

* Design was efficient (+2h banked)
* Development over-ran (-4h overage)
* Net result: -2h overage overall

This granularity helps identify **where** efficiency issues occur.

## Where to See Efficiency

Efficiency metrics appear throughout CharleOS:

<AccordionGroup>
  <Accordion title="Your Dashboard (IC)" icon="user">
    See your personal efficiency for the last 7 days:

    * Total banked minutes
    * Total overage minutes
    * Net efficiency (banked - overage)
    * Status badge: "banking" | "on\_track" | "overage"
    * Comparison to previous week

    This shows your overall delivery performance.
  </Accordion>

  <Accordion title="Client Detail Pages" icon="building">
    Each client profile shows efficiency for completed tasks in the current month:

    * Banked minutes
    * Overage minutes
    * Net efficiency
    * Month-over-month comparison

    This shows client-level profitability and estimate accuracy.
  </Accordion>

  <Accordion title="Task Detail Pages" icon="check-square">
    Each task shows requirement-level efficiency:

    * Quoted time (average)
    * Maximum time
    * Actual time logged
    * Billable time
    * Banked/overage indicators per requirement

    This helps you understand efficiency at the granular level.
  </Accordion>

  <Accordion title="Manager Dashboard" icon="users">
    Managers see team efficiency:

    * Department-level efficiency
    * Individual team member efficiency
    * Trends over time

    This helps identify training needs and process improvements.
  </Accordion>
</AccordionGroup>

## Efficiency Status

CharleOS categorizes efficiency into three states:

| Status       | Condition | Badge                                         | What It Means                                 |
| ------------ | --------- | --------------------------------------------- | --------------------------------------------- |
| **Banking**  | Net > 0   | <span style={{color: 'green'}}>✓</span> Green | Creating banked time, improving profitability |
| **On Track** | Net = 0   | <span style={{color: 'blue'}}>−</span> Blue   | Breaking even, estimates are accurate         |
| **Overage**  | Net \< 0  | <span style={{color: 'red'}}>!</span> Red     | Losing time, hurting profitability            |

```example Example theme={null}
Last 7 days:
- Banked: 12 hours
- Overage: 5 hours
- Net: +7 hours
- Status: Banking ✅
```

## How Time Is Tracked

For efficiency tracking, time entries must be linked to:

### 1. Subtasks

Tasks are broken down into subtasks that map to requirement types:

**Design Subtasks:**

* Design work
* Client design feedback

**Development Subtasks:**

* Development work
* Internal QA review
* Internal QA fixes
* External QA review
* External QA fixes
* Deployment

When you log time to a subtask, it's aggregated into the appropriate requirement.

### 2. Time Entry Fields

Each time entry includes:

* `duration` - Minutes logged
* `date` - When work was done
* `activityType` - Type of work (maps to requirement)
* `isBillable` - Whether it counts toward billable time
* `taskId` or `subtaskId` - What it's linked to

Only entries with `isBillable = true` count toward efficiency calculations.

### 3. Automatic Aggregation

When time entries are created, updated, or deleted, CharleOS automatically:

1. Sums actual minutes per requirement
2. Applies the billing formula
3. Updates `task_requirement.actualMinutes`, `billableMinutes`, `bankedMinutes`, `overageMinutes`
4. Aggregates to task level
5. Updates task-level efficiency metrics

This happens in real-time, so efficiency metrics are always current.

## What Affects Efficiency

Understanding what drives efficiency helps you improve it:

### Things That Improve Efficiency (Create Banked Time)

| Factor                  | How It Helps                                   |
| ----------------------- | ---------------------------------------------- |
| **Accurate Estimates**  | Setting realistic expectations you can beat    |
| **Clear Requirements**  | Less rework and back-and-forth                 |
| **Good Preparation**    | Understanding the work before starting         |
| **Reusable Components** | Leveraging existing code/designs               |
| **Focused Work**        | Minimizing interruptions and context switching |
| **Experience**          | Doing similar work becomes faster              |
| **Process Efficiency**  | Streamlined workflows reduce waste             |

### Things That Hurt Efficiency (Create Overage)

| Factor                   | How It Hurts                              |
| ------------------------ | ----------------------------------------- |
| **Poor Estimates**       | Underestimating complexity or time needed |
| **Scope Creep**          | Work expanding beyond original scope      |
| **Unclear Requirements** | Rework due to misunderstandings           |
| **Technical Debt**       | Working around old code slows delivery    |
| **Interruptions**        | Context switching wastes time             |
| **Unexpected Issues**    | Bugs, environment problems, dependencies  |
| **Learning Curve**       | New technologies or unfamiliar work       |

## Efficiency and Day Rates

Efficiency directly impacts [day rates](/concepts/financial/day-rates):

<Tabs>
  <Tab title="High Efficiency → Better Day Rates">
    **Scenario:** You consistently create banked time.

    **Impact on day rate:**

    * Same revenue, less time spent
    * Days used is lower
    * Actual day rate increases

    ```example theme={null}
    Client: £5,000/month, 60 hours allocated

    Efficient delivery:
    - Billable: 45 hours (banked 15 hours)
    - Days used: 45 ÷ 7.5 = 6 days
    - Day rate: £5,000 ÷ 6 = £833/day ✅

    Inefficient delivery:
    - Billable: 75 hours (overage 15 hours)
    - Days used: 75 ÷ 7.5 = 10 days
    - Day rate: £5,000 ÷ 10 = £500/day ⚠️
    ```

    Efficiency is the fastest way to improve day rates.
  </Tab>

  <Tab title="Low Efficiency → Worse Day Rates">
    **Scenario:** You consistently create overage.

    **Impact on day rate:**

    * Same revenue, more time spent
    * Days used is higher
    * Actual day rate decreases

    This is over-servicing—giving clients more work than they're paying for.
  </Tab>
</Tabs>

## Worked Examples

### Example 1: Perfectly On-Target

**Task:** "Add user profile page"

* **Design**: S (1-3h, avg 2h, max 3h)
* **Development**: M (3-6h, avg 4.5h, max 6h)

**Time logged:**

* Design: 2.5 hours
* Development: 5 hours

**Billing calculation:**

| Requirement | Quoted   | Max    | Actual   | Billable                   | Banked | Overage |
| ----------- | -------- | ------ | -------- | -------------------------- | ------ | ------- |
| Design      | 2h       | 3h     | 2.5h     | MIN(3, MAX(2, 2.5)) = 2.5h | 0      | 0       |
| Development | 4.5h     | 6h     | 5h       | MIN(6, MAX(4.5, 5)) = 5h   | 0      | 0       |
| **Total**   | **6.5h** | **9h** | **7.5h** | **7.5h**                   | **0**  | **0**   |

✅ Perfectly on target. Estimate was accurate.

### Example 2: Efficient Design, Development Overage

**Task:** "Redesign checkout flow"

* **Design**: L (6-12h, avg 9h, max 12h)
* **Development**: XL (12-24h, avg 18h, max 24h)

**Time logged:**

* Design: 7 hours
* Development: 28 hours

**Billing calculation:**

| Requirement | Quoted  | Max     | Actual  | Billable                   | Banked | Overage |
| ----------- | ------- | ------- | ------- | -------------------------- | ------ | ------- |
| Design      | 9h      | 12h     | 7h      | MIN(12, MAX(9, 7)) = 9h    | 2h ✅   | 0       |
| Development | 18h     | 24h     | 28h     | MIN(24, MAX(18, 28)) = 24h | 0      | 4h ⚠️   |
| **Total**   | **27h** | **36h** | **35h** | **33h**                    | **2h** | **4h**  |

**Net: -2h overage**

**Analysis:**

* Design was efficient (+2h banked)
* Development over-ran (-4h overage)
* Net result: losing 2 hours overall
* **Action**: Review what caused development overage

### Example 3: Everything Under-Estimated

**Task:** "Build complex reporting dashboard"

* **Design**: M (3-6h, avg 4.5h, max 6h)
* **Development**: L (6-12h, avg 9h, max 12h)

**Time logged:**

* Design: 8 hours
* Development: 18 hours

**Billing calculation:**

| Requirement | Quoted    | Max     | Actual  | Billable                  | Banked | Overage |
| ----------- | --------- | ------- | ------- | ------------------------- | ------ | ------- |
| Design      | 4.5h      | 6h      | 8h      | MIN(6, MAX(4.5, 8)) = 6h  | 0      | 2h ⚠️   |
| Development | 9h        | 12h     | 18h     | MIN(12, MAX(9, 18)) = 12h | 0      | 6h ⚠️   |
| **Total**   | **13.5h** | **18h** | **26h** | **18h**                   | **0**  | **8h**  |

**Net: -8h overage**

**Analysis:**

* Significantly under-estimated across the board
* Gave away 8 hours of work
* **Action**: Review estimation process, use larger t-shirt sizes for complex work

## Tips for Improving Efficiency

<AccordionGroup>
  <Accordion title="Review Past Tasks Before Estimating" icon="clock-rotate-left">
    Look at similar tasks you've delivered:

    * What size did you estimate?
    * How long did it actually take?
    * What unexpected issues came up?

    Use historical data to calibrate estimates.
  </Accordion>

  <Accordion title="Clarify Requirements Before Starting" icon="comments">
    Spend 15 minutes clarifying requirements upfront to save hours of rework later:

    * What's in scope and out of scope?
    * What are the success criteria?
    * Are there any edge cases?
    * What does "done" look like?
  </Accordion>

  <Accordion title="Track Time as You Go" icon="stopwatch">
    Don't wait until end of day to log time:

    * Log time when switching tasks
    * Note what took longer than expected
    * This data improves future estimates
  </Accordion>

  <Accordion title="Identify Patterns in Overage" icon="magnifying-glass">
    When you have overage, ask:

    * Was the estimate too optimistic?
    * Did scope expand mid-task?
    * Were there unexpected technical issues?
    * Could the approach have been better?

    Learn from patterns to improve processes.
  </Accordion>

  <Accordion title="Communicate Early When Over-Running" icon="triangle-exclamation">
    If a task is taking longer than expected:

    * Don't wait until it's done to raise it
    * Flag it when you hit 75% of the max estimate
    * Discuss whether to adjust scope or accept overage

    Transparency helps manage expectations.
  </Accordion>

  <Accordion title="Celebrate Banked Time" icon="trophy">
    When you deliver efficiently:

    * Note what went well
    * Share with the team
    * Apply those practices to future work

    Positive reinforcement of good practices.
  </Accordion>
</AccordionGroup>

## Common Misconceptions

<AccordionGroup>
  <Accordion title="Misconception: Overage means I'm bad at my job" icon="x">
    **Reality:** Overage can happen for legitimate reasons:

    * Genuinely underestimated complexity
    * Unexpected technical issues
    * Requirements weren't clear
    * Scope expanded mid-task

    The key is learning from it, not feeling bad about it.
  </Accordion>

  <Accordion title="Misconception: I should pad estimates to always bank time" icon="x">
    **Reality:** Over-estimating has downsides:

    * Quotes become uncompetitive
    * Clients may question value
    * Encourages work to fill time (Parkinson's Law)

    The goal is **accurate** estimates that you can reasonably beat, not inflated ones.
  </Accordion>

  <Accordion title="Misconception: Efficiency only matters for profitability" icon="x">
    **Reality:** Efficiency affects:

    * Client trust (are estimates reliable?)
    * Team morale (constant overage is demoralizing)
    * Capacity planning (inaccurate estimates mess up schedules)
    * Learning and improvement culture

    It's about more than just money.
  </Accordion>
</AccordionGroup>

## Related Concepts

<CardGroup cols={2}>
  <Card title="Day Rates" icon="pound-sign" href="/concepts/financial/day-rates">
    Efficiency directly impacts day rates—banked time improves profitability per day
  </Card>

  <Card title="T-shirt Sizing" icon="ruler" href="/concepts/estimation/t-shirt-sizing">
    Learn how to estimate work using t-shirt sizes that feed efficiency tracking
  </Card>

  <Card title="Value-Based Billing" icon="calculator" href="/concepts/billing/billing-model">
    Understand the billing model that makes efficiency so important
  </Card>

  <Card title="Time Tracking" icon="clock" href="/user-guide/time-tracking">
    Learn how to log time accurately to track efficiency
  </Card>
</CardGroup>
