
An insurance platform phase one runs 1,420 hours across seven modules. At $40 per hour that is $56,800, at $100 per hour $142,000, and about $92,300 at a $65 blended rate. The full span, every module at its minimum against every module at its maximum, is 1,160 to 1,980 hours.
One decision moves that number more than any feature on any requirements list: whether your policy model already versions. If it does, what follows is integration work. If it does not, effective dating has to be introduced underneath everything else, and nothing in this category costs more to add late.
The reason is structural rather than technical. A policy is not a record that gets edited. It is a sequence of states, each true for a period, and almost every question an insurer asks is really a question about a date. What was covered on the day of the loss? What was the sum insured before the mid-term adjustment? Which wording applied when the claim was notified? A system that stores the current state and overwrites the rest cannot answer any of them without a human reading paper.
The ordinary failure here is not a failed implementation. It is a claim declined on a coverage position the system cannot evidence, a complaint that follows it, and a reserve that has to be restated because the policy as it stood on the loss date was never recoverable from the database.

Module | Worked example | Published range |
Policy data model with versioning and effective dating | 260 h | 200 to 320 |
Product and rating configuration | 220 h | 180 to 300 |
Quote and bind flow | 180 h | 140 to 240 |
Claims intake, reserve ledger and adjudication | 280 h | 220 to 380 |
Document generation and the repository path | 110 h | 100 to 180 |
Integrations: core, payments, ACORD or FHIR | 220 h | 180 to 320 |
Reporting, regulatory extracts and audit trail | 150 h | 140 to 240 |
Total | 1,420 h | 1,160 to 1,980 |
The largest single line is claims, at 220 to 380 hours, and the second is the policy model itself. Notice what is not the largest: the quote and bind flow, at 140 to 240, which is the part most buyers lead with because it is the part they can see.
That inversion is the whole shape of insurance software. The visible surface is cheap and the invisible model is expensive, which is why demonstrations are a poor way to choose a platform and why a quote assembled from screen counts will be wrong.
Worth a filter before the detail, because "insurance software" covers several different businesses.
This prices a policy administration platform — the system of record that holds policies, rates risk, binds cover, handles claims and produces documents. That is the shape an insurer, an MGA or a managing general agent needs.
A broker needs something adjacent but different. A broking system is about placement and client management rather than being the system of record for cover: it holds the client, the market submission, the quotes received and the commission, and the carrier's system holds the policy. Several modules above still apply, but the policy model is lighter and the rating engine is usually absent because the carrier rates.
A comparison or distribution site is different again, and far smaller. It needs quote, bind and integration, and none of the claims, reserve or regulatory extract work, because it is selling somebody else's product.
Establishing which of the three you are is the first thing discovery settles, and it moves the number by more than any module choice inside it.
Effective dating is the mechanism, and it works the same way it does anywhere money and time interact. Every policy fact carries the date range over which it holds. Reads take a date rather than just a policy number, so "what is the sum insured" becomes "what was the sum insured on 14 March", and the quote engine, the claims module and the regulatory extract all ask that question rather than reading a column.
Mid-term adjustments are the obvious case. A vehicle added in month four, a sum insured increased in month seven, an address changed in month nine — each produces a new version of the policy with its own premium effect, and the premium effect is pro-rated against the remaining term rather than charged in full.
Cancellation and reinstatement are the cases people forget. A policy cancelled for non-payment and reinstated three weeks later has a gap, and whether that gap is covered is a commercial decision the system has to represent rather than assume. A model with a single status field cannot hold "cancelled, then reinstated, with a gap in cover from the 3rd to the 24th".
Retrofitting this is expensive because it is not a schema change. It is a schema change, plus a backfill of live policies, plus a rewrite of every read path, plus a reconciliation proving the new history reproduces the premiums already charged and the claims already paid. The module is budgeted at 260 hours inside a 200 to 320 range, and that range assumes you are building it rather than excavating it.
180 to 300 hours, and the test of whether it was built well is simple: can you launch a new product without a release?
A rating engine takes a risk and returns a premium. The question is where the rules live. If they live in code, every rate change is a development ticket, a test cycle and a deployment, and the underwriting team's pace is set by the engineering backlog. If they live in configuration — tables, factors, rules an underwriter can read and an actuary can audit — then a rate change is an afternoon and a new product is a week.
The published driver says it plainly: how many products, and how variable the rating, is a high-impact decision, and one motor product prices very differently from a schedule-rated commercial book. Personal lines tend toward tabular factors with a defined set of inputs. Commercial lines carry judgement, referral rules, and schedules where each item rates separately before anything aggregates.
Build for the book you have and the one you intend to write within two years. Building a configurable engine for a single simple product is over-engineering; building a hard-coded one for a growing commercial book is a rewrite with a date on it.
One thing to insist on either way: every quote must be reproducible. Store the rating version and the inputs alongside the premium, so a quote given in March can be re-run in September and produce the same number. Without it, a disputed premium becomes an argument about what the rates were at the time, and a rate change that was supposed to be routine becomes a reason nobody trusts the engine.
220 to 380 hours, the biggest module in the estimate, and the part that touches the balance sheet.
Claims intake is the easy half. Adjudication and the reserve ledger are not, because a reserve is an accounting position that changes over the life of a claim and every change has to be explicable. A claim is notified with an estimate, the estimate moves as information arrives, payments are made against it, and the difference between what was reserved and what was paid is a number the business reports on.
That makes the reserve an append-only problem, the same discipline as any ledger holding money that is not freely yours. Movements are entries. Corrections are reversing entries, never edits. The position at any past date is derivable by replaying entries up to that date, because someone will eventually ask what the reserve was at the year end and "the current number" is not an answer.
Recoveries complicate it further, because money can come back — from a third party, from salvage, from a reinsurer — and a recovery against a claim already closed has to reopen the position without rewriting the history that closed it.
Adjudication adds its own shape. Most claims are straightforward and should settle without a human; the value of the module is in routing the rest to the right person with the right authority. Authority limits are a data model, not a permission flag — who may reserve up to what, who may settle up to what, what happens when a reserve crosses a threshold mid-life — and building them as a configurable ladder rather than as code is the difference between a business that can restructure its claims team and one that needs a release to do it.
This is the scope question that quietly doubles a piece of work, and it is worth settling before anyone quotes.
An occurrence wording responds to losses that happen during the policy period, whenever they are reported. A claims-made wording responds to claims notified during the policy period, with a retroactive date limiting how far back the triggering event may have occurred.
That retroactive date is a second axis on coverage resolution that occurrence wordings simply do not have. Determining whether a claim is covered stops being "was the policy in force on the loss date" and becomes a two-dimensional test across notification date and event date, with the retroactive date as a boundary that itself has a history if the policy has been renewed several times.
If your book is entirely occurrence, say so in discovery and the coverage logic is one axis. If any line is claims-made — professional indemnity, directors and officers, medical malpractice — the resolution engine carries both, and the published driver flags it as adding real scope for exactly that reason.
110 hours inside a 100 to 180 range, and the module most often under-scoped because the output looks like a formatting job.
A policy schedule, a certificate and a claims settlement letter are evidence. What matters is not that the document renders, it is that the document issued on a given date can be reproduced exactly, years later, from the data as it stood at issue and the template as it stood at issue. Reproduce it from today's template and you have produced a different document that happens to look similar, which in a dispute is worse than having none.
So the repository path in the module name is doing real work. Generated documents are stored, versioned and addressable, with the template version and the data snapshot recorded alongside. The alternative — regenerating on demand — is cheaper to build and fails the first time a wording changes.
Add the delivery question too: what was sent, to whom, when, and by what channel. For regulated communications that record is part of the obligation rather than a nice-to-have.
Bulk is the other half of this module that estimates miss. Renewal invitations, regulatory notices and scheme-wide wording changes arrive as thousands of documents generated in one run, against a deadline, with a failure partway through being a reconciliation problem rather than a retry. Designing generation as a queued, resumable job from the start costs little; discovering the need during a renewal cycle costs a weekend.
Four drivers, and only one of them is a feature decision.
Whether the policy model already versions is the largest swing, for the reasons above. How many products, and how variable the rating, is high impact and lands in rating configuration rather than in the interface. Which lines are in scope adds real scope when any of them are claims-made. And which core you keep, and what it really exposes, because the integration module is sized by your incumbent system's actual interface at your version rather than by its documentation.
That last one is the most common source of a mid-build surprise in every sector we work in, and insurance is worse than most because the incumbent is often older and its interface is often a file drop rather than an API.
Six things, each its own decision, and each excluded deliberately rather than overlooked.
Quality assurance at 20 to 25 percent of build, which is a multiplier rather than a line. Environments and deployment at 80 to 160 hours. Security review and penetration testing at 60 to 120, which is not optional on a system holding policyholder data. Then three that are usually phase two and are listed rather than dropped because the argument is for all of them: actuarial reporting extracts at 100 to 200, fraud monitoring unit tooling at 120 to 240, and treaty and cession modelling at 160 to 320.
Reinsurance deserves a specific warning. If you cede risk, the cession has to be calculated, recorded and reported, and recoveries have to flow back against the claims they belong to. That is the 160 to 320 hour line, it is phase two in most plans, and it is the one most likely to be discovered as phase one by the finance team.
Not in the modules, which are published above and well understood.
They fail when the policy model does not version, so a coverage position on a past date cannot be evidenced and every dispute becomes a manual reconstruction from paper. They fail when rating was built in code, so the underwriting team's speed is capped by the engineering backlog and the first competitive rate change takes a quarter. They fail when the reserve was stored as a balance rather than as entries, so the year-end position cannot be reconstructed and the auditor's question has no answer.
And they fail on the incumbent integration, when the core system's interface at your version turns out to differ from its documentation, and a module budgeted at 180 hours runs past 320.
Every one of those is visible in discovery and invisible in a feature list. That is the argument for refusing to quote from a requirements document: the document describes screens, and none of the four failures above is a screen.
A policy administration phase one runs 1,420 hours across seven modules: the policy data model at 260 hours, rating configuration at 220, quote and bind at 180, claims and the reserve ledger at 280, document generation at 110, integrations at 220, and reporting and audit at 150. That is $56,800 at $40 per hour, about $92,300 at a $65 blended rate, and $142,000 at $100. The full span across the seven is 1,160 to 1,980 hours, and quality assurance adds 20 to 25 percent on top.
Because almost every question an insurer asks is a question about a date, and a system that stores only the current state cannot answer any of them. What was covered on the loss date, what the sum insured was before a mid-term adjustment, which wording applied at notification. Building effective dating from the start sits inside a 200 to 320 hour module. Adding it later means a schema change, a backfill of live policies, a rewrite of every read path and a reconciliation proving the new history reproduces premiums already charged.
Configuration, in almost every case. The test is whether you can launch a new product without a release. If rules live in code, every rate change is a development ticket, a test cycle and a deployment, so underwriting moves at the pace of the engineering backlog. If they live in tables and factors an underwriter can read and an actuary can audit, a rate change is an afternoon. The exception is a single simple product with no plans to expand, where a configurable engine is over-engineering.
An occurrence wording responds to losses happening during the policy period whenever reported. A claims-made wording responds to claims notified during the period, with a retroactive date limiting how far back the triggering event may have occurred. That retroactive date is a second axis on coverage resolution, so determining cover becomes a two-dimensional test across notification date and event date rather than a single check. If any line in your book is claims-made, the resolution engine carries both axes.
Because a reserve is an accounting position that changes across the life of a claim, and every change has to be explicable. Claims intake is straightforward; adjudication and the reserve ledger are not. The reserve has to be append-only, with movements as entries and corrections as reversing entries, so that the position at any past date is derivable by replay. Recoveries complicate it further, because money arriving from a third party, salvage or a reinsurer against a closed claim must reopen the position without rewriting the history that closed it.
Quality assurance at 20 to 25 percent of build, environments and deployment at 80 to 160 hours, and security review and penetration testing at 60 to 120. Then three that are usually phase two: actuarial reporting extracts at 100 to 200, fraud monitoring tooling at 120 to 240, and treaty and cession modelling at 160 to 320. If you cede risk, that last one matters more than its position in the list suggests, because cessions and reinsurance recoveries affect reported results.
Usually, and it is often the right answer. The integration module at 180 to 320 hours assumes you keep a core and build the policy, rating, claims and document layer around it. What decides the figure is not the integration count but what your incumbent actually exposes at the version you run, which is frequently a file drop rather than an API and frequently differs from the documentation. Establish that in discovery, because it is the most common source of a mid-build surprise.

Vikas has around fifteen years of experience building software and now builds generative AI systems at Zyneto. His work covers retrieval augmented generation, agentic AI, knowledge graphs, AI memory, and the evaluation and guardrails that decide whether any of it is safe to put in front of customers. He has shipped enterprise copilots, document AI, chatbots and predictive analytics for e-commerce, fintech and marketing teams, and works day to day in Python, JavaScript and SQL. He follows multimodal models, business process automation and enterprise AI security closely, and mentors engineers moving into AI. He writes about architecture, inference cost and the failure modes that only show up at production scale.
Share your details and we will talk soon.
Be the first to access expert strategies, actionable tips, and the trends actually shaping the digital world. No fluff - just practical insights delivered straight to your inbox.
Dive into our blog and stay ahead of the curve with expert perspectives, future-ready trends, and tech tips written for decision-makers and doers alike.