Section Heading
How To Price WordPress Projects When the Client Wants Iterations
The problem is when "a few quick tweaks" turns a clean fixed bid into weeks of unpaid work.

Kurt von Ahnen
CEO

Clients asking for iterations isn’t the problem. The problem is when “a few quick tweaks” turns a clean fixed bid into weeks of unpaid work.
In WordPress projects, iteration usually means revisions to design, copy, layout, features, or integrations after the client sees something real. That’s normal. People understand what they want after they can click it, scroll it, and show it to a stakeholder.
Our job is to price WordPress work so iteration stays healthy. That means we keep speed, deadlines, and budget discipline intact. In this post, we’ll separate iteration from scope creep, choose a pricing model that fits uncertainty, set iteration boundaries in writing, and handle change requests without drama.
First, separate real “iterations” from scope creep (so we price the right thing)
Pricing starts with naming the work. If we can’t label a request, we can’t price it. On discovery calls, we listen for one thing: are they refining an agreed direction, or changing the target?
A true iteration improves something we already agreed to build. It stays inside the same goal, same page type, same user flow, and same integration list. Scope creep changes those fundamentals.
Here’s a lightweight checklist we use when classifying a request:
- Does it change who the site is for (new user roles, new audiences)?
- Does it change what’s being delivered (new templates, new features, new pages)?
- Does it change how money or access works (memberships, paywalls, payment gateways)?
- Does it introduce a new system to connect (CRM, email automation, forums, SCORM, analytics)?
If the answer is yes, we treat it as scope. If it’s a no, it’s likely iteration. That one decision protects margins, timelines, and relationships.
Iteration risk also hides in familiar WordPress places: theme styling, block patterns, responsive fixes, plugin settings, content migration cleanup, performance passes, and accessibility updates. “Small” copy edits can ripple too, because copy affects layout, layout affects breakpoints, and breakpoints trigger QA.
For eLearning builds, iteration hotspots expand: course templates, lesson layouts, quizzes, memberships, reporting, access plans, and checkout behavior. Tools like LifterLMS make this easier, but choices still matter. The free core plugin can cover a lot, while add-ons extend payments, quizzes, coupons, videos, groups, and more. Many “iterations” are really late decisions about which features and add-ons belong in scope.
A quick test we use: does the request change the agreed outcome or just refine it?
We keep one simple rule: iterations refine the agreed outcome, scope changes it.
Examples that are usually iterations:
- Adjust button color, spacing, or typography to match a style guide.
- Rewrite a headline, then re-balance the hero layout.
- Reorder sections on a landing page after a stakeholder review.
- Fix a mobile layout issue on an existing template.
- Update a LifterLMS lesson layout within the same course structure.
Examples that are usually scope:
- Add a new page type (for example, a new “Case Study” template).
- Create new role-based access rules for departments or partners.
- Switch payment gateways mid-build (Stripe to Authorize.Net, or vice versa).
- Add a forum or social component that wasn’t planned.
- Add Infusionsoft automation after the build has started.
To make that test work, we document the “agreed outcome” early. We like a one-page scope summary that includes a sitemap, key templates, core user flows (lead, signup, checkout, login), and a short integration list. When we do LMS work, we add course structure, memberships, and payment plan assumptions. That page becomes the reference point for every iteration conversation.
Where iteration risk hides in WordPress builds
Some areas invite more opinions than others. Home pages and pricing pages attract the most feedback, because they carry the business message. Navigation is another magnet, because it forces tradeoffs.
We also watch for these hotspots:
- Responsive breakpoints (desktop decisions rarely survive first mobile review)
- Forms and conditional logic (fields multiply, then validation and emails change)
- SEO metadata and schema (often “remembered” late)
- Analytics and tracking (events, pixels, consent rules)
- Membership rules and LMS access flows (what’s free, what’s paid, what unlocks when)
- Checkout, receipts, and account pages (where small changes can break trust)
The hidden cost is not the edit. It’s the regression testing. A simple CSS change can touch four templates. A “quick” checkout tweak can require retesting taxes, coupons, emails, and subscription renewals.
When we price iteration, we price QA with it. Otherwise, we’re donating risk.
For teams moving training content into WordPress, SCORM decisions can also trigger late changes. If that’s on the roadmap, it helps to align early on the approach and tooling, because it affects templates, reporting, and testing time. When we need a primer for stakeholders, we often point them to the benefits of moving SCORM to LifterLMS.
Choose a pricing model that matches how uncertain the project feels
A pricing model is less about math and more about uncertainty. When clients want iterations, they’re telling us something: requirements are still forming, or stakeholders will react as they go. We can fight that reality, or we can price around it.
The best model makes change safe and visible, not “free and hidden.”
Here’s how we frame common options:
| Pricing model | Best when | What clients like | What we must protect |
|---|---|---|---|
| Fixed price with capped iterations | Scope is stable and direction is clear | Predictable cost | Tight iteration rules and fast feedback |
| Time and materials with a budget cap | Discovery is fuzzy or stakeholders are many | Flexibility with a ceiling | Weekly reporting and backlog discipline |
| Phased pricing (paid discovery, then build) | Unknowns could be expensive later | Clarity before commitment | Strong discovery outputs and sign-off |
| Subscription or Website-as-a-Service | Iteration is ongoing by nature | Lower upfront cost, steady support | Clear monthly limits and priorities |
For LMS projects, we lean toward phased pricing more often. Reporting, quizzes, memberships, payments, and integrations carry real unknowns. LifterLMS supports one-time or recurring access plans, and it can take payments through gateways like Stripe, PayPal, and Authorize.Net. Those are great options, but switching lanes late costs time.
If a client is still deciding whether they need advanced quizzes, complex memberships, or multiple payment gateways, we don’t pretend it’s a stable fixed bid.
Fixed price with a clear iteration allowance (best when the scope is stable)
Fixed price can work well, as long as we stop pretending revisions are unlimited. We price a base scope, add a small buffer, then define revision rounds per deliverable.
A clean example:
- Homepage design: 2 rounds
- Inner-page template: 1 round
- Checkout and account pages: 1 round
- Final polish pass: 1 round (tiny fixes only)
We define what a “round” means. For us, it’s one consolidated feedback list, delivered at once, within a set time window. If feedback drips in over a week, that’s not a round, it’s a new cycle.
After the allowance, changes convert to hourly work or a change order. No drama, just mechanics.
Two rules keep fixed pricing honest:
- Content-ready requirement: if they want copy-driven design, they must supply copy on time.
- Feedback deadline: if feedback arrives late, the launch date moves, or we bill for re-planning.
If we don’t charge for iteration time, we still pay for it, we just pay with our margin.
Time and materials with a budget cap (best when discovery is fuzzy)
When stakeholders are many, time and materials can feel safer for everyone, if we add a guardrail. That guardrail is a not-to-exceed cap, paired with weekly burn reports.
We set an initial cap using ranges:
- Best-case: if decisions are fast and scope is clean
- Likely-case: normal iteration and QA
- Worst-case: heavy iteration, stakeholder churn, late content
Then we work from a prioritized backlog. Each week, the client sees what shipped, what changed, and what’s next. Before we start the next block of hours, they approve it.
This model handles iterations naturally, because every change has a visible cost. Clients can still iterate, but they stop asking for “just one more thing” when they can see the meter.
Phased pricing: paid discovery, then a tighter build quote
If we had to pick one approach for iteration-heavy WordPress work, it’s paid discovery. Phase 1 is where we buy clarity. Phase 2 is where we execute with fewer surprises.
In discovery, we produce artifacts that reduce iteration fights later:
- Requirements and constraints
- Sitemap and key page templates
- Wireframes or page goals
- Technical plan (themes, blocks, custom post types, plugins)
- Integration decisions and risks
- A launch plan with review dates
For eLearning, discovery is where we confirm course structure, memberships, access plans, quiz needs, and payment choices. Those decisions affect everything downstream, including QA. If SCORM is involved, we also align on the content packaging and tracking plan early. When clients need practical context, we share our integrate SCORM into WordPress guide so everyone speaks the same language before quoting build work.
Put iteration rules in writing so we can say “yes” without losing money
Clients don’t hate boundaries. They hate surprises. When iteration rules are clear, we can say “yes” more often, because “yes” has a price and a process.
We write iteration terms in plain language:
- What counts as an iteration versus a change request
- How many rounds are included per deliverable
- How feedback must be delivered (single list, annotated, by email or tool)
- When feedback is due
- What counts as approval
- What happens when they approve, then reopen
We also add stakeholder rules. The easiest way to lose money on a WordPress project is letting five people give feedback in five directions. We require one owner who consolidates input.
Iteration guardrails that clients actually accept
The guardrails we’ve seen clients accept, and even appreciate, look like this:
- One feedback owner per deliverable.
- One list per round, bundled feedback only.
- Feedback due within X business days (or the timeline shifts).
- Unused rounds don’t roll over to other deliverables.
- Approvals are binding, reopening equals a change request.
- We pause work if feedback is missing, to protect the schedule.
We also spell out client homework: content, brand assets, logins, hosting access, and plugin licenses if needed. When those items arrive late, the timeline moves. In some cases, cost increases too, because we have to rework completed sections.
These rules protect the launch date. That’s what clients actually want. They might ask for flexibility, but they celebrate on-time delivery.
A simple change request flow we use when iteration turns into new scope
When iteration becomes scope, we don’t argue. We switch systems.
Our change request flow stays simple:
- Capture the request in writing.
- Estimate impact on hours, cost, and timeline.
- Offer options (do it now, swap with another item, or push to later).
- Get written approval.
- Implement, then test.
A small “change budget” also helps. Many clients want a few extras, and they hate paperwork for each one. So we add a pre-approved bucket for predictable add-ons.
For LMS projects, integrations are the classic trigger. Email tools, CRMs, payment gateways, and automation often enter the chat mid-build. We treat those as separate line items because they include setup, testing, and support.
One practical example: Infusionsoft requests often show up late, after marketing gets involved. In the LifterLMS ecosystem, teams commonly connect Infusionsoft through WP Fusion. That choice affects tags, automations, and testing, so we scope it as a decision, not an “iteration.”
How we present the numbers so clients feel in control (and we stay profitable)
Iteration pricing can sound defensive if we present it like a shield. Instead, we frame it like a steering wheel. Clients want control. We want profitability. Clear numbers do both.
We break estimates into deliverables and review cycles. We also state assumptions, because assumptions are where iteration hides. For example, “two templates,” “one checkout flow,” or “one payment gateway.” When those assumptions change, the price changes.
When we describe eLearning builds, we remind clients that WordPress can scale from simple course delivery to complex training platforms. Many groups start with the LifterLMS core plugin, then add features as needed. That modular approach keeps budgets under control, as long as we decide the add-ons early. If a stakeholder needs background, we share eLearning integration in WordPress as a neutral explainer.
Estimate iterations like a mini-sprint: build, review, fix, and test
We estimate each iteration cycle like a short sprint:
Total iteration cost = build time + review support + revision time + QA + project management
Review support matters. We may need to join a call, answer questions, or annotate options. QA matters even more, because changes ripple across devices and templates.
Hidden costs we plan for include staging time, backups, plugin conflict checks, performance checks, accessibility passes, and content migration re-tests. Those aren’t “extras,” they’re how we ship responsibly.
If we want to stay fast, we keep review windows short. If we want to stay on budget, we limit rounds. If clients want unlimited flexibility, we move them to time and materials or subscription.
Use good, better, best packages to make iteration a choice
Packages work because they turn iteration into a menu. The client chooses speed, flexibility, or ongoing support, with clear limits.
Here’s a simple structure we’ve used:
| Package | Best for | Iterations included | How scope stays controlled |
|---|---|---|---|
| Launch | Fast startup launch | 1 round per key deliverable | Strict templates and tight review dates |
| Growth | Teams with real feedback cycles | 2 rounds plus a small change budget | Clear assumptions, staged approvals |
| Partner | Ongoing iteration after launch | Monthly iteration limits | Backlog priorities and monthly planning |
We write limits clearly: number of pages, number of templates, integrations included, and response times. When a client chooses Growth or Partner, they’re buying room to think. When they choose Launch, they’re buying speed.
If they need course content fast, we can also reduce iteration by starting with pre-built structures. For some teams, importing a ready course framework cuts weeks of back-and-forth. When that fits, we point them to pre-formatted LifterLMS courses as an example of how “start from a proven base” reduces revision churn.
Conclusion
Iteration is normal in WordPress work. Unpriced iteration is where agencies bleed.
To price projects fairly when the client wants iterations, we stick to a simple framework:
- Classify requests as iteration or scope change, then price the right thing.
- Pick a pricing model that matches uncertainty, not wishful thinking.
- Define iteration rounds per deliverable, with feedback rules and deadlines.
- Run a clear change request flow when new scope appears.
- Present numbers as options, so clients stay in control and we stay profitable.
When we expect ongoing iteration, we treat it like a product, either phased delivery or a subscription. Either way, we protect the same thing: a clear path to launch, with boundaries that keep the work honest.