Buy Before Build
If an existing platform covers your case, we will say so. Custom is expensive to own, not just to commission.
Custom web development means the architecture, back end and data model are built around your requirements rather than configured from an existing product. It buys control and fit. It costs money to build and money forever after, because you own every dependency. The general service is web development.
The most valuable thing an agency can tell you about custom development is when you do not need it.
If an existing platform covers your case, we will say so. Custom is expensive to own, not just to commission.
Well-understood tools you can hire for, not whatever is fashionable and unmaintained in two years.
The schema outlives every interface decision, so it is designed deliberately rather than derived from the first screen.
The smallest genuinely useful release, then iterate on evidence. Feature lists written before anyone used anything are guesses.
Repository, documentation and rights transfer. You can take it elsewhere, including away from us.
Custom work has no marketplace demo to compare against, so the checks have to be explicit from the start. These are agreed before development begins.
These are engineering checks. Business outcomes depend on what the software is for, and we do not publish figures for work we cannot show you the measurement method behind.
Four layers built rather than configured. The more of these you genuinely need, the stronger the case.
Discuss a Project →Entities and relationships shaped to your business.
Rules and workflows no product implements.
Deep connections to systems you already run.
Screens built for your process, not a generic admin.
Scoping through handover, with maintenance planned rather than assumed.
What the system must do on day one versus what can wait — and challenging the list where a feature looks like an assumption rather than a need.
An honest review of whether an existing platform covers your case. This step has a real possible outcome of "do not build this".
Schema designed to reflect how the business actually works. The hardest decision to reverse later, so it gets the most attention early.
Stack chosen for maintainability and hireability rather than novelty, with the reasoning written down.
Front end and back end built together, with working software reviewable at each stage rather than a single reveal at the end.
Connections to CRMs, payment providers and internal systems with proper failure handling — see API development for that side in depth.
Automated tests on the logic that matters, so later changes do not silently break existing behavior.
Environments, deployment process and documentation written for whoever maintains this next.
If the requirement is a website rather than a system, [web development](/services/web-development/) or a platform build on [WordPress](/services/web-development/wordpress/) is faster and cheaper.
Custom development is expensive and slow compared to buying something. These are the situations where it is still the cheaper answer.
Your workflow is the competitive advantage, and bending it to fit an off-the-shelf tool would remove the thing that makes it work.
Several tools that each hold part of the truth, and a business running on somebody exporting spreadsheets between them.
You have hit a limit — records, users, rate limits, pricing tiers — where the platform that got you here now charges more than building would.
Data residency, audit trails or retention rules that a hosted product cannot satisfy however it is configured.
The thing your customers actually value is the software itself, which means it cannot be the same software your competitors rent.
Six subscriptions and three spreadsheets doing one job badly, with the total cost long past what a purpose-built tool would have been.
Challenge the need, model the data, ship something small, then iterate on evidence.
What the process is today and whether an existing product covers it. Genuinely the highest-value step, because it sometimes ends the project cheaply.
Entities, relationships and rules defined before interface work, because everything else has to live with the schema.
The central workflow built first and put in front of real users, so expensive decisions are made against feedback rather than opinion.
Working software at each stage, with tests on the logic that matters.
Production deployment, monitoring, documentation and an agreed maintenance arrangement — before launch, not after the first incident.
We start most of these conversations by trying to talk people out of custom development. The ones that survive that are the projects worth doing.
You have already tried the obvious products and hit a specific, describable wall. That description is the best possible starting brief.
Custom work needs someone empowered to answer questions within days. Projects stall on decision latency far more often than on engineering difficulty.
You expect to run this for years, which is what makes the up-front cost rational. For a one-season need, buying is almost always correct.
Several systems, no single source of truth, and staff time being spent keeping them in sync manually.
The questions worth settling before commissioning a build, including whether to commission one at all.
Building a web system from your requirements rather than configuring an existing product to approximate them. The data model, business logic, integrations and interface are all designed for one organization.
It sits at the far end of a spectrum. A template site is fully configured. A platform build — WordPress, Shopify — is configured with some custom code. A custom build starts from a blank architecture.
The distinction that matters commercially is ownership. With a platform, someone else maintains the core, patches the security holes and ships the upgrades. With custom, that is your responsibility for as long as the system runs.
Buy, unless your process is genuinely a competitive differentiator or nothing on the market fits. Custom software is expensive to build and expensive forever after, and the second part is what gets underestimated.
The honest test is whether the way you do this specific thing is part of why customers choose you. If it is, custom may be worth it. If you are rebuilding a CRM, a project tracker or an invoicing tool because existing ones are "not quite right", the fit gap is almost always cheaper to live with than a build plus years of maintenance.
The middle path gets overlooked and is frequently best: buy the general platform, build only the narrow piece that is genuinely yours, and integrate the two. You get the differentiation without owning an entire system.
Scope discovered during the build rather than agreed at the start. Requirements written before anyone has used working software are, unavoidably, partly guesses — and some turn out to be wrong once there is something real to react to.
The second cause is edge cases. The main workflow is usually a modest fraction of the work. What happens when a payment fails halfway, two people edit the same record, an integration times out, or a user has permissions nobody anticipated — that is where the time goes, and it rarely appears in an initial estimate.
The mitigation is not better estimating. It is smaller first releases: build the core workflow, put it in front of real users, and let what they actually do determine the next phase.
Maintenance, indefinitely. Dependency updates, security patches, bug fixes and changes as the business evolves. A custom system is not a project that finishes; it is an asset with running costs.
This is the part most build-versus-buy comparisons omit. A platform subscription looks expensive next to a one-off build quote until you add several years of maintenance to the build side, at which point the arithmetic often reverses.
We agree a maintenance arrangement before launch rather than after the first incident, and the documentation is written so another developer can take it over. If we are the only people who can maintain it, that is a problem we created, not a feature.
By separating what is known from what is not, and refusing to price the second group as if it were the first. Most scoping failures come from putting a confident number on the part nobody understands yet.
The practical approach is a discovery phase with its own fixed cost and its own deliverable: the workflows written down, the data model drafted, the integrations listed with their real constraints, and the riskiest assumption identified and tested. That output is yours whether or not we build anything.
Discovery is also where most of the value hides. It is common to find that the expensive feature everyone assumed was essential serves a process that could be changed instead, and that a much smaller build solves the actual problem.
After discovery, estimates get a range rather than a point, and the range narrows as work lands. Anyone giving you a single confident number for undefined work is either guessing or planning to bill the difference in change requests.
Smaller than you want it to be, and in real use as early as possible. The first release exists to replace guesses with observations, not to be the finished product.
The rule we apply is that it has to be genuinely usable for one complete workflow, end to end, by real people. A demo that shows every feature at ten percent depth teaches you almost nothing; one workflow that works completely teaches you what to build next.
This is also the point where scope arguments become cheap instead of expensive. A feature that turns out to matter less than expected can be quietly deprioritized. The same discovery after twelve months of building it is a much more difficult conversation.
We plan the first release around the workflow with the most manual effort attached to it today, because that is where the value is easiest to see and easiest to verify.
You do, in a repository under your account, from the first commit rather than at the end of the project. That is not a negotiating position; it is the only arrangement that makes sense for work you paid to have built.
Lock-in is mostly prevented by boring choices. Widely-used frameworks, standard hosting, a conventional database, and no proprietary layer that only we understand. Clever architecture is a liability when the clever people leave.
Documentation is the other half. Architecture decision records — short notes on what was chosen and why the alternatives were rejected — are the difference between a new developer being productive in a week and spending a month reverse-engineering intent.
The test is simple and we invite you to apply it: could another competent team take this over without talking to us? If the honest answer is no, something is wrong regardless of how well the software runs.
By treating maintenance as part of the build rather than a surprise that arrives after it. Every dependency added is a future update; every integration is a third party who will change something without asking.
The largest recurring cost on most custom projects is not new features — it is keeping the existing thing working as the world moves underneath it. Framework releases, security patches, expiring certificates and API deprecations arrive whether or not anyone budgeted for them.
We keep the dependency list short for exactly this reason, pin versions deliberately, and write down which third parties the system relies on and what happens if each one changes. That list is short and boring and saves a great deal of money.
Where you want that handled rather than staffed, ongoing maintenance covers it. Where you would rather run it internally, the handover is written so that is a realistic option rather than a nominal one.
Mostly on who will maintain it, and only secondarily on the merits of any particular framework. A technically superior choice that nobody in your region hires for is a worse decision than a conventional one.
The questions worth answering: can you recruit for it, is it actively maintained, does it have a stable release history, and will it still be a sensible answer in five years. Those rule out most of the exciting options, which is usually the correct outcome for business software.
The second consideration is fit for the problem. Applications with heavy interactivity, applications that are mostly forms, and applications that are mostly reports have genuinely different demands, and pretending otherwise produces work that fights its own tools.
What should not decide it is what we most enjoy writing. Where a project would be better served by a stack we do not specialize in, saying so is more valuable than winning the work.
By putting something usable in front of real users early, and by treating every requirement as a hypothesis until someone has used it.
The most expensive failures are not bugs. They are correctly-built features that nobody needed, specified with total confidence in a room containing no one who would use them. The cost is not just the build; it is the maintenance forever after.
The practical defense is to ask, for each requirement, what someone does today instead. There is nearly always a current workaround — a spreadsheet, an email chain, a phone call. Understanding it tells you what the feature actually has to beat, which is a far more useful target than a written specification.
Where the answer is "nobody does this today", that is worth pausing on. It might be a genuine opportunity. It is more often a feature that sounded reasonable in a meeting and would be used twice a year.







Building a web system from your requirements — data model, business logic, integrations and interface — rather than configuring an existing platform to approximate them. It gives full control and full ownership of maintenance.
Those are platform builds: someone else maintains the core and you configure and extend it. Custom starts from a blank architecture, which means more control and more responsibility. For most websites a platform is the better answer.
Buy unless the process is genuinely a differentiator or nothing fits. Custom costs to build and costs forever to maintain. If an off-the-shelf product solves your problem we will say so rather than take the project.
It depends entirely on scope, integrations and complexity, and any figure quoted before understanding your workflow would be meaningless. Worth noting: the build cost is usually the smaller half over a few years — maintenance is the rest.
It depends on scope and how quickly decisions get made on your side. We push for the smallest genuinely useful first release rather than a long single delivery, because that is what keeps projects on track.
Well-established, widely-supported tools chosen for maintainability and for whether you can hire people who know them — not for novelty. The specific stack follows from what the system needs to do.
Yes. Repository access, code ownership and documentation transfer at handover. You should be able to take the project to another developer without obstruction.
Either your team or ours, agreed before launch. Custom systems need ongoing dependency updates, security patches and changes as the business evolves. Documentation is written so it does not have to be us.
Still deciding if custom web development is right for you?
Talk to UsCustom development gets compared to platform subscriptions in the wrong units. A one-off build quote sits next to a monthly fee, the build looks like a purchase and the subscription looks like a leak, and the decision more or less makes itself.
It is the wrong comparison. A platform fee covers people maintaining the core, patching security holes, and shipping upgrades you did not have to specify. A custom build hands all of that to you, permanently, and it does not appear anywhere on the quote.
Which does not mean custom is wrong. When the process genuinely is the business, owning it outright is worth what it costs. But that judgment needs both numbers, and only one of them is usually on the table.
So we put the second one there before you decide — and reasonably often, the conclusion is to buy the platform and build only the part that is actually yours.
Describe the process and who runs it today. We will tell you what building it would involve — and whether something that already exists would do the job.
