Thuta Learning
ProjectsDigital Businessbeginner

Project: Build an Offer and Pricing Plan

What you'll walk away with

  • Explain the core ideas behind Project: Build an Offer and Pricing Plan
  • Read the diagram/template and trace how the business model or decision connects
  • Explain how this applies to a real digital business idea

Build the mental model

This project combines the Value Proposition and Offer Creation Template lessons with the Pricing Models and Pricing Floor lessons — because an offer without a defensible price is just a wish list, and a price without a clear offer is just a number nobody can evaluate.

  • Target customer
  • The problem they have
  • The outcome they want
  • Your deliverables
  • Your timeline
  • What's explicitly included
  • What's explicitly excluded
  • Your price model
  • Proof you can deliver
  • Call to action

Scope creep starts with a blank field

Skipping the included/excluded fields is a common cause of scope creep — a customer assumes anything you didn't explicitly exclude is included, so vague offers quietly become unpaid extra work.

ApproachWhat it tells you
Cost-Plus FloorLabor hours x rate, plus software/support costs, divided by one minus your margin — a survival minimum, not a target.
Value-Based PriceWhat the outcome is actually worth to the customer, independent of what it costs you to deliver.

When the value-based estimate sits above your floor, price closer to the value estimate — pricing at the floor alone leaves real money on the table.

text
OFFER + PRICING PLAN
--------------------
OFFER + PRICING PLAN
---------------------
OFFER TEMPLATE                    PRICING DECISION
--------------                    ----------------
Target Customer      \
Problem                \
Desired Outcome         >---->   PRICING FLOOR (cost-plus)
Deliverables            /        labor + tools + support / margin
Timeline              /                    |
Included / Excluded                        v
Price Model                    VALUE-BASED CONSIDERATION
Proof                           (what is the outcome worth
Call To Action                   to the customer?)
                                            |
                                            v
                                     FINAL PRICE
                          (never below the floor; use the
                           value estimate when it is higher)

Connect it to a real scenario

Work through this project with one concrete example: a one-time "Website Audit & Fix" service for small business owners whose sites are slow and hard to use on mobile.

Fill the offer template completely

Target customer: small business owners with an underperforming site. Problem: slow load times and poor mobile navigation losing customers. Desired outcome: a faster, mobile-friendly site that converts more visitors. Deliverables: an audit report, a priority fix list, and the top ten fixes implemented. Timeline: five business days. List what's included (speed, mobile layout, broken links) and excluded (redesign, new content, ongoing maintenance).

Calculate your pricing floor

Estimate labor honestly (six hours for this scope), multiply by your hourly rate, add software/API costs, add a support-time allowance, then divide by one minus your desired margin.

Estimate the value-based price

Ask what a faster, higher-converting site is actually worth to this business owner over the next few months, independent of your own costs.

Compare and decide

If the value estimate is higher than your floor, price near the value estimate and keep your floor only as your walk-away minimum, never as your advertised price.

Try the working example

javascript
// Project: Build an Offer and Pricing Plan
// Builds a structured offer, then runs a cost-plus pricing floor calculation
// and compares it against a value-based estimate to recommend a final price.

function buildOffer(inputs) {
  return {
    targetCustomer: inputs.targetCustomer,
    problem: inputs.problem,
    desiredOutcome: inputs.desiredOutcome,
    deliverables: inputs.deliverables,
    timeline: inputs.timeline,
    included: inputs.included,
    excluded: inputs.excluded,
    priceModel: inputs.priceModel,
    proof: inputs.proof,
    callToAction: inputs.callToAction
  };
}

function calculatePricingFloor({ laborHours, hourlyRate, softwareCost, supportCost, desiredMarginPercent }) {
  const totalCost = laborHours * hourlyRate + softwareCost + supportCost;
  const floor = totalCost / (1 - desiredMarginPercent / 100);
  return {
    totalCost,
    floor: Math.round(floor * 100) / 100
  };
}

function recommendFinalPrice(floor, valueBasedEstimate) {
  if (valueBasedEstimate >= floor) {
    return {
      price: valueBasedEstimate,
      reasoning: "Value-based estimate is at or above the cost-plus floor -- price at the value estimate, since pricing at the floor would leave money on the table."
    };
  }
  return {
    price: floor,
    reasoning: "Value-based estimate falls below the cost-plus floor -- price at the floor to avoid working at a loss, or reduce scope / raise the outcome's value instead."
  };
}

// --- Example: one-time "Website Audit & Fix" service for small business owners ---
const offer = buildOffer({
  targetCustomer: "Small business owners with an existing but underperforming website",
  problem: "Their site is slow, hard to navigate on mobile, and losing potential customers",
  desiredOutcome: "A faster, mobile-friendly site that converts more visitors into leads",
  deliverables: ["Full technical + UX audit report", "Priority fix list", "Fixes implemented for top 10 issues"],
  timeline: "5 business days",
  included: ["Speed optimization", "Mobile layout fixes", "Broken link repair"],
  excluded: ["New page design", "Content writing", "Ongoing maintenance"],
  priceModel: "One-time fixed price",
  proof: "Case study: reduced load time from 6.2s to 1.8s for a prior client",
  callToAction: "Book a free 15-minute site review call"
});

const pricing = calculatePricingFloor({
  laborHours: 6,
  hourlyRate: 40,
  softwareCost: 15,
  supportCost: 25,
  desiredMarginPercent: 30
});

// Value-based estimate: the business owner's own estimate of what fixing
// this is worth to them (e.g. a slice of the monthly leads currently lost).
const valueBasedEstimate = 650;

const finalPrice = recommendFinalPrice(pricing.floor, valueBasedEstimate);

console.log("--- Offer ---");
console.log(JSON.stringify(offer, null, 2));
console.log("--- Pricing floor ---");
console.log(JSON.stringify(pricing, null, 2));
console.log("--- Final price recommendation ---");
console.log(JSON.stringify({ valueBasedEstimate, ...finalPrice }, null, 2));
You should see
Building the offer object and running calculatePricingFloor() with 6 labor hours at $40/hr, $15 in software costs, $25 in support allowance, and a 30% desired margin gives totalCost: 280 and floor: 400. Comparing that floor against the value-based estimate of $650 — since $650 is above the $400 floor — recommendFinalPrice() returns price: 650 with the reasoning that pricing at the floor alone would leave value on the table.

5-minute try-it

Using a real service you could offer, build a complete offer (all ten fields) and calculate its pricing floor using your own realistic labor hours, hourly rate, software/support costs, and desired margin. Then estimate a value-based price independently, compare the two, and write down your final recommended price with reasoning.

One important caution

Leaving the included/excluded fields vague, which quietly turns into unpaid scope creep once work begins.

Pricing at the cost-plus floor even when the value-based estimate is clearly higher, leaving money on the table.

Wikipedia: Value-Based PricingDigital Business

Easy traps

  • Leaving the included/excluded fields vague, which quietly turns into unpaid scope creep once work begins.
  • Pricing at the cost-plus floor even when the value-based estimate is clearly higher, leaving money on the table.
  • This is not a 'get rich quick' course -- it never promises fast, guaranteed, or passive income. Business always involves uncertainty, competition, execution, and risk.

Exercise

Using a real service you could offer, build a complete offer (all ten fields) and calculate its pricing floor using your own realistic labor hours, hourly rate, software/support costs, and desired margin. Then estimate a value-based price independently, compare the two, and write down your final recommended price with reasoning.

You'll know it worked when: Building the offer object and running calculatePricingFloor() with 6 labor hours at $40/hr, $15 in software costs, $25 in support allowance, and a 30% desired margin gives totalCost: 280 and floor: 400. Comparing that floor against the value-based estimate of $650 — since $650 is above the $400 floor — recommendFinalPrice() returns price: 650 with the reasoning that pricing at the floor alone would leave value on the table.

Project: Build an Offer and Pricing Plan | Thuta Learning