← All articles
Custom Software11 min read

The Anatomy of a Software Estimate: Why 'Cheap' Developers Cost 3x More in the Long Run

South African businesses lose hundreds of thousands of rand to scope creep, technical debt, and hidden fees that never appear in the original quote. Here's how to read an estimate before you sign anything.

We Write Code·22 June 2026

A logistics company in Pretoria signed a software contract for R 85,000. Eighteen months and R 340,000 later, the system still wasn't live.

The original quote had looked thorough. Pages of it. Feature lists, wireframes, a timeline. The developer had a professional website and good testimonials. Nothing in the proposal flagged what was about to happen.

The problem wasn't fraud. It was something more common and less obvious: an estimate built to win the work, not to deliver it.

Why the cheapest quote is usually the most expensive project

Software estimates are not like quotes for tiling a bathroom. A tiler can walk the floor, measure the square metres, and give you a number with reasonable confidence. Software involves invisible complexity — things that only emerge once you start building, integrations that behave differently in production than in testing, requirements that seemed simple until someone actually tried to implement them.

This ambiguity creates an asymmetry: an inexperienced or unscrupulous developer can quote low precisely because they're not accounting for the hard parts. By the time those hard parts surface, the contract is signed, the relationship is established, and extracting yourself is expensive.

The businesses that end up paying 3x their original quote usually made the same mistake: they compared prices across proposals without comparing scope, assumptions, or methodology.

Here's what that gap typically looks like in practice.

The three hidden costs that don't appear in the original quote

1. Scope creep: the slow bleed

Scope creep is not usually a developer deceiving you. It's a structural problem with how most software is quoted.

An hourly-rate agency will quote for a defined set of features at the discovery stage. What that definition glosses over is the surrounding detail — the 40 small decisions that have to be made about how each feature works. What happens when a form is submitted with a duplicate email? Can a user undo a deletion? What's the error state when the payment gateway is down? Which fields are mandatory? Who gets notified when a record changes?

None of those questions appear in a feature list. All of them require time to decide and build. When the project starts and these questions surface — and they always do — there are two outcomes: either the developer absorbs the cost and cuts corners elsewhere, or a "change request" lands in your inbox with a number attached.

Change requests are the mechanism through which a R 100,000 project becomes a R 180,000 project. Each one looks small in isolation. R 3,500 for the export function. R 6,000 for the revised approval workflow. R 2,800 for the email notifications that "weren't in the original scope." After eight of them, you've spent 60% more than you planned and you're still three months from launch.

The businesses that avoid scope creep don't avoid it by finding a better developer. They avoid it by working with a team that accounts for the full scope upfront — including the unglamorous decisions around edge cases, error states, and integration behaviour.

2. Technical debt: the time bomb

Technical debt is code that works now but will cause problems later. It accumulates when a developer prioritises speed over quality — taking shortcuts to hit a deadline or a price point, leaving behind systems that are fragile, hard to modify, and expensive to maintain.

It's invisible to the buyer at handover. Your new system looks fine. It performs as expected. The user interface matches the mockups. The technical reality underneath — whether the code is structured well, documented, tested, and built to scale — isn't something you can assess from a browser.

Here's what technical debt actually costs a South African SME over three years:

Maintenance becomes expensive. A well-structured codebase can be understood by any competent developer. A poorly structured one is proprietary in practice — only the original developer can navigate it efficiently. If they're unavailable, busy, or have raised their rates, you're stuck. Every small change requires multiple hours of archaeology before a single line of code is modified.

Bugs appear at inconvenient times. Poorly tested systems tend to have surface-level QA but weak edge-case coverage. Failures surface in production — when real users do real things the developer didn't anticipate. A missed null check crashes the invoice generator. A race condition corrupts stock records during peak hours. A session handling bug exposes one customer's data to another.

Scaling becomes a rebuild. The system that handles 50 users often can't handle 500. When a business grows and the system struggles, the choice is between an expensive refactor or a complete rewrite. Either way, you're paying to redo work you already paid for.

A developer who underquoted the original project almost certainly cut corners to stay within their number. The technical debt they left behind is the silent continuation of that invoice.

3. The opportunity cost nobody calculates

There is a third cost that almost never appears in post-mortem analysis: the time your team spent managing the project instead of running the business.

Software projects that run over budget and timeline don't just cost money — they consume attention. Someone in your business is chasing the developer for updates, managing change requests, re-testing features, documenting feedback, managing internal expectations, and dealing with a system that half-works while the team tries to operate around it.

For a business owner billing at R 800 an hour, 10 hours a week of project management overhead over six extra months is R 192,000 in lost productive time. For a department head managing a team of eight who are all adapting their workflows to an unstable system, the number is higher still.

The projects that come in on time and on scope free that attention. The ones that drag for 18 months consume it.

What a proper software estimate actually contains

A legitimate estimate isn't just a price and a feature list. It contains enough information for you to understand what you're buying before you pay for it.

Here is what to look for — and what to ask for if it's missing.

Clear scope with explicit exclusions

A good estimate defines not just what is included, but what is not. The integrations that are out of scope. The browsers or devices not being tested. The data migration that's a separate engagement. The third-party API that has its own costs.

Exclusions are not red flags — they're a sign of honesty. A proposal that claims to cover everything for a suspiciously low number is usually covering nothing in detail and hiding the rest in a future change request.

Ask directly: "What would cause this number to change?" A developer who can answer that question clearly — "if the payment gateway has a different API than documented" or "if the client list exceeds 10,000 records" — understands their own estimate. One who says "nothing, we've covered everything" either hasn't built software before or is telling you what you want to hear.

A fixed-price structure with defined milestones

Hourly-rate engagements transfer all the risk of poor estimation onto the buyer. If the developer underestimated the complexity, you pay the difference. If they hit an unexpected technical challenge, you pay for the investigation. If they write inefficient code that takes twice as long to test, you pay for that too.

A fixed-price contract is only possible when the scope is defined in enough detail to price it with confidence. That detail — the requirements document, the technical specification, the agreed-upon scope — is the work that happens before any code is written. It's also the work that most cheap developers skip.

The fixed-price structure doesn't eliminate risk entirely; it distributes it more fairly. The developer who underestimates a feature absorbs the cost of that underestimation. The buyer's exposure is capped.

For South African SMEs managing real budgets, this matters. The difference between a R 90,000 fixed-price project and an hourly-rate project that ends up at R 250,000 isn't just R 160,000 — it's the difference between a planned investment and a crisis.

A realistic timeline with buffer built in

Compressed timelines produce brittle software. A developer who promises an enterprise-grade system in six weeks either hasn't understood the scope or is planning to cut corners at the end when pressure is highest.

Ask about the build methodology. Are there defined testing phases? QA? Staged deployment to a test environment before go-live? A rollback plan if the production deployment breaks something?

Rushed projects skip these steps. The system goes live. Something breaks. The developer is already on the next project. You're managing a support crisis on a system you were supposed to be running six weeks ago.

The real cost of the cheapest quote: a worked example

Let's put numbers to the pattern.

A manufacturer in Johannesburg needs a custom production-tracking system. They get three quotes:

Developer Quote Approach
Freelancer (offshore) R 42,000 Hourly rate, estimated 3 months
Local agency (mid-market) R 95,000 Fixed price, 5-month timeline
Cheapest local quote R 60,000 Hourly rate, estimated 4 months

They choose the cheapest local quote.

What happens:

  • Month 1: Development starts. Initial wireframes look good.
  • Month 2: First change request. The reporting module "wasn't scoped." R 14,000.
  • Month 3: Integration with their ERP system is harder than estimated. R 22,000 more.
  • Month 4: QA reveals the mobile version is broken. Another two weeks.
  • Month 5: The developer goes quiet for three weeks. A family emergency, apparently.
  • Month 6: System goes live with known bugs. Two critical ones surface within a week.
  • Month 7: Emergency fixes. R 9,000.

Total spent: R 105,000 over 7 months, with a system that still has documented issues.

The R 95,000 fixed-price quote would have delivered a tested, fully scoped system in five months.

The difference is not just R 10,000. It's seven months of management overhead, two months of a broken production system, and a codebase that the next developer will charge extra to understand.

How to evaluate a software quote before you sign

These are the questions that separate a well-structured proposal from one that will cost you more than the number on the page.

1. Is the price fixed or estimated? If it's hourly-rate with an "estimate," ask what the ceiling is. If there's no ceiling, there's no commitment.

2. What triggers a change request? Every project has change requests. A developer who says "none" is not being honest. The right answer is a clear policy: what constitutes a scope change, how it's priced, who approves it.

3. Who owns the code at the end? Some agencies retain intellectual property as leverage. You should own your code, your database, your server access — everything — from day one.

4. What does QA look like? Testing is where cheap projects get cut short. Ask specifically: is there a QA phase? Who does the testing? What constitutes acceptance criteria?

5. Who maintains it afterwards? The system you're buying isn't a one-time product — it's a long-term asset. What does ongoing support cost? What's the response time for critical bugs? What happens if you want to add a feature in a year?

6. Can you speak to a previous client? Not a testimonial. A phone call. Ask the client what went wrong, not just what went right. A developer who delivered well will be comfortable with that request.

Why zero-jargon delivery reduces risk

The language a development team uses with you is a signal.

A team that defaults to technical jargon in a client meeting isn't necessarily more capable — they may simply be obscuring the decisions that should involve you. When a specification is written in plain English and both sides understand it, there are fewer gaps for assumptions to hide in. When the timeline and budget are explained clearly, both sides have aligned expectations. When you own the code and understand what you paid for, you have leverage if anything goes wrong.

Jargon is often a protective mechanism — a way of keeping the buyer at arm's length from decisions that should be made together. The less you understand about what's being built, the less you can challenge when something doesn't go to plan.

Plain-language development is not a soft preference. It's a risk control mechanism. Ambiguity in communication is the root cause of most scope disputes, and scope disputes are the root cause of most budget overruns.

What this means for your next project

If you're evaluating software proposals right now, the question isn't "which is cheapest?" It's "which proposal do I understand fully enough to hold someone to?"

The R 60,000 quote you can't fully explain to your team is not a R 60,000 risk. It's an open-ended liability.

The R 95,000 fixed-price proposal with a defined scope, a milestone-based payment structure, a QA phase, and a post-launch support window is the one you can budget for, manage against, and hold accountable.

Software is not cheap when it fails. The businesses that understand this before they sign the contract spend less, deliver faster, and end up with systems they can actually grow with.


If you're at the scoping stage and want a fixed-price estimate in plain English — no jargon, no surprises — that's exactly how we work with South African businesses.

Want this built for your business?

We build WhatsApp sales bots, automations, and custom software for South African businesses — fixed prices, plain English.

Get a Free Quote