Handling Revisions: Fair Policies and Clear Boundaries
In this tutorial, you'll learn to handle client revisions with fair policies and clear boundaries. Why it matters: unlimited revisions destroy your profitability and create endless projects. By the end, you will have a revision management system that keeps clients happy and projects profitable.
Revisions are a natural part of freelance development. Clients need to review your work and request changes. The problem arises when there are no limits on revisions, leading to scope creep, frustration, and unpaid work.
Why Revision Policies Matter
Without revision boundaries, every project risks becoming never-ending.
| Problem | Impact | Solution |
|---|---|---|
| Unlimited revisions | Project never ends, profitability destroyed | Set revision limits in contract |
| Vague feedback | Wasted time on wrong changes | Structured feedback Process |
| Feedback by committee | Contradictory instructions | Single decision-maker |
| Late revisions | Rework of completed work | Revision deadlines |
flowchart TD
A[Deliverable Sent] --> B[Client Reviews]
B --> C{Within Revision Window?}
C -->|Yes| D[Compile Feedback]
C -->|No| E[Charge for Late Changes]
D --> F{Remaining Rounds?}
F -->|Yes| G[Implement Changes]
F -->|No| H[Offer Paid Revision]
G --> I[Resubmit]
H --> I
I --> J{Client Approves?}
J -->|No| B
J -->|Yes| K[Deliverable Complete]
Setting Revision Limits in Contracts
Define revision limits clearly in your contracts.
# Revision clause template
## Revisions
1. The Project Fee includes [2] rounds of revisions per deliverable.
2. A revision round includes changes requested within [5] business days of delivery.
3. Changes requested after [5] business days are considered new work.
4. Additional revision rounds will be billed at [$75] per hour.
5. Changes that exceed the original scope require a separate change request.
## What Constitutes a Revision
Revisions are changes to existing features within the agreed scope.
New features, pages, or functionality are not revisions.
They are scope changes subject to a change request.
## Feedback Requirements
All revision feedback must be provided in writing.
Feedback should be specific and actionable (e.g., "Move the button 20px left"
rather than "Make it look better").
Expected output: A clear revision clause that prevents ambiguity.
Limiting Revision Rounds
Define how many revision rounds are included and what happens after.
const revisionPolicy = {
includedRounds: 2,
windowDays: 5,
additionalRate: 75,
scopeChanges: "Billed separately as change requests",
calculateRound: function(roundNumber, isInWindow, isScopeChange) {
if (isScopeChange) {
return { billable: true, rate: this.additionalRate, type: "scope change" };
}
if (!isInWindow) {
return { billable: true, rate: this.additionalRate, type: "late revision" };
}
if (roundNumber <= this.includedRounds) {
return { billable: false, rate: 0, type: "included revision" };
}
return { billable: true, rate: this.additionalRate, type: "additional round" };
},
getStatus: function(roundNumber, daysSinceDelivery) {
const revision = this.calculateRound(
roundNumber,
daysSinceDelivery <= this.windowDays,
false
);
return `Revision ${roundNumber}: ${revision.type}`;
}
};
console.log(revisionPolicy.getStatus(1, 3));
console.log(revisionPolicy.getStatus(3, 2));
console.log(revisionPolicy.getStatus(1, 7));
Expected output: "Revision 1: included revision", "Revision 3: additional round", "Revision 1: late revision".
Structured Feedback Process
Good feedback leads to good revisions. Guide clients to give useful feedback.
class FeedbackCollector:
def __init__(self, deliverable_name):
self.deliverable = deliverable_name
self.items = []
def add_feedback(self, section, current_state, desired_change):
self.items.append({
"section": section,
"current": current_state,
"desired": desired_change,
"implemented": False
})
def get_round_summary(self):
total = len(self.items)
return f"Feedback round: {total} items for {self.deliverable}"
def implement(self, index):
if 0 <= index < len(self.items):
self.items[index]["implemented"] = True
def completion_percentage(self):
if not self.items:
return 100
done = sum(1 for i in self.items if i["implemented"])
return round((done / len(self.items)) * 100)
feedback = FeedbackCollector("Homepage Design")
feedback.add_feedback("Hero section", "Blue background", "Use brand green instead")
feedback.add_feedback("Button", "Rounded corners", "Square corners")
feedback.implement(0)
print(feedback.get_round_summary())
print(f"Completion: {feedback.completion_percentage()}%")
Expected output: 2 feedback items with 50% completion after implementing one.
Managing Feedback Quality
Teach clients how to give good feedback.
| Type | Example | Quality |
|---|---|---|
| Vague | "Make it pop" | Poor |
| Specific | "Increase the heading size to 32px and change colour to #333" | Good |
| Contradictory | "Make it minimal but add more elements" | Poor |
| Actionable | "Move the CTA above the fold, add padding of 24px" | Excellent |
| Scope change | "Add a whole new pricing section" | Not a revision |
Dealing with Feedback by Committee
When multiple stakeholders give feedback, designate a single point of contact.
def consolidate_feedback(stakeholder_comments):
all_items = []
for person, comments in stakeholder_comments.items():
for comment in comments:
all_items.append({
"from": person,
"comment": comment,
"resolved": False
})
consolidated = {}
for item in all_items:
key = item["comment"].lower().strip()
if key not in consolidated:
consolidated[key] = item
else:
print(f"Duplicate feedback from {item['from']} ignored")
return list(consolidated.values())
feedback_data = {
"CEO": ["Make logo bigger", "Use blue colour"],
"Marketing": ["Make logo bigger", "Add more whitespace"],
"Developer": ["Use blue colour", "Optimize images"]
}
result = consolidate_feedback(feedback_data)
print(f"Consolidated: {len(result)} unique items")
for item in result:
print(f"- {item['comment']} (from {item['from']})")
Expected output: 3 unique feedback items with duplicates removed.
The Revision Mindset
How you present your revision policy matters.
# Framing revision limits positively
"We include two rounds of revisions to ensure the final product
meets your expectations without endless back-and-forth. This keeps
the project focused and delivers results faster.
If you need additional rounds after that, we can add them at a
discounted hourly rate. Most clients find two rounds sufficient."
Expected output: A revision policy framed as a benefit to the client.
Handling the "Final" Revision That Is Not Final
Some clients will keep finding things to change.
| Sign | Response |
|---|---|
| Client requests third round | Remind of policy, offer paid revision |
| Client keeps adding small changes | Ask if there is a complete list |
| Client contradicts previous feedback | Ask for clarification in writing |
| Client asks for unlimited revisions | Offer a retainer or fixed-term support |
When to Push Back on Revisions
Not all revision requests are reasonable.
function shouldPushBack(request) {
const reasons = [];
if (request.round > 2) reasons.push("Exceeds included rounds");
if (request.daysSinceDelivery > 5) reasons.push("Outside revision window");
if (request.isScopeChange) reasons.push("Scope change, not revision");
if (request.specificity < 3) reasons.push("Feedback too vague");
return {
pushBack: reasons.length > 0,
reasons: reasons
};
}
const revisionRequest = { round: 3, daysSinceDelivery: 7, isScopeChange: false, specificity: 2 };
console.log(shouldPushBack(revisionRequest));
Expected output: Push back recommended with reasons: exceeds rounds, outside window, too vague.
Practice Questions
- Why should you limit revision rounds in freelance contracts?
- How many revision rounds are standard to include?
- What is the difference between a revision and a scope change?
- How do you handle feedback from multiple stakeholders?
- What makes feedback actionable and useful?
Answers:
- Unlimited revisions destroy profitability and create never-ending projects.
- Two rounds per deliverable is standard.
- A revision changes something within the agreed scope. A scope change adds new functionality outside the original scope.
- Designate a single point of contact who consolidates feedback from all stakeholders before sharing with you.
- Feedback should be specific, referenceable, and include the desired change.
Challenge
Draft a revision policy clause for your contract. Include the number of rounds, revision window, what constitutes a revision vs a scope change, and pricing for additional rounds.
Real-World Task
Review your most recent project with a client. Count how many revision rounds occurred and whether any went beyond the agreed limit. Create a revision policy based on this guide and include it in your next contract.
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro