Scope Honestly
We push for the smallest genuinely useful release. Feature lists written before anyone has used the product are guesses.
A website presents information. A web application does work — accounts, permissions, data, state that has to stay correct. Different problem, different engineering. We scope the smallest version that is genuinely useful, build it properly, and add from there rather than spending a year on a first release.
Most failed application projects were not built badly. They were scoped badly — too much, too early, before anyone had used a working version.
We push for the smallest genuinely useful release. Feature lists written before anyone has used the product are guesses.
The database schema outlives every interface decision. It gets designed deliberately, not derived from the first screen.
Well-understood tools you can hire for, not whatever is currently fashionable and unmaintained in two years.
Documented, tested and structured so another developer can pick it up. Including one who is not us.
If off-the-shelf software solves your problem for a fraction of the cost, we will tell you.
Applications fail differently from websites. These are the checks that reflect that, agreed before development starts.
These are engineering checks. Adoption, retention and efficiency figures depend on your organization and are measured in your own systems.
The line between a complex website and a web application is not visual. It is about state — whether the system has to remember and protect things.
Discuss a Project →Who can see and do what, enforced reliably.
Information that must stay correct across sessions and users.
Rules, workflows and calculations the system performs.
Talking to the other systems your business already runs on.
Discovery through deployment, with maintenance planned rather than assumed.
Working out what the application must do on day one versus what can wait — and challenging the list where features look like assumptions.
Schema design that reflects how your business actually works. This is the decision hardest to reverse later, so it gets the most attention.
Sign-in, permissions and access control implemented with established libraries rather than hand-rolled.
Front end and back end built together, with the interface designed around real workflows instead of a generic dashboard layout.
Payment processors, CRMs, email platforms and internal systems — connected with proper error handling for when they fail.
The internal screens your team needs to support the product, which are routinely forgotten until launch week.
Automated tests on the logic that matters, so future changes do not silently break existing behavior.
Hosting, environments, deployment process and documentation written for whoever maintains this next.
If what you need is a marketing site rather than an application, [web development](/services/web-development/) or [web design](/services/web-design/) is the smaller, faster and cheaper answer.
The word covers several very different things, and the differences change almost every decision that follows.
Used by staff who are trained and repeat the same tasks. Speed and keyboard efficiency matter more than onboarding polish.
Used occasionally by people who will not read instructions. Clarity and forgiving error handling carry the experience.
Two or more user types with different needs, where trust and dispute handling are product features rather than support problems.
The interface is a lens over a dataset. Query performance and honest presentation of uncertainty do the real work.
State machines with people attached. Getting the states and transitions right matters more than any screen does.
Availability, conflicts, time zones and cancellation rules — deceptively hard, and unforgiving when wrong.
Understand the work, model the data, ship something real, then iterate on evidence.
How the job is done today, including the spreadsheet everyone actually relies on. Applications that ignore existing workflow get abandoned.
Entities, relationships and rules designed before interface work, because the schema is what everything else has to live with.
The central workflow built first and put in front of real users, so the expensive decisions are made against feedback rather than opinion.
Iterative development with tests on the logic that matters, and working software reviewable at each stage.
Production deployment, monitoring, documentation and a maintenance plan agreed before launch rather than after the first incident.
The line is not about complexity. It is about whether people are reading something or doing something.
A shared file that has become critical infrastructure, with version conflicts and no audit trail. Extremely common and extremely fixable.
A person spending hours moving data between systems, which is both expensive and the least reliable part of the process.
Customers asking your team for things they could do themselves, if there were somewhere to do them.
Calculations, rules or state that a content management system was never designed to hold and should not be asked to.
If people mostly need to read, compare and get in touch, a custom website will serve them better and cost far less.
The questions worth settling before commissioning software, including whether you should commission it at all.
A website presents content. A web application performs work — it holds state, enforces rules, and has to stay correct when several people use it at once. The visual difference can be nothing; the engineering difference is substantial.
The practical test is whether the system has to remember things and protect them. A brochure site with a contact form does not. A portal where customers log in, see their own data and take actions that change records does — and that brings authentication, permissions, validation, error handling and data integrity, none of which a content site needs.
This matters commercially because the two are priced and built completely differently. Scoping an application as though it were a large website is the most common reason these projects run over.
Buy, unless your process is genuinely a competitive differentiator or no product fits it. Custom software is expensive to build and expensive forever after, because maintenance never stops.
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 building a CRM, a project tracker or an invoicing tool because existing ones are "not quite right", the fit gap is almost always cheaper than a build plus years of maintenance.
The middle path is often best and gets overlooked: buy the general system, build the narrow piece that is genuinely yours, and integrate them. That gets the differentiation without owning an entire platform.
We would rather tell you this before a project than after one.
Scope discovered during the build, not scope agreed at the start. The requirements written before anyone has used working software are, unavoidably, guesses — and some of them 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. A specification that survives contact with users is rare; a small release that teaches you what to build next is reliable.
The application itself usually does not — content behind a login cannot be indexed and should not be. The marketing pages around it very much do.
The distinction matters architecturally. Public marketing pages need to be server-rendered or prerendered so search engines get full content and metadata in the initial response. The authenticated application can be a client-side app without any SEO cost at all.
Where this goes wrong is building both as one client-side application, so the marketing pages inherit rendering problems they never needed. That is a technical SEO issue created by an architecture decision, and it is much cheaper to avoid than to fix.
By treating every input as hostile and every permission as something to prove rather than assume. Most breaches of ordinary business applications are not sophisticated; they are missing checks.
Authorization is where the common failure lives. Authentication asks who you are and is usually handled well. Authorization asks what you are allowed to reach, and it has to be enforced on every request on the server — not by hiding a button in the interface.
The specific test worth insisting on is whether a logged-in user can see someone else's record by changing a number in a URL. It is trivial to check, it is checked before every launch we do, and it is found more often than anyone would like.
Beyond that: dependencies updated on a schedule, secrets kept out of the repository, rate limiting on anything that can be automated, and logging that captures enough to investigate without capturing personal data that should not be stored.
Almost never what people expect. Business applications rarely fail from traffic volume; they fail from one slow query, one unbounded list, or one report that loads everything into memory.
The first thing that breaks is usually a page that was fine with a hundred records and is unusable at fifty thousand. Pagination, sensible defaults and indexes handle most of it, and all three are cheaper to design in than to retrofit.
The second is background work being done in the request. Sending an email, generating a document or calling a third party while the user waits makes every one of those a way to make the application feel broken. Moving them to a queue is routine, and skipping it is a common source of complaints.
Real scaling — more servers, sharding, distributed anything — is a problem most business applications never reach. Building for it up front usually buys complexity you pay for daily against a problem you may never have.
Carefully, and with the assumption that it is messier than described. Applications almost always import something — a customer list, historical records, an export from the system being replaced.
Validation happens at the boundary, before anything enters your database. Records that fail get reported with the reason rather than dropped silently, because a migration that quietly discards five percent of the data is worse than one that fails loudly.
Duplicates are the recurring problem. The same customer under three spellings, the same product with different identifiers. There is no automatic answer; there is a matching rule someone from your side has to agree to, and a review list for the cases the rule cannot decide.
We keep the original import intact and separate from the working data, so that a bad transformation is recoverable. It costs a little storage and saves entire weeks when a rule turns out to have been wrong.
Defined before launch, because an application in daily use has needs a brochure site does not. If people depend on it to work, someone has to be responsible when it does not.
The parts worth agreeing explicitly: what counts as urgent, how it is reported, what response you can expect, and who has access to fix it. Vague arrangements become expensive precisely when something is already going wrong.
Monitoring is what makes support possible. Errors reported automatically, with enough context to diagnose them, mean problems are found before a user reports them. Without it, your first signal is a frustrated phone call and no information.
Then the ordinary work — dependency updates, certificate renewals, third-party API changes — which is covered under maintenance and support where you would rather not staff it internally.
By finding the workflow with the most manual effort attached and building that end to end, rather than building a shallow version of everything.
The reason is evidence. One complete workflow in real use produces information that no amount of specification does — where people hesitate, what they expected, what they do that nobody mentioned in discovery. A broad, shallow first release produces opinions instead.
It also protects the budget. If the project stops after the first release, you have something genuinely useful rather than a partial version of several things. That is a much better position to be in, and it happens more often than anyone plans for.
The selection criterion we use is simple: which task currently consumes the most person-hours, and is the most consistent? Consistency matters as much as volume, because a high-volume task that varies wildly is the hardest thing to automate well and the wrong place to start.
Being faster than the thing it replaces, for the person doing the work, on the task they do most often. Every other consideration is secondary to that.
Internal tools are adopted or abandoned on a comparison the user makes in the first week: is this quicker than my spreadsheet? If the answer is no for their most common task, they will keep the spreadsheet, and the two will diverge until neither is trustworthy.
This is why keyboard efficiency matters more in internal tools than in customer-facing products. Someone entering forty records a day will notice every unnecessary click, and will notice a form that cannot be completed without reaching for the mouse.
The other half is trust. A tool that loses work, times out mid-entry or silently fails to save will be abandoned regardless of how good it is otherwise. Reliability is the feature; everything else is built on top of it.







Building software that runs in a browser and does work rather than presenting content — customer portals, dashboards, booking systems, internal tools. It involves accounts, permissions, databases and business logic, which is what separates it from website development.
A website presents information; an application holds state and enforces rules. That brings authentication, data integrity, permissions and error handling, and it is why the two are scoped and priced differently.
Well-established, widely-supported tools chosen for maintainability rather than novelty. The specific stack depends on what the application needs to do and what your team can realistically maintain — that second consideration is not optional.
Yes. Integration with CRMs, payment processors, email platforms and internal systems is normal. Where an integration is fragile or an API is poorly documented, we will flag it as a risk rather than absorb it silently.
Buy, unless the process is genuinely a differentiator or nothing fits. Custom software costs to build and costs forever to maintain. If an off-the-shelf product solves your problem, we will say so.
By starting from the workflow rather than the feature list, then pushing hard for the smallest genuinely useful first release. Requirements written before anyone has used working software are guesses, and treating them as certainties is how budgets go.
Applications need ongoing maintenance — dependency updates, security patches, bug fixes and changes as your process evolves. We agree a maintenance arrangement before launch rather than after the first problem.
Yes. Code ownership, repository access and documentation are part of handover. You should be able to take the project to another developer without obstruction, and that includes taking it away from us.
It depends on scope, integrations and how quickly decisions get made on your side. We scope per project and do not publish a number, because any figure quoted before understanding your workflow would be meaningless.
Still deciding if web application development is right for you?
Talk to UsAlmost every application project starts with a feature list longer than it needs to be. That is not a criticism of the people writing it — it is what happens when you have to describe software that does not exist yet. You cover every case you can imagine, because imagining is all you can do.
The trouble is that a list written that way contains two kinds of items mixed together: things the work genuinely requires, and things that seemed necessary in a meeting. They are indistinguishable on paper and completely different in cost. You only find out which is which when people start using something real.
So the most valuable thing to build first is the smallest version that does the central job properly. Not a demo, not a prototype nobody can rely on — a real, working, narrow tool. What users do with it will tell you more about the next phase than another month of specification ever will.
It takes some nerve to launch something that does less than the brief promised. It is consistently the cheaper and better route.
Describe the process you are trying to improve and who does it today. We will tell you what it would take to build — or whether something that already exists would do the job.
