Skip to content

Custom software development

Custom Software Development with Next.js

Software built for one business rather than configured from a product. What that costs, what it buys, and the cases where buying something off the shelf is the better answer.

Custom software is software that exists because a business does something specific, and no product models that thing closely enough to be worth bending.

That is the whole definition, and it is also the first thing to test. A good deal of what gets commissioned as custom software is a product with a logo changed, and a good deal of what gets bought as a product becomes custom software anyway through two years of workarounds. Both are expensive mistakes and both are avoidable in the first conversation.

What this actually means in practice

The work is almost always one of three shapes.

An operational system - the thing a team works inside all day. Quotes, jobs, cases, stock, schedules, approvals. It is usually replacing a set of spreadsheets, an inherited application nobody can change, or both at once.

A customer-facing surface over systems that were never designed to have one. A portal, a tracking page, a self-service account, a booking flow. The hard part is rarely the screen; it is that the data behind it lives in something old and answers slowly.

An internal tool that exists because a product cannot do the one thing that matters. These are the smallest and frequently the highest-return engagements, because the alternative is somebody's week.

Why a server-rendered application and not a single-page one

For years a browser application meant three things to build: a front end, an API to feed it, and the glue between them. A large share of the code in those systems existed only to move data between two parts of the same application.

An App Router application removes that tier for most screens. The server reads the data and renders the page. The browser receives markup rather than a bundle that then asks for the data it needs. JavaScript ships only where an interaction genuinely requires it, which on an operational system is a minority of screens.

The practical effects are mundane and they compound. One language across the whole application rather than two. One repository and one deployment rather than two that version independently. A page that is correct when it arrives instead of correct a moment later. And meaningfully less code, which is the only reliable way to reduce the cost of the second year.

Which routes render which way is still a decision rather than a default, and it is the first architectural conversation on every build. The rendering model sets out what each option costs.

Where the data lives is decided at the same time

A custom application is mostly a data model with screens attached, so the schema is not a detail to settle later.

The decisions that are expensive to reverse are the ordinary ones. What is an entity and what is a field. Where money and dates are stored and in what type. Whether a record can be deleted or only superseded. Whether a status is a column or a history of transitions - which is the difference between a system that can say what happened and one that can only describe the present.

PostgreSQL is the default on these builds, for reasons set out on the PostgreSQL page. It is a default rather than a rule, and the one real operational trap - connection count under a serverless runtime - is a known problem with a known answer rather than a surprise.

How an engagement runs

Phases, each ending with something deployed.

The first phase is small on purpose. It takes the narrowest slice that is genuinely useful - one workflow end to end rather than the skeleton of five - and puts it in front of the people who will use it. That does two things: it settles the architecture against real data instead of against a document, and it gives everybody an honest basis for estimating the rest.

Scope for each phase is fixed in writing before it starts. Your engineers review pull requests from the first week if you have them, because that is how the conventions transfer and it is the only version where the code is still maintainable after we leave.

What you receive

At the end of each phase, a deployed application you can use - not a demonstration environment and not a branch.

With it: the repository, with the git history intact and no dependency on us to build or deploy it. An architecture note that says which routes render which way, where the client boundary sits and why, written while the decisions were being made rather than reconstructed afterwards. The database migrations as code, so the schema has a history rather than a current state. A deployment that runs on infrastructure you control if that is a requirement. And a list of what we did not do, with the reasoning, because the things deliberately left out are the part a handover usually loses.

When this is the wrong engagement

Worth saying plainly, because the answer is sometimes no.

If a product exists that does eighty per cent of what you need and the other twenty is preference rather than process, buy the product. Configuration is cheaper than code and it stays cheaper every year.

If the requirement is a handful of pages and a contact form, this is a website. A content management system with good templates will serve you better than an application with no maintenance budget behind it.

If the process is still being invented, software will freeze a decision nobody has made yet. Run it manually or in a spreadsheet until the shape stops moving, then automate the shape that survived.

And if nobody internally owns the result - no person whose job improves when it works - it will be abandoned regardless of how well it is built. That is the failure we see most often and the one that has nothing to do with engineering.

Scope and terms

Engagement model
Fixed scope, agreed in writing before work starts. Not a day rate against an open backlog.
Price and timeline
Both are set per project, once the scope is. Quoted together, before anything is built.
What we need from you
One person who can approve decisions, and access to your repository and issue tracker.
Not included
Anything outside the agreed scope. It becomes its own scope rather than a variation order.
Third-party costs
Hosting, licences, API fees and SaaS subscriptions are contracted and paid by you.
Invoicing
Codefacture Yazılım A.Ş., Türkiye. EUR, USD or GBP by bank transfer, with no Turkish VAT on exported services.

Frequently asked questions

What counts as custom software rather than a website?
Whether it holds state somebody comes back to. A site publishes information; software has records, roles, a workflow and a history - a quote that becomes an order, a case somebody reopens next month, a dashboard that is the operational truth rather than a report of it. If the requirement is pages and forms that email somebody, that is a website and it should be built as one. If people will work inside it every day, it is software and the decisions are different from the first week.
Why Next.js for something that is not a public website?
Because most custom software today is reached through a browser, and the cost of a browser application used to be a separate front end, a separate API and two deployments. A server-rendered application removes that tier for the majority of screens - the server reads the data and sends the page, with JavaScript only where the interaction needs it. One language, one repository, one deployment, and considerably less of the code that exists only to move data between two of your own systems.
Is it cheaper than buying a product?
Almost never in the first year, and that is the honest comparison to make. A product costs a subscription and gives you somebody else's model of your business. Custom costs a build and gives you your own. It is worth it when the process is the thing you compete on, when the volume makes manual work expensive, or when the product you would otherwise buy needs so much configuration and workaround that you are maintaining software anyway without owning it.
How is it scoped and priced?
In phases, fixed in writing before each one, priced per phase rather than as a day rate. The first phase is deliberately small and ends with something deployed that you can use, because an estimate for a twelve-month build made in week one is a guess and everybody in the room knows it. What moves the number is the count of screens, the number of systems to integrate and how much of the existing data needs cleaning - not the framework.
Who owns the code?
You do, from the first commit, in your repository or in ours handed over with the git history intact. The architecture decisions are written down as they are taken, because a handover document written at the end is a document nobody reads and nobody can verify.
Call us+1 848 272 7583WhatsApp+90 850 308 5436Emailinfo@codefacture.comContact page