An order that gets entered three times in three separate tools costs time and breeds errors. That's usually the moment a manager starts asking what custom software is, and whether it's the answer. Short version: software built around the specific processes of one business. But it isn't always the first thing to reach for. This guide will help you choose between an off-the-shelf tool, connecting the tools you already have, and building something custom, and then write a requirements brief you can actually use.
What is custom software, and which businesses is it right for?
If I had to answer what custom software is in one sentence: a program designed and developed for the specific needs and processes of one business. It makes sense for organisations whose important needs aren't covered by ready-made tools, and where connecting existing systems isn't enough either. The third condition is that solving the problem is worth more than building and maintaining the thing. Company size, on its own, is not the deciding factor.
You'll also hear it called bespoke or tailor-made software. Same idea: a system shaped around how you work, rather than you reshaping your work around it.
Let's clear up a common misunderstanding right away: custom doesn't mean writing everything from scratch. A professional team uses proven libraries and services for logins, payments, SMS notifications and reporting. The custom part is where your business rules differ from everyone else's.
That's why a small workshop with complicated pricing might genuinely need a build, while a large company with standard processes could be perfectly happy with an off-the-shelf product. Whether custom software is right for you comes down to your business rules, not your headcount.
This guide focuses on three things: a precise definition, how to tell whether you really need to build, and a delivery path you can evaluate. A detailed comparison of products or programming languages is outside its scope.
How is custom software different from proprietary software?
Custom is about why something was built; proprietary is about the license. Proprietary software means the owner decides who may use, modify or distribute it. People sometimes use the two terms loosely, and that confusion tends to cause trouble at contract time. So part of understanding what custom software is means knowing what it isn't.
Concept | What it relates to | The key question |
|---|---|---|
Custom (bespoke) | The purpose and scope of the build | Whose work was this software built for? |
Proprietary | The license to use, modify and distribute | Who is allowed to change it or sell it? |
Open source | Access to the code and the license terms | What obligations does this code's license create for us? |
A ready-made product with thousands of customers can easily be proprietary. On the other hand, almost every custom system uses open-source components. And don't treat open source as meaning free of conditions; every license has its own terms, and the definition of open-source licenses shows exactly what those terms cover.
Imagine a company that paid the full cost of building a system. Two years later it wants to switch support teams and only then discovers the contract granted it a "right to use", nothing more. Paying for the work hadn't transferred all the rights. This is one of the mistakes that worries me most, because it's usually discovered when it's already too late.
To avoid it, ask the vendor before you sign:
Which parts of the deliverables will belong entirely to us?
Which components did you own beforehand, and under what license do we get to use them?
Do the licenses of the libraries you use restrict future modification or resale?
What problems does custom software solve?
Problems where your specific business rules are stuck and no common tool can enforce them. To keep this from getting abstract, we'll follow one hypothetical scenario throughout the guide. Whenever we ask what custom software is and where it's needed, we'll test the answer against this example.
Imagine a distribution company with two warehouses. Accounting runs in one application and order entry in a separate tool. Warehouse stock updates lag, so salespeople sometimes sell items that are no longer there. Discount approval has its own rule too: up to a set limit, the sales supervisor approves; above it, the finance manager does.
Before deciding anything, separate three kinds of problem:
A process problem: nobody knows exactly who approves a special discount.
A data quality problem: the same item is registered under two different codes in the two warehouses.
A missing software capability: the current tool can't run a two-step approval based on the amount.
Only the third one is solved by building software, because the root of the first two lies outside the software. If the process isn't clear, building a tool for it just moves the ambiguity from paper into code. And ambiguity that settles into code is more expensive to fix.
By contrast, the needs that genuinely tend to require a build look like this: multi-step approval rules, resource allocation with unusual constraints, and reports that combine data from several sources using your own logic.
So when you ask what custom software is, the sharper question is: which part of my work follows a rule that tools can't enforce? Write the problem in this format: who, in which task, faces what obstacle, with what visible consequence? For example: "When placing an order, the salesperson can't see live stock, and some orders are cancelled after approval."
When is off-the-shelf software the better choice?
When your essential needs are covered by a tool's standard settings and adjusting your process slightly doesn't cost much. In that case my advice is to test the off-the-shelf tool seriously first. Part of knowing what custom software is, is knowing where you don't need it.
A serious test is not the same as watching a sales demo or ticking off a feature list. It means running one real workflow from start to finish in a trial version. Then check whether you can export your data in a usable format. Test the permission levels too: can a warehouse clerk see stock levels without seeing purchase prices?
In the distribution scenario, if stock reservation and two-step discount approval can be handled by configuring an existing tool, there's no clear case for building a new system, even if the team doesn't love how that tool looks. For this company, the answer is simple: custom software is something it doesn't need right now.
Still, the subscription price isn't the only cost of a ready-made tool. Put these next to the cost of building:
A multi-year subscription, allowing for growth in the number of users
Team training, and the time spent getting used to the tool's logic
Development limits: things that will never be added to the tool
Exit cost: moving your data and history if you ever switch tools
For a closer side-by-side look at the two paths, read comparing ready-made and custom software to make the right choice.
When are the benefits of custom software worth it?
A list of custom software benefits only matters if each benefit leads to a practical result in your work. None of them come automatically with a build; each has a condition attached.
Benefit | Practical result | Condition for it to hold |
|---|---|---|
Fit with your process | Rules are enforced by the system, not by employees' memory | The process is clear and signed off before the build |
Control over the roadmap | You decide which feature gets built first | You have access to the code, documentation and credentials |
Targeted integration | Data goes only where it's needed | Other tools have a dependable interface |
The second benefit is the most deceptive, because on paper it always looks true. Control over the roadmap is only real if another team could pick up the work tomorrow if the current one walked away. Without documentation and access to the deliverables, you've simply moved your dependency from one vendor to another.
In the hypothetical distribution company, for example, enforcing the discount approval rule automatically can cut down on off-process entries. The measure is clear: how many exceptions are logged each month, and why. If you don't count that number before the build, you won't be able to say afterwards whether anything improved.
And don't overstate security or speed. If a vendor, explaining what custom software is, lists better security and performance as built-in traits, ask harder questions. Custom software isn't inherently more secure or faster; the quality of design, testing and operation determines the outcome.
The value of custom software isn't in the code; it's in the rules you made clear before the code was written.
What are the drawbacks of custom software, and which risks can you prevent?
The main drawbacks of custom software are a long-term maintenance commitment, uncontrolled scope growth, dependence on one team, and difficulty getting users to adopt it. Any answer to what custom software is that leaves out this side of the coin is incomplete. The good news is that each one has a clear warning sign and a way to prevent it.
Risk | Warning sign | Preventive action |
|---|---|---|
Maintenance commitment | The budget covers the build only, not the years after | A maintenance plan and budget from day one |
Scope growth | A few "small" features get added in every meeting | Log every change along with its effect on time and cost |
Team dependence | Only one person knows how the system is deployed | Regular code handovers and documentation written alongside the build |
User adoption | End users see the system for the first time at the launch meeting | Representative users take part in testing interim versions |
There's another risk that gets less attention: building for a need nobody has tested yet. If you're not sure salespeople will actually use live reservation, run a small experiment first. A simple form and a few weeks of real use will clarify more than months of meetings.
The first question I usually ask in evaluation meetings is: if development stopped tomorrow, who would run, restore and fix the system? If you don't have a clear answer, you're not ready to start yet.
When can integration replace swapping out all your tools?
When each of your current tools does its own job well and the only problem is moving data between them. Integration means coordinated, automatic data exchange between tools. It usually works through an API, an interface that lets two pieces of software exchange data without a person in the middle.
In the hypothetical distribution company, you may not need to replace the accounting software at all. Connecting the ordering tool to the warehouse system might be enough. There's also a hybrid option: keep the tools where they are and build only the part with special rules, such as discount approval, as a custom component. Sometimes the right answer to what custom software is for you is exactly that small piece, not a whole system.
But an API listed in a product brochure isn't enough on its own. Before choosing this path, check:
Is API access included in your subscription plan, or is it charged separately?
Does the license limit the number of requests or the types of data?
Is your current data clean enough that automatic transfer won't multiply the errors?
Can the interface handle order volumes on your busiest days?
Then put four more decisions in writing. Which system is the source of truth for stock? What is the shared identifier for each item across all tools? How will you prevent the same order from being entered twice? And if the connection drops, where do orders wait, and how are they sent later?
The principles for defining these exchanges are similar in most projects. The guide on defining requirements for connecting a website to a CRM walks through the same principles step by step in a different example.
When do you actually need custom software?
When an essential need can't be met by any ready-made tool and can't be solved by connecting tools either. The third condition is that solving it is worth more than building and maintaining it. If you've moved past what custom software is and are now asking when you need it, run these checks in this order:
Off-the-shelf coverage: test your essential needs with a real scenario in one or two tools. If they're covered, your path is a ready-made tool.
Integration potential: if each tool handles part of the work well, assess connecting them.
Economic value of building: if an essential gap remains, weigh what closing it is worth.
Stop to clarify the need: if at any stage you can't say exactly what the need is, stop right there.
In the hypothetical scenario, if the problem is only getting orders to the warehouse, integration is enough. But if the stock reservation rules across two warehouses can't be enforced in any existing tool, building a limited component is worth evaluating.
The word "essential" needs a precise definition too. An essential need is one whose absence stops operations or creates an unacceptable risk. Buttons sitting in the wrong place or screen colours the team doesn't like are not reason enough to build.
So record your decision together with your assumptions and the evidence from your tests. Six months from now, when circumstances change, you'll be able to see which assumption no longer holds.
Web-based or desktop: which is better?
For most multi-branch businesses, web-based is the more sensible choice, though connectivity and local hardware can change that. Web-based software runs in a browser; desktop software is installed on each computer. This choice has nothing to do with whether the software is ready-made or custom; whatever your answer to what custom software is, this decision is made separately.
Set aside two misconceptions. Web-based doesn't have to depend on the public internet; it can run only on the company's internal network. And desktop isn't necessarily offline; it's often connected to a central server.
Criterion | Web-based | Desktop |
|---|---|---|
Scattered branches and users | Easy access from anywhere | Installation and configuration on every device |
Unreliable connection | Needs local entry designed in | Local work is simpler, but syncing is still required |
Local hardware such as barcode scanners and label printers | Possible, sometimes with limits | Usually more direct access |
Updates | Once, on the server | On each device, or through an automatic mechanism |
For a hypothetical warehouse whose internet drops now and then, look into local entry with later syncing. Be aware, though, that resolving data conflicts adds serious cost and complexity. A conflict is when two people have changed the same stock level in two places at the same time.
Before choosing, simulate a working day: a dropped connection mid-task, several users on the same order at once, and label printing. The result of that test will be more convincing than any theoretical debate.
What should requirements gathering and a requirements document produce?
Requirements gathering should make clear the users, the workflow, the data, the decision rules, the exceptions and the project's boundaries. A list of screens alone is not a requirements document, because two teams can build two completely different products from the same list. So far we've asked what custom software is; from here on, you need to pin down exactly what your software does.
Fill in this short template for each requirement:
User role: who does this task?
Action: what exactly do they do?
Precondition: what must be true beforehand?
Expected outcome: what change is visible in the system afterwards?
Failure case: what happens if something goes wrong?
For example: the warehouse manager reserves stock for an approved order. The precondition is order approval; the outcome is a reduction in sellable stock. Now the hard questions: what if there isn't enough stock? What if two people reserve the last unit at the same moment? A large share of a project's hidden costs sits in the answers to questions like these.
Write quality requirements so they can be tested. Instead of "the system should be fast", state the maximum response time per page with a given number of concurrent users. Make access control and recoverability just as precise.
Record two more things: the name of the decision-maker for each process, and a list of what you've deliberately left out of scope. In my experience, the "out of scope" list heads off later arguments better than any other document.
What should the first version of the software include?
One important workflow, complete from start to finish, even if it's the only one. That's the minimum a first version needs. This is sometimes called an MVP, or minimum viable product. A handful of unfinished screens that each do half the job is not a first version.
In the distribution scenario, the first version could cover order entry, discount approval and stock reservation. Colourful dashboards, decorative reports and automatic SMS to customers can wait.
Ask one question of every feature: without it, can we still test the core value? If the answer is yes, move it to the next version. The same logic behind what custom software is applies here too: build only what the work genuinely can't function without.
Some things, however, should never be sacrificed to a smaller scope: basic security, data integrity and the ability to recover. A version that arrives early but loses orders destroys users' trust, and after that, nobody takes the second version seriously either.
Also, don't mistake a prototype for a production version. A prototype is often built with dummy data to gauge the user experience. A production version runs on real data and has to withstand every failure case in the main workflow.
A good first version is small, but it's never half-finished.
How are development stages and timelines set?
Work starts with problem discovery and continues through design, iterative building, testing and deployment. Four factors determine the timeline: scope, access to other systems, data readiness and how quickly approvals come through. So any fixed number you hear before those four are clear is more guess than estimate. This part of what custom software is gets mentioned less often: building it is a staged process, not a one-off order.
People requesting quotes for custom software design or development usually want a delivery date first. My suggestion is to look instead for the output and exit criteria of each stage:
Stage | Output | Criteria to move to the next stage |
|---|---|---|
Problem discovery | Problem statement, workflows, list of requirements | Scope approved by the decision-maker |
Design | Workflow, screen designs, data structure | Prototype approved by representative users |
Iterative build | A testable version each cycle | Version demonstrated and feedback recorded |
Testing | Test report based on acceptance criteria | Major defects fixed |
Deployment | Production version and deployment documentation | Data migrated and reconciled, users trained |
The biggest source of uncertainty is usually integration with other systems, so don't leave it to the end of the project. Run a small technical test in the first few weeks: can you really read data from the accounting system?
Don't wait for final delivery either, because misunderstandings found at the end are expensive. Regular demos of a testable version, with changes logged, surface misunderstandings while they're still cheap.
For the hypothetical distribution company, tie each stage gate to a piece of evidence, such as an approved prototype of the discount flow or a test report for simultaneous reservations. "We think it's ready" is not evidence.
What are the client's and the development team's responsibilities?
The client provides the business rules, permitted data and consolidated feedback; the development team provides the technical proposal, the implementation and the test evidence. The first step is on the client's side: name a single decision-maker. Collecting ten users' opinions is not the same as having final sign-off authority.
Area | Client | Development team |
|---|---|---|
Requirements | Explaining rules and exceptions, final approval | Asking questions, documenting, flagging contradictions |
Data | Preparing permitted, anonymised samples | Designing the structure and migration tools |
Testing | Running acceptance scenarios with representative users | Technical testing and reporting |
Release | Scheduling the cutover and internal communication | Deployment, monitoring and a rollback plan |
Don't leave any row without an owner. "Shared responsibility" in practice means nobody's.
If data arrives late or an approval changes three times, record it in the plan. Hiding those delays inside development time ends in a "why is this late?" argument that nobody has the paperwork for. This is the point that usually gets missed when explaining what custom software is: a large part of the work is in the client's hands.
Use this simple template for decision meetings:
Decision topic
Options considered
Decision-maker
Agreed deadline
Effect of the decision on scope, time or cost
How are build and maintenance costs estimated?
Estimates are based on the complexity of the work, not the number of screens. And the total cost isn't just programming; it includes analysis, design, development, testing, integrations, data migration, training, infrastructure and maintenance.
Two screens that look alike can cost very different amounts. A screen that simply saves an order is not the same as one that checks a discount against three rules and two roles. The main cost drivers are rule complexity, the number of roles, exceptions, usage load and the expected quality level. That's why you can't work out what custom software is going to cost by counting screens.
To compare proposals from several vendors, align the scope and the operating horizon. If one includes three years of maintenance and the other doesn't, they aren't comparable. List what each proposal leaves out, too; sometimes a cheaper quote is just testing or data migration quietly dropped.
A reliable estimate has these columns for each work item:
Work item | Assumption | Dependency | Estimate range | Excluded |
|---|---|---|---|---|
Accounting integration | The existing interface can read invoices | Test access provided by the client | A minimum and maximum range, not a single number | Changes caused by an accounting software upgrade |
For parts that are still unknown, ask for a limited, separate investigation instead of one big number. Its findings make the estimate for the rest of the work more realistic.
Measure the value of solving the problem with things you can record: the time spent each week on re-entry and reconciliation, and the consequences of errors such as cancelled orders. But don't present savings percentages or ROI built on assumptions as certainties; label them clearly as assumptions.
How do you evaluate a vendor and the ownership terms for deliverables?
The first sign of a good vendor is that they can restate your problem accurately before proposing any technology. Ask them to explain the problem in their own words, point out the integration risks and describe how they control changes. I'd add one more question: in our project, what is the custom software, and where does it end? Choosing purely on programming language or framework is a weak criterion.
In the contract, name each deliverable separately:
Source code and its change history
Technical documentation and user guides
Designs and their source files
Database structure
Admin access to the server, domain and third-party services
Deployment instructions
Also separate the rights to the vendor's pre-existing components and the licenses of libraries from the custom deliverables. Intellectual property clauses are a legal matter, so have a qualified legal adviser review them before you sign.
There's a simple transferability test as well: could another team run the system using only the contractual access and the documentation? If not, your ownership exists only on paper.
If you'd like to review your project's scope and technical risks with an outside team, Niasa's programming and custom software page is a good place to start that conversation. Ask the questions from this section there too.
How do you make acceptance criteria and security testable?
By turning each requirement into an observable condition that can be checked as true or false. That condition is called an acceptance criterion. "The system should be fast and secure" isn't one, because nobody can say when it's been met. This is where the general definition of what custom software is turns into testable sentences.
In the distribution scenario, for example, these two criteria are testable:
If the same reservation request is sent twice in a row, only one reservation is created.
A user without discount approval permission cannot approve a discount, even by opening the page's URL directly.
Before testing starts, agree on the test environment, test data, user roles, agreed load and who signs off. Without these, acceptance testing turns into a matter of taste.
Security belongs inside the scope, not on a to-do list for later. At a minimum, require that:
Each user has access only to what their job requires.
Important events, such as discount approvals or stock changes, are logged.
Passwords and access keys are stored separately from the code.
Restoring from backup is actually tested.
Users' and teams' access to real customer data stays restricted.
To choose security controls that fit your project, the ASVS application security verification standard is a good reference. But citing a standard in a contract is not a security certificate. It has to be clear which controls will be tested, and at what level.
How do you plan data migration and post-launch support?
With a defined migration sequence and a clear support agreement. Data migration is a small project inside the main project, and it follows this order:
Assess the quality of the current data
Map fields, meaning decide which new field each old column goes to
Clean up duplicates and inconsistent codes
Run a trial migration
Reconcile the output against the old data, for example total stock per warehouse
Run the final migration
Plan the cutover precisely as well. From what moment do changes in the old system stop? Who records orders that arrive in the gap, and where? And if something serious goes wrong, how do you roll back to the previous version?
For support, separate defect fixes from new feature requests. A defect is something that was in the agreed scope and doesn't work correctly. Put severity levels, the reporting channel and response terms in the contract.
Backups without restore tests only give a feeling of safety. To build that habit, see the guide on planning regular backups.
In the same way, error monitoring, library updates and periodic access reviews are part of the operating plan. They aren't optional extras after handover, because software that's left alone gradually becomes insecure and fragile. If your answer to what custom software is stops at delivery day, you've only seen half the picture.
نمونهکارهای ما در همین زمینه
What goes into the final decision checklist and the estimate request?
A single page that sets out the problem, the users, the current workflow, essential needs, existing tools, constraints, the success measure and the decision-maker. That page is your own answer to what custom software is and whether it's right for you. If you can't fit it on one page, it's probably too early for an estimate.
Problem: in the format who, which task, what obstacle, what consequence
Users: roles and the approximate number in each
Current workflow: how the work gets done today, and with which tools
Essential needs: only what would stop the work if missing
Existing tools: tool names and whether their data can be accessed
Constraints: legal, infrastructural or organisational
Success measure: something you can count before and after
Decision-maker: a name, not a department
Record your choice in one sentence too: "off-the-shelf, because it covers the essential needs", "integration, because each tool does its job well", or "build, because an essential gap remains".
With your estimate request, attach anonymised sample data, a description of one complete workflow and the important exceptions. Don't send passwords, system access or sensitive customer data at this stage.
Write down the budget you're willing to consider and your business's time constraints as well. These are inputs to the conversation, not a guarantee that the work can be done within them.
Once your brief is ready, you can review it with the Niasa team. The goal of the next step is to clarify scope and risks, not to start coding straight away. Sometimes the outcome of that review is that you don't need to build anything at all, and in my view that's a good outcome too.
شرح یک مسیر کاری و ابزارهای فعلیتان را برای نیاسا بفرستید تا درباره گزینه مناسب و اطلاعات لازم برای برآورد گفتوگو کنیم.
Frequently asked
5Does a small business ever need custom software?
Yes, if an essential and specific need can't be met with an off-the-shelf tool or by connecting your existing tools. Headcount alone isn't the test. Weigh what solving the problem is worth and whether you can maintain the system afterwards.
If we commission custom software, do we own all the code?
Not necessarily. The scope of ownership and your rights to modify or transfer the work must be spelled out in the contract. Pre-built components and libraries may carry their own separate licenses.
How long does it take to build custom software?
Until the scope and dependencies are clear, no one can give you a reliable timeline. An initial proposal should state its scheduling assumptions, the approval stages, and how delays in data or system access would affect the plan.
Can custom software run alongside the tools we already use?
Yes. Sometimes building one limited component and connecting it to your current systems is the better choice. First check whether data can be exchanged, what access the licenses allow, and how the system behaves when the connection drops.
If the development team changes, can development continue?
Handing over to another team is far more realistic if you have the code, documentation, runtime environment and the necessary rights. It's best to test running the system from the handover documents before the engagement ends.







