[{"data":1,"prerenderedAt":460},["ShallowReactive",2],{"insight-custom-software-cost-framework":3,"insights-cards":350},{"id":4,"title":5,"body":6,"category":332,"date":333,"description":334,"extension":335,"meta":336,"navigation":337,"path":338,"readingTime":339,"relatedArticles":340,"relatedAssessment":344,"relatedServices":345,"seo":347,"stem":348,"__hash__":349},"insights\u002Finsights\u002Fcustom-software-cost-framework.md","Estimate Before the Estimate: Sizing a Custom Software Budget on Your Own",{"type":7,"value":8,"toc":313},"minimark",[9,13,18,21,24,28,31,34,39,46,52,56,62,68,72,78,84,87,91,94,100,106,109,113,116,205,208,212,215,218,222,225,231,237,243,249,255,259,262,296,299,303,306,310],[10,11,12],"p",{},"You cannot know what a custom system will cost before someone has examined your environment, and anyone who offers a figure sooner is guessing. What you can know, on your own and in an afternoon, is which parts of your project will drive the cost and which of them you cannot yet describe. That knowledge is worth more than a number, because it lets you question a proposal's reasoning instead of staring at its total.",[14,15,17],"h2",{"id":16},"why-published-price-ranges-do-not-help-you","Why published price ranges do not help you",[10,19,20],{},"Search for the cost of custom software and you will find ranges so wide that a departmental tool and a company-wide platform both fit inside them. A range like that is not wrong. It simply carries no information about your project.",[10,22,23],{},"You will not find dollar figures in this article, on purpose. A printed number would be an average across projects that are not yours, and once you have read it you will measure every proposal against it. A model of what produces the number is more useful. With the model you can look at two quotes that differ by a factor of three and work out which assumption explains the gap.",[14,25,27],{"id":26},"the-feature-list-is-the-wrong-place-to-start","The feature list is the wrong place to start",[10,29,30],{},"Most buyers describe a project as a list of screens and functions, and most first conversations with vendors go the same way. It feels natural, because features are what users will see.",[10,32,33],{},"The trouble is that features explain little of the variation between projects. Two systems with an identical feature list can differ enormously in cost because of what they have to connect to, what they inherit and what they must guarantee. I find it useful to sort the cost drivers into three groups.",[35,36,38],"h3",{"id":37},"group-one-what-the-system-touches","Group one: what the system touches",[10,40,41,45],{},[42,43,44],"strong",{},"Integrations."," Count every system the new software must read from or write to. Then, for each, note the interface: a documented API, a file drop, direct database access, or nothing at all. Each connection brings the same chores: learning how the other system really behaves, handling its failures and timeouts, storing credentials safely, retrying without creating duplicates, and repairing the link when the other side changes. When the other side is an old system with no documentation and no test environment, the connection alone can end up pricier than whatever function required it. In my experience this is the most frequent reason an estimate turns out to be wrong.",[10,47,48,51],{},[42,49,50],{},"Inherited data."," If history has to move from an old system, the copying is the cheap part. The expense is in the records the old system tolerated: customers entered three times, dates stored as free text, required fields filled with a period, statuses nobody remembers the meaning of. The new system will have stricter rules, so each of those needs a decision. Until someone on your side can state the clean share of the existing records, you do not have a migration estimate yet. You have a profiling task.",[35,53,55],{"id":54},"group-two-what-the-system-must-guarantee","Group two: what the system must guarantee",[10,57,58,61],{},[42,59,60],{},"Compliance and audit."," Regimes such as HIPAA and SOC 2 shape the design from the first day: how access is granted, what gets logged and for how long, how data is encrypted, how deployments are approved, which hosting services are allowed. When these rules are part of the first design, the cost is known and can be planned. Retrofitting them into a system that was built without them means reopening decisions already made, and that is much more expensive. (This is general information, not legal advice. Confirm your obligations with counsel.)",[10,63,64,67],{},[42,65,66],{},"Uptime and correctness."," Ask two questions. What does an hour of downtime cost the business? And what happens when the system shows a wrong number? An internal tool that can be offline on a Sunday morning needs one server and a backup. A system that takes orders around the clock needs redundancy, monitoring, tested failover and people on call. Similarly, a dashboard with a rounding quirk is an annoyance, while an invoicing error is a financial problem with its own controls, reconciliation and test burden.",[35,69,71],{"id":70},"group-three-what-the-system-does","Group three: what the system does",[10,73,74,77],{},[42,75,76],{},"Distinct roles."," Each kind of user with really different permissions and screens is close to another application to design, build and test. Five roles do not cost five times one role, but they cost a lot more than one, and the interactions between them (who can approve whose work, who can act on behalf of whom) multiply the test cases.",[10,79,80,83],{},[42,81,82],{},"Features and interface."," The number of functions and the polish of the interface do matter. They are just the driver that vendors estimate best and that surprises budgets least.",[10,85,86],{},"Ranked by their typical effect on the final budget, the six fall roughly in the sequence used above: integrations, data, compliance, guarantees, roles, features. That is a ranking from experience, not a measured result, and your project may reorder it.",[14,88,90],{"id":89},"same-features-different-projects","Same features, different projects",[10,92,93],{},"Consider two hypothetical companies that both want a customer portal where clients log in, view orders, download invoices and open service requests.",[10,95,96,99],{},[42,97,98],{},"Company A"," runs a modern cloud ERP with a documented API. Its customer records were cleaned up during a recent migration. No regulated data is involved. There are two roles: customer and internal staff. If the portal is down for an hour overnight, nobody is hurt.",[10,101,102,105],{},[42,103,104],{},"Company B"," runs a 20-year-old ERP on a server in its own building, with a vendor that has stopped publishing documentation. Orders live there, invoices live in a separate accounting package, and service requests live in a third tool. Roughly a third of customer accounts are suspected duplicates. Some customers are healthcare providers and upload documents containing patient information. There are five roles, including a distributor who acts for several end customers. The portal is the main ordering channel.",[10,107,108],{},"The feature list is word for word the same. Company B's project is several times larger, and almost none of the difference is in the screens. If both companies collected quotes based on the feature list alone, Company B's quotes would be fiction.",[14,110,112],{"id":111},"a-worksheet-you-can-fill-in-before-talking-to-anyone","A worksheet you can fill in before talking to anyone",[10,114,115],{},"Answer each line in writing. The score does not matter. The blanks do.",[117,118,119,135],"table",{},[120,121,122],"thead",{},[123,124,125,129,132],"tr",{},[126,127,128],"th",{},"Driver",[126,130,131],{},"Write down",[126,133,134],{},"It will cost more if",[136,137,138,150,161,172,183,194],"tbody",{},[123,139,140,144,147],{},[141,142,143],"td",{},"Integrations",[141,145,146],{},"Each connected system and its interface type",[141,148,149],{},"For any system, the honest answer is \"we would need to ask the vendor\"",[123,151,152,155,158],{},[141,153,154],{},"Inherited data",[141,156,157],{},"Record counts per entity and the estimated clean share",[141,159,160],{},"Nobody has run a single profiling query",[123,162,163,166,169],{},[141,164,165],{},"Compliance",[141,167,168],{},"The regime, the data it covers and the agreements already signed",[141,170,171],{},"The plan is to \"sort that out later\"",[123,173,174,177,180],{},[141,175,176],{},"Guarantees",[141,178,179],{},"Cost of an hour offline and cost of a wrong figure",[141,181,182],{},"The requirement is \"it can never go down\", with no budget attached",[123,184,185,188,191],{},[141,186,187],{},"Roles",[141,189,190],{},"Each role and what it can do that others cannot",[141,192,193],{},"You count more than three, or roles can act for each other",[123,195,196,199,202],{},[141,197,198],{},"Scope",[141,200,201],{},"The smallest release that someone would use",[141,203,204],{},"No one can describe it",[10,206,207],{},"Every blank is something a discovery phase has to answer. With three or more lines blank, putting quotes side by side is premature, because the vendors will fill those blanks with their own assumptions, and each will fill them differently.",[35,209,211],{"id":210},"the-last-line-matters-most","The last line matters most",[10,213,214],{},"The question about the smallest useful release deserves extra time. A team that can say \"version one only handles reorders for existing customers, and that alone removes 40 calls a day\" has a project that can ship early, earn trust and be stopped at any point with something in hand. A team that cannot name a smaller version will build the whole thing at once, and the whole thing is where overruns live.",[10,216,217],{},"It is also a check on whether you should build at all. If the smallest useful version looks exactly like a product you can already buy, buy it.",[14,219,221],{"id":220},"reading-a-proposal-when-you-cannot-check-the-number","Reading a proposal when you cannot check the number",[10,223,224],{},"The total itself is beyond your power to check from the outside. The thinking that produced it is not.",[10,226,227,230],{},[42,228,229],{},"Are the assumptions written down?"," A line such as \"assumes the ERP exposes order data through a REST API with a test environment\" is a gift. You can confirm it or correct it, and you know what happens to the price if it is false. A bare total gives you nothing to discuss.",[10,232,233,236],{},[42,234,235],{},"Is investigation priced separately from construction?"," A firm price for a system the vendor has not looked inside can only mean one of two things: a large cushion built into the number, or a plan to reopen the price once the surprises arrive. You pay either way.",[10,238,239,242],{},[42,240,241],{},"Does it say what is left out?"," The usual omissions are data cleanup, user training, third-party licenses and hosting, and support after launch. If the proposal is silent on these, ask about each by name.",[10,244,245,248],{},[42,246,247],{},"Can you stop between phases?"," Phases should end at decision points where you hold something usable, not only at payment milestones. The first of those points should come right after discovery.",[10,250,251,254],{},[42,252,253],{},"Does the estimate show its uncertainty?"," Early estimates are wide and should narrow as unknowns are resolved. A proposal that gives a tight number for the first phase and an honest range for later ones is showing you how estimation really works. One precise figure for a year of work is not more accurate. It is just hiding the range.",[14,256,258],{"id":257},"the-part-of-the-budget-that-starts-at-launch","The part of the budget that starts at launch",[10,260,261],{},"Launch is where a second set of costs begins, and over the life of a system they commonly add up to more than the original build.",[263,264,265,272,278,284,290],"ul",{},[266,267,268,271],"li",{},[42,269,270],{},"Keeping it current."," Frameworks, libraries and runtimes release security fixes and eventually reach end of support. Someone has to apply updates and test them.",[266,273,274,277],{},[42,275,276],{},"Repairing connections."," The systems you integrated with will change their APIs. Each change is unplanned work on your side.",[266,279,280,283],{},[42,281,282],{},"Running it."," Hosting, databases, monitoring, backups, third-party services and license fees recur every month.",[266,285,286,289],{},[42,287,288],{},"Watching it."," If the uptime requirement is real, someone is on call, and that has a cost.",[266,291,292,295],{},[42,293,294],{},"Changing it."," The business will change, and the software must follow. This is usually the largest item.",[10,297,298],{},"A plan that budgets nothing for the first year after launch produces a predictable result: the system drifts, falls behind on updates, and within a few years the conversation is about modernization. Ask every vendor what happens after go-live, who does it and what it costs.",[14,300,302],{"id":301},"two-things-this-model-does-not-cover","Two things this model does not cover",[10,304,305],{},"Where the team is located changes the arithmetic through overlap hours, rework and coordination, in ways an hourly rate does not show. And none of this tells you whether a particular vendor can deliver what they describe. Both are separate evaluations, and both are worth doing before you sign.",[14,307,309],{"id":308},"which-of-the-six-drivers-can-you-not-answer-yet","Which of the six drivers can you not answer yet?",[10,311,312],{},"Send Trivo your blank lines. In a Two-Week Discovery we go through each driver against your real systems and data, and the written scope that comes out of it is yours to hand to whichever firm you choose, ours or another.",{"title":314,"searchDepth":315,"depth":315,"links":316},"",2,[317,318,324,325,328,329,330,331],{"id":16,"depth":315,"text":17},{"id":26,"depth":315,"text":27,"children":319},[320,322,323],{"id":37,"depth":321,"text":38},3,{"id":54,"depth":321,"text":55},{"id":70,"depth":321,"text":71},{"id":89,"depth":315,"text":90},{"id":111,"depth":315,"text":112,"children":326},[327],{"id":210,"depth":321,"text":211},{"id":220,"depth":315,"text":221},{"id":257,"depth":315,"text":258},{"id":301,"depth":315,"text":302},{"id":308,"depth":315,"text":309},"Strategy","2026-10-12","You can't know the price before a quote, but you can know what drives it. Six cost drivers, a self-check worksheet and how to read a proposal.","md",{},true,"\u002Finsights\u002Fcustom-software-cost-framework",10,[341,342,343],"build-vs-buy","two-week-discovery-deliverables","evaluating-engineering-depth","over-engineering",[346],"custom-software",{"title":5,"description":334},"insights\u002Fcustom-software-cost-framework","opDLehaVlZH4GP7np0JIaTf0BIpFCKrkp9AFIjTd37o",[351,358,365,370,375,380,388,393,398,403,405,412,417,422,428,434,440,445,450,455],{"path":352,"title":353,"description":354,"category":332,"readingTime":355,"relatedServices":356,"date":333},"\u002Finsights\u002Fbuild-vs-buy","The License Fee Is the Small Number: A Working Guide to Build or Buy","Buying software is usually right, until the product sits on top of how you make money. How to sort capabilities, price the hidden costs and decide.",9,[346,357],"modernization",{"path":359,"title":360,"description":361,"category":362,"readingTime":355,"relatedServices":363,"date":333},"\u002Finsights\u002Fcloudflare-observability","The Cloudflare Signals You Need Wired Up Before Something Breaks","Cloudflare records plenty by default. Whether a person hears about a problem in time depends on choices made in a quiet week, not mid-outage.","Cloudflare",[364,357],"cloudflare",{"path":366,"title":367,"description":368,"category":362,"readingTime":355,"relatedServices":369,"date":333},"\u002Finsights\u002Fcloudflare-performance-tuning","After the Static Assets: Where Cloudflare Performance Is Actually Won","Default caching handles images, CSS and JavaScript. The larger gains sit in HTML, API responses, cache keys and origin trips that nobody tuned.",[364,346],{"path":371,"title":372,"description":373,"category":362,"readingTime":355,"relatedServices":374,"date":333},"\u002Finsights\u002Fcloudflare-waf-and-ddos","Managed Rules Know the Internet. Custom Rules Have to Know Your Application.","Cloudflare's managed WAF and DDoS rules stop generic attacks. Logins, APIs, bots and false positives still need rules written from your own traffic.",[364,346],{"path":376,"title":377,"description":378,"category":362,"readingTime":355,"relatedServices":379,"date":333},"\u002Finsights\u002Fcloudflare-zero-trust-and-integrity","Who Got In Versus What Is Running: Two Integrity Problems One Control Cannot Solve","Zero Trust verifies who reaches a system. Client-side script monitoring verifies what runs in the browser. They fail differently and need separate owners.",[364,357],{"path":381,"title":382,"description":383,"category":384,"readingTime":385,"relatedServices":386,"date":333},"\u002Finsights\u002Fcrm-adoption-and-training","Your CRM Passed Every Test and Nobody Uses It: A Diagnostic for Stalled Adoption","Low CRM adoption is rarely a training gap. How to tell whether the cause is screen friction, missing payback or management habits, and what to fix first.","CRM",8,[387],"crm",{"path":389,"title":390,"description":391,"category":384,"readingTime":385,"relatedServices":392,"date":333},"\u002Finsights\u002Fcrm-implementation-timeline","The Honest Calendar of a CRM Implementation: Five Phases and Where the Weeks Go","Provisioning a CRM takes a day. Making it the place your team sells from takes months. A phase-by-phase calendar, with the parts quotes tend to leave out.",[387,346],{"path":394,"title":395,"description":396,"category":384,"readingTime":355,"relatedServices":397,"date":333},"\u002Finsights\u002Fcrm-migration-checklist","CRM Migration Checklist: The Records Arrive, the Selling Process Gets Left Behind","A CRM migration is a process migration with a data load attached. What a plain export loses, how to choose a cutover, and a checklist for each stage.",[387,357],{"path":399,"title":400,"description":401,"category":384,"readingTime":385,"relatedServices":402,"date":333},"\u002Finsights\u002Fcustom-crm-vs-off-the-shelf","Should You Build Your Own CRM? Run the Build-or-Buy Test on Your Sales Process","Most of a CRM is a commodity you should buy. The question is whether the way you sell fits the platform's model, and what it costs when it does not.",[387,346],{"path":338,"title":5,"description":334,"category":332,"readingTime":339,"relatedServices":404,"date":333},[346],{"path":406,"title":407,"description":408,"category":409,"readingTime":355,"relatedServices":410,"date":333},"\u002Finsights\u002Fetl-vs-elt","Transform before or after loading? A practical ETL versus ELT decision for mid-sized teams","ETL or ELT is a question of where transformation runs and who pays for it. A practical way for a mid-sized team to choose, with the costs most plans miss.","Data",[346,411],"ai-automation",{"path":413,"title":414,"description":415,"category":332,"readingTime":339,"relatedServices":416,"date":333},"\u002Finsights\u002Fevaluating-engineering-depth","Ask About the Outage: How to Vet a Software Vendor's Real Engineering Ability","Portfolios and logos look the same from every vendor. The interview questions, artifacts and deal-breakers that show who has really run software in production.",[346,357],{"path":418,"title":419,"description":420,"category":165,"readingTime":339,"relatedServices":421,"date":333},"\u002Finsights\u002Fhipaa-business-associate-agreement","A BAA Is a Contract, Not a Badge: What Your Software Vendor Is Really Signing Up For","What a HIPAA Business Associate Agreement commits a software vendor to, what it leaves unproven, and what to ask and build before PHI reaches the system.",[346,411],{"path":423,"title":424,"description":425,"category":165,"readingTime":426,"relatedServices":427,"date":333},"\u002Finsights\u002Fhipaa-technical-safeguards-checklist","Reading 45 CFR 164.312 Like a Design Document: HIPAA Technical Safeguards for Engineers","The five HIPAA technical safeguard standards mapped to concrete engineering decisions: identity, logging, integrity, authentication and encryption.",11,[346,357,364],{"path":429,"title":430,"description":431,"category":432,"readingTime":355,"relatedServices":433,"date":333},"\u002Finsights\u002Flegacy-erp-anticorruption-layer","The ERP stays as it is: building on a decades-old system through an anti-corruption layer","How to build new software on an old ERP without modifying it, using an anti-corruption layer: what goes inside, how to handle writes, when to skip it.","Modernization",[357,346],{"path":435,"title":436,"description":437,"category":438,"readingTime":339,"relatedServices":439,"date":333},"\u002Finsights\u002Fllm-in-production-confidence-thresholds","An LLM that proposes and a system that decides: thresholds, review and audit for production AI","Running an LLM in production without giving it autonomy: measured confidence, thresholds set by business cost, human review that works, an audit trail.","AI",[411,346],{"path":441,"title":442,"description":443,"category":332,"readingTime":355,"relatedServices":444,"date":333},"\u002Finsights\u002Fnearshore-offshore-onshore-cost","Cheap Hours, Expensive Projects: Pricing US, Nearshore and Offshore Teams Honestly","The hourly rate tells you little about what a project will cost. How overlap, rework, turnover and compliance change the math for each delivery model.",[346],{"path":446,"title":447,"description":448,"category":438,"readingTime":355,"relatedServices":449,"date":333},"\u002Finsights\u002Frpa-vs-api-integration","Bots on the screen or calls to the API: where RPA earns its place and where it becomes debt","RPA and API integration solve the same problem at different layers. How to choose, what screen automation really costs, and how to run it safely if you must.",[411,346],{"path":451,"title":452,"description":453,"category":432,"readingTime":355,"relatedServices":454,"date":333},"\u002Finsights\u002Fstrangler-fig-modernization","Replace the legacy system in slices: a working guide to the strangler fig pattern","How to retire a legacy system piece by piece while the business keeps running: the facade, the first slice, parallel runs, and when the pattern fails.",[357,346],{"path":456,"title":457,"description":458,"category":332,"readingTime":339,"relatedServices":459,"date":333},"\u002Finsights\u002Ftwo-week-discovery-deliverables","Paying for a Plan, Not a Pitch: What Two Weeks of Discovery Owes You","A paid discovery should leave you with documents another team could build from. The five deliverables, the work behind them and the limits to expect.",[346,357],1792618973202]