Most agencies deliver what you asked for. An engineering partner delivers what you should have asked for.

That distinction sounds like marketing until you've been on both sides of it. The difference isn't about quality or effort. It's about what the relationship is optimised for — and the agency model, by design, optimises for something other than long-term outcomes.

Why the Agency Model Produces the Results It Does

A development agency is organised around delivery. They take a spec, build it, hand it over. The contract defines the scope. The project ends when the scope is done. That's not cynicism. That's what the model is designed to do, and for many projects, it's exactly what's needed.

The problem shows up six months later. The agency is gone, the team that built the system has moved on to other clients, and the founder is left maintaining something they didn't write and don't fully understand. When something breaks, the answer is either "call them back" — which means paying again, at hourly rates, for engineers who need time to re-acquaint themselves with code they wrote a year ago, or try to figure it out internally with a team that inherited the system.

Neither of those is the agency's fault. The system was delivered as specified. The bug wasn't in the code. It was in the assumption that delivery and done mean the same thing.

The other structural issue: agencies are incentivised to estimate optimistically and build quickly. Speed and confidence win contracts. The decisions that add three weeks to a timeline — "we should redesign this data model now, because what you're planning to build in Phase 2 will require it" — are easy to skip when you're billing per sprint and the client is watching the budget. Not because agencies are dishonest. Because the project model doesn't reward those conversations.

What Changes When the Relationship Is Different

In a partnership, the work doesn't end at handover. We're still thinking about your architecture six months later because we're still involved. What you're building in the next phase is something we know about, because we were part of the conversation when it was decided. The code reflects that: it's structured for the next developer, documented where the complexity is non-obvious, designed to survive personnel changes.

The practical difference shows up in small things. When a new feature request lands, a partner says "that's going to conflict with the way we built the payments module — here's why, and here's a better path." An agency says "yes, we can build that." Both statements might be honest. Only one keeps you out of a rewrite in 18 months.

The expensive mistakes in software aren't coding errors. They're architecture decisions made under pressure with incomplete information.

Three decades of building production systems reinforces this. The codebases that became liabilities, the ones where every feature takes twice as long as it should and nobody wants to touch the core module, rarely got there because the engineers were bad. They got there because early decisions weren't revisited as the product changed, and by the time the cost was obvious, fixing the foundation meant pausing everything else.

The Decisions Worth Having Out Loud

A partner has specific conversations that an agency typically doesn't. Some of them are uncomfortable.

  • "The approach in the spec will work, but it won't scale past about 10,000 records. Do you want to address that now or plan for a migration later?"
  • "This third-party API you're planning to depend on has reliability issues. We've seen it before. Here's what the fallback should look like."
  • "The feature you're asking for is a two-week build. Fixing the underlying architecture problem that's making it a two-week build instead of three days is a four-week build. The math still works out in your favour."

These conversations happen when someone is measured on long-term outcomes, not sprint velocity. They're hard to have when you're billing hourly and the client is asking why things are taking so long. They're natural when the relationship assumes you'll both still be here in a year.

When You Actually Need This

Not every project needs a partner. A website redesign, a well-scoped internal tool, a clearly defined integration. These are fine as project engagements. Hand the spec to a good team, review the output, done.

The signal that you need something different: the problem is genuinely hard, the requirements keep changing because the product is still being figured out, or the architecture decisions you make now will determine what's possible in two years. If you're building something that's core to how your business operates (not a bolt-on, not a supporting tool, but the thing itself), you want someone who'll still be accountable for those decisions after the launch date.

The other signal: if you've already had a bad agency experience and you're trying to understand what went wrong, it's usually not that the agency was incompetent. It's that the model isn't designed to prevent the failure mode you ran into. Switching agencies fixes the people. It doesn't fix the structure.

Armin Marxer writes at zeroclue.dev.

If you're assessing whether your current engagement is structured to produce what you actually need — or if you're starting something new and want to do it differently — we're worth a conversation.

Start a conversation →