The scariest email in freelance instructional design isn't the one where a project goes sideways. It's the one that just says: "Sounds great — what would you charge for this?"Cursor blinking. You don't want to lowball and spend three weekends resenting the job. You don't want to throw out a big number and never hear back. So you stall, you write "it depends," and you sound like every other ID who hasn't figured this out yet.
Here's the thing nobody tells you on your first project: pricing isn't a vibe, and it isn't a single number you pull from the air. It's a small calculator with four inputs — an hourly floor, a project ceiling, a discount you can actually afford to quote, and the line where you politely walk. Build it once and that blinking cursor stops being scary.
Clients don't buy Storyline hours. They buy a finished module with a known scope — so price the outcome and keep the hours to yourself.— the whole calculator in one line
Find your hourly floor first.
Before you can quote a project, you need one private number you will never put in a proposal: your hourly floor. This is the rate below which the work isn't worth doing — it covers your actual time, the unbillable hours (admin, sales, revisions you didn't scope), taxes, and the gaps between contracts. Most new freelancers compute a "rate" that quietly assumes they bill 40 hours a week. You don't. You bill maybe half that, and the floor has to absorb the rest.
So work backwards from the income you need, divide by the hours you can actually bill, then pad it for the unbillable load. The exact arithmetic is yours, but the shape is always the same: a floor that already accounts for the weeks you spend chasing the next gig instead of building courses.
// What you need to clear, after the gaps and the taxes. target_income = annual_take_home + taxes + tools_and_overhead; // Hours you ACTUALLY bill — not 2,080. Closer to half. billable_hours = weeks_working × realistic_billable_hours_per_week; // The floor. Quote projects from here; never go under it. const hourly_floor = target_income / billable_hours;
You'll anchor your first quotes to a full-time salary divided by 2,080 hours, win the work, and discover three months in that you're earning less than you did employed — while carrying all the risk. The floor is the one number that keeps a "yes" from becoming a slow-motion mistake.
Then price the project, not the hours.
The floor is for you. The clientgets a project price — a single number tied to a concrete deliverable and a definition of "done." Hourly billing is a trap on both ends: it punishes you for getting faster, and it tempts the client to litigate your timesheet. A fixed project price says "here is exactly what you receive, and here is what it costs." That's what they actually want to buy.
The trick to setting that number without guessing is to stop counting hours and start sorting work into effort tiers. Every ID project I've ever scoped slots into one of three:
Tier 1 — the awareness module.
A click-through course in Rise with stock assets, one review round, and SCORM 1.2 packaging. Low branching, low SME load. Fast to build, quick to price.
Tier 2 — the scenario build.
A branching module in Storyline with custom interactions, two SME review rounds, a scored quiz with reporting, and SCORM 2004 packaging. This is the bread-and-butter project, and it's where most underquoting happens — the review rounds and branching eat far more time than the seat-time estimate suggests.
Tier 3 — the program.
A multi-module program with xAPI instrumentation, facilitator guides, job aids, and a pilot cycle. Long timeline, heavy stakeholder load, real project management. Price it as the engagement it is, not as "a few modules."
When a quote request comes in, slot it into a tier, then adjust for the multipliers that actually move cost: audience size, number of languages, and review complexity. A 30-minute compliance module with legal review, three SME passes, and SCORM 2004 for Cornerstone is a completely different project than a 30-minute Rise course for internal awareness — even though a client will describe both as "a 30-minute module." Ask what business problem triggered the request before you name a price. The answer is the price.
Track your real hours per tier for six months. You'll find Tier 2 lands in a consistent band and Tier 3 runs much longer depending on review cycles. That data lets you quote fixed prices with a straight face. When a project blows past the estimate, diagnose why— scope creep, slow SMEs, or your own optimism — and fix the tier definition, not the next client's invoice.
Three pricing shapes that hold up.
Once you know the tier, you still have to choose how the money moves. There are three shapes worth using, ranked by how often they fit a first project:
Milestone pricing for a defined module.
Best for: clear scope, concrete deliverable, your first few gigs
When the deliverable is concrete — "one Storyline module, 20 minutes seat time, SCORM 2004, two revision rounds, facilitator guide" — quote a single number and break it into three payments: a deposit at kickoff, a second payment at storyboard approval, the balance at SCORM delivery. Name the change-order rate in the SOW before you sign, so a fourth revision round is a quote, not an argument.
What's good
- One fixed price, split across kickoff / storyboard / SCORM delivery
- Client never pays everything upfront; you never deliver everything unpaid
- Extra revision rounds trigger a change order at a rate you set
What's not
- Needs a genuinely clear scope to work — fuzzy briefs break it
- You eat the overrun if you under-scoped the tier
Sprint pricing for discovery-heavy work.
Best for: fuzzy scope, new clients, needs analysis before a build
When the brief is "we're not totally sure what we need yet," don't guess a flat fee — sell sprints. Sprint one delivers a needs analysis and storyboard outline; sprint two delivers a working prototype with one scenario path. Predictable income for you, an exit ramp for them. This is also how you generate the hour data that makes your future fixed quotes accurate.
What's good
- Each two-week sprint has one defined output the client can keep
- Client can stop after any sprint; you get paid for finished work
- Lowers a new client's risk while you both build trust
What's not
- Feels open-ended to clients who want one fixed number
- You have to actually ship something concrete every sprint
Advisory retainer for ongoing oversight.
Best for: client builds the content, you guard the quality
When a client's internal team authors the content but needs a senior eye on design quality, SCORM packaging, accessibility, or LMS config, structure a monthly block — say 10 to 20 hours — with a defined menu of what those hours cover. It's rarely your first deal, but it's the one that turns a single project into a relationship.
What's good
- Monthly block of hours with a clear menu: reviews, SCORM QA, pilots
- Positions you as a partner, not a vendor — more referrals
- Smooths the income gaps between build projects
What's not
- Harder to land before you have a track record
- Unused hours shouldn't roll over — define that or it drifts
You can mix shapes inside one engagement — sprint-priced discovery, milestone-priced build, an optional post-launch retainer — as long as you label the boundaries explicitly in the proposal. Clients reward that clarity, and it keeps a single flat fee from either undervaluing the build or overcharging for something simple.
The discount line and the walk-away line.
Two numbers do the negotiating for you. The first is the discount you can quote without bleeding — and the rule is simple: never cut the price without cutting the scope. If a client needs a smaller number, you trade for it. Drop a review round. Narrow the audience. Cut a language. Move voiceover to their side. A discount is a different project at a lower price, never the same project for less money.
The second number is the floor from section one — and that's your walk-away line. When the scope-adjusted price would still drop you below your hourly floor, the answer is a warm "no." Not a guilt trip, not a counteroffer you'll resent. Walking from work that pays under your floor is how you stay available for the work that pays above it.
Protect the scope, or the floor doesn't matter.
None of this survives contact with a client unless you fence the scope in writing. List the exclusions in plain language — not legalese — and make each one something a past client actually asked for: this project does not include translation, LMS upload and configuration, voiceover recording, ongoing maintenance after delivery, or more than two rounds of SME review.If it's happened once, it'll happen again; putting it on the list isn't adversarial, it protects the timeline the client needs too.
Then define change orders before the first one lands: additions beyond the agreed scope — new modules, extra review rounds, new audiences, format changes — get scoped and quoted separately, and work begins only after written approval. Build the "scope creep early-warning" habit: when someone says "could we also…" in a meeting, write it down where they can see it and say, "Great idea — let me scope that as an add-on so it doesn't delay the main delivery." That one sentence validates the request, signals a cost, and protects the timeline all at once.
Map each tier to a portfolio project a prospect can actually open. A hosted, playable Tier 2 module with the storyboard attached answers "what does this cost get me?" better than any proposal paragraph. When you raise your rates, prune the cheap quick-turn work from your featured projects — stale pricing in your portfolio trains prospects to expect stale prices. See how to host SCORM so it plays in the browser and how to embed it on a client's sitewhen you're ready to make those proofs clickable.
Frequently asked questions.
Should I charge hourly or per project for my first ID gig?
Quote the project, but compute it from an hourly floor you keep private. Clients buy a finished module with a known scope, not your timesheet. Hourly billing punishes you for getting faster and invites scope creep; a fixed project price tied to milestones protects both sides.
How do I price when I have no idea how long it will take?
Use sprint pricing. Sell defined two-week sprints with one concrete output each — a needs analysis, then a working prototype — so the client can stop after any sprint and you still get paid for finished work. After a few projects you will have real hour data per effort tier and can quote fixed prices with confidence.
What should I do when a client asks for a discount?
Trade scope for the discount instead of just cutting the number. Drop a review round, narrow the audience, or cut a language — never silently absorb the same work for less. If the ask drops you below your hourly floor, that is the walk-away line, not a negotiation.
How do I stop scope creep from eating my project fee?
Write exclusions in plain language in the SOW, define a change-order rate before the first change arrives, and when a client says "could we also," say "great idea — let me scope that as an add-on so it does not delay delivery." Naming the cost out loud keeps every "small" request from quietly becoming free work.
/06 Try it for free
Drop a SCORM file. See it live in 11 minutes.
Free for 3 modules. No card. Lifetime is $149 once. You read the article, you know how this is supposed to work — see it in your own browser.
About the author
Sarah Chen · Senior LXD · 10 yrs.
How to host a SCORM file (without an LMS).
Tutorial · 14 min read
How to actually host a SCORM file. Without an LMS.
Free SCORM hosting that actually works in 2026.
Tutorial · 8 min read
The five "free SCORM hosting" tools, ranked.
21 instructional designer portfolio examples we steal from.
Examples · 12 min read