Most custom software firms will not put a price on their website, and I understand why, because every project is different and a number without its scope can mislead people. The problem is that the first thing a business owner wants to know is roughly what this costs, and "it depends" does not help anyone plan.
So here is a real one. A small manufacturer sent us a written scope asking vendors to bid on replacing their legacy ERP with a custom system they would own, on a 12-month deadline. Below is the quote we sent back, with the prices left in, followed by what changed when it turned into an agreement.
Read this first
This is one small customer ERP project, and the quote was packaged specifically for that customer's request. They wrote the scope and set the dates, and we priced the work to fit it. The client's name, people and system names are removed, and the project plan is written in general terms that fit most small manufacturers, so it doesn't point to any one shop. The fees and terms are as we quoted them. It is an example of how we price, not a price list, and a different scope gets a different quote.
What the customer asked for
The customer is a small shop, with a few dozen people using the system. They wrote down exactly what Phase 1 had to do and sent it to the vendors bidding on it, which made this much easier to price. The short version:
- A custom ERP that runs the business from customer order to shipment, so the old system can be turned off.
- Run the new system alongside the old one starting around month 8, and retire the old one at month 12.
- Hosted on their own servers.
- Quoting, job tracking, inventory, purchasing, quality and shipping in one place, with a history of who changed what.
- A connection to their accounting software, so invoices are not typed in twice.
- They own all of the code, in a repository they control from day one, built by a US-based team.
Anything they could live without at launch, like customer portals, tablet screens on the floor and advanced scheduling, went into a Phase 2 list that is not priced here.
The quote at a glance
| Two at a time | Four at a time | |
|---|---|---|
| Projects in progress at once | Up to 2 | Up to 4 |
| Term | 12 months | 12 months |
| Monthly fee | $8,000 | $15,000 |
| Best when | You want a steady, focused flow of work | You want more work done in the same time |
The fee covers all of our labor and project management. Servers, licenses and third-party tools are not in it, and each one gets itemized and approved by the customer before anything is bought. The customer can switch between packages, up or down, by telling us, and the new fee starts the next billing period.
What it adds up to
If the customer stayed on one package for all 12 months, two at a time comes to $96,000 for the year ($8,000 × 12) and four at a time comes to $180,000 ($15,000 × 12). Both totals are labor only, before servers and licenses. The real total can land anywhere between, or below, because the customer can switch packages or stop at the end of a month.
Why it is a monthly retainer with two packages
We work as the customer's development team for one monthly fee, in their repository and their environments. The two packages build the same system and the customer owns it either way. The only difference is how many projects run at the same time, which mostly changes the pace.
What "a project" means here
A project is one numbered line of the plan below, like "Shipping and finished goods." Each one has a short description and an acceptance test that both sides agree on before it starts, so everyone knows what finished looks like.
The customer keeps one numbered list of projects, and number 1 matters most. The top two (or top four) are in progress, and when one is accepted the next one on the list starts. They can re-rank the list between projects and at a monthly review. A new idea never gets added to a project that is already running. It goes on the list as its own project and starts when a slot opens, which is how the scope stays fixed without saying no to good ideas.
The limit of two or four is on purpose. It keeps every project small enough to finish, and it leaves room to pull someone onto an emergency without stopping everything else. With a list of 8 projects that each take about the same time, two at a time works through it in about 4 rounds and four at a time in about 2. Real projects vary, so that shows the difference in pace, not a date.
The 12-month plan
This is how we estimated the year would go, with the details written in general terms. Several projects are always moving at once, so each month shows what we expected to be finished by then. These months are estimates. The firm deadline for each project is set when it starts.
| Month | Project finished | Acceptance test (example) |
|---|---|---|
| 1 | 1. Foundation | Everyone signs in with their own account. Every change is logged with who made it, the old value, the new value and when. A backup restores cleanly. |
| 3 | 2. Customers, parts and quoting | An estimator builds a quote from a part's routing, labor and material cost, sends it as a PDF, and can pull it back up exactly as it was sent. |
| 5 | 3. Orders and work orders | A customer order becomes a work order with the right part revision, routing and documents attached. |
| 5 | 4. Scheduling and shop floor | Operators clock on and off jobs from the floor and record scrap. The supervisor sees what is running on each machine and can reorder the queue. |
| 6 | 6. Outside work | Jobs sent to an outside vendor, like painting or heat treating, show what went out, what came back and when the rest is due. |
| 7 | 5. Inventory and purchasing | Purchasing sees what is short across all open jobs. Receiving a partial shipment updates the stock and the purchase order. |
| 7 | 7. Quality | Inspection results and nonconformances are recorded against the job, and a part on hold shows on the work order. |
| 8 | 8. Shipping | Packing slips print from the order, and a job with an open quality issue cannot ship unless someone records an override. |
| 8 | 9. Costing and accounting | Actual job cost (labor, material and outside work) compares against the quote. Each invoice goes to the accounting system once. |
| 11 | 10. Documents and reporting | Quotes, travelers, purchase orders and packing slips print as PDFs. Managers can see on-time delivery, job margins and machine load without exporting to a spreadsheet. |
| 12 | 11. Migration and cutover | Customers, parts, inventory, open orders and open purchase orders are moved over and checked against the old system. The old system is retired. |
Two milestones sit inside that plan. In month 7 the customer starts exporting data from the old system, and in month 8 the first full test migration is accepted and they start running real jobs on the new system alongside the old one. That overlap runs until cutover in month 12.
Why every project has a test
"Build the shipping module" can mean almost anything, and vague lines like that are one way ERP projects drift. "A job with an open quality issue cannot ship unless someone records an override" is something a person on the floor can check. When the test passes, the project is done, and the next one on the list starts.
Emergencies come first
If something stops production, or is about to, or a hard customer or compliance deadline lands, the customer can call it an emergency. We start the same business day, ahead of the list, at no extra fee. The days an emergency takes move the affected projects by the same number of days, we confirm that in writing, and it never counts as a missed deadline.
A deadline on every project
Before each project starts, we agree its deadline together in writing. If we miss it, we have 30 days to fix it at no extra charge. If it is still not accepted after that, the customer can cancel immediately and pays only through that day, with no termination fee. If a delay comes from the customer's side, like late data exports, access or decisions, the deadline moves by the same number of days and we say so in writing.
The customer owns everything
Everything we build belongs to the customer from the moment it is written: the source code, database changes, deployment files, integrations and documentation. It lives in their repository from day one. Open-source and commercial components keep their own licenses, and we document each one. If the engagement ends for any reason, they keep the code, the repository and the documentation.
What is not in the price
- Servers, licenses and third-party tools. Itemized before anything is bought, and never billed without written approval.
- The customer's own time. Pulling data out of the old system, checking it and testing each project is work their team does. We tell them early how many hours a week it will take.
- Phase 2. Customer portals, tablet screens on the floor, advanced dashboards and scheduling optimization get quoted once Phase 1 is done and both sides can see the scope clearly.
What changed when the quote became an agreement
A quote is where the conversation starts. When we drafted the retainer agreement from it, the prices, the packages, the plan and the ownership terms stayed the same, and a few working terms changed:
- Billing moved from every two weeks to monthly. We invoice on the last day of each month for that month, after the work, never in advance. Partial first and last months are prorated by day, and each invoice comes with a short progress report on what was accepted, what is in progress and what comes next.
- Leaving moved from two-week periods to the end of any month. The customer gives 15 days' notice and pays through that month, with no termination fee or penalty.
- We committed to the full 12 months. The customer can stop at any month end, but we will not walk away during the year for reasons of our own, like a change in workload or other clients. The only exception is unpaid invoices.
- Delays got spelled out. The quote said a customer-caused delay moves the deadline. The agreement lists what counts, including late data or decisions, a change to a project after it starts, outside vendors the customer relies on, and outages, and says we propose the new date in writing.
- The handover changed. In the quote, a walkthrough of the code for their staff or the next vendor was free. In the agreement, the customer still keeps full access to the code, the repository and the current documentation at no charge if the engagement ends, and a walkthrough is paid by the hour at a rate we quote first.
- Support after Phase 1 got an estimate. Fixing defects in delivered work is covered by the monthly fee during Phase 1. After that, we estimated a base maintenance package at $1,000 to $2,000 a month, with 5 to 10 hours of support included. It is a planning number only, and it may come down once Phase 1 is done and the real support load is clear.
Would this fit your shop?
This shape works when a manufacturer has decided the old system has to go, knows roughly what the new one must do, and has someone inside who knows the data and can test. If your list is shorter, it would likely finish sooner or fit the smaller package. If you are not sure yet whether to build at all, start with custom ERP or off the shelf, for a small manufacturer. We also wrote about replacing an ERP without shutting down the business and what custom software costs in general, and the service itself is ERP modernization.
If you have a scope written down, even a rough one, send it over and we will tell you how we would package it. Reach out here or call (507) 388-4748.
Using an AI assistant? It can send this inquiry for you. How that works.