Problems & solutions · Custom Software

eSIM Lifecycle Management Software Problems: The 5 That Cost Real Money, and How to Avoid Them

Esim Lifecycle Management Software software overview illustration showing common problems and fixes.
The short answer

The most expensive failure in eSIM software is collapsing profile state into an activated flag on the subscription. The business support system then believes the line is live, billing starts, the welcome campaign fires, and the customer is holding a phone that cannot make calls on a Saturday. On Monday an agent opens their tooling, sees a subscriber, a plan and a number, and has no way to tell whether the profile was released, downloaded to the wrong device, or spent on a retry limit. Every one of those tickets escalates to the two engineers with portal access, and in device manufacturing the same failure is a product that never onboarded and a return that costs far more than the connectivity ever earned.

Why does profile state get scoped as a boolean?

Because that is the shape the rest of the stack already uses. Subscriptions are active or not, lines are provisioned or not, and a developer inheriting that vocabulary models the profile the same way. It is a reasonable first instinct and it is the biggest scope failure in this category, because a profile is a state machine with transitions that are not all reversible.

Under the consumer architecture a profile moves through released for download, downloaded, installed, enabled, disabled and deleted, and those transitions can be initiated by the operator, by the device or by the user. A profile already downloaded to an embedded identifier cannot simply be handed to a different device. A deleted profile is gone, and reissuing means drawing a new one from inventory. None of that survives a single flag, so the truth ends up in a vendor portal and everything downstream inherits a lie.

The fix is to mirror the state machine locally as a first class object, keyed on the integrated circuit card identifier and the embedded identifier, updated from the platform's result notifications, with every transition timestamped and attributed to whoever caused it. That local mirror is what makes support possible, and it is also what makes safe automation possible, because an automated recovery can check the real state instead of guessing. Ask a developer to explain what happens when a profile downloads to the wrong device. Someone who has done this answers immediately and then explains why release and reissue is not always available.

What goes wrong when you reconcile inventory against the provisioning platform?

Reconciliation is where most teams discover how much they do not know. Physical stock sits in a warehouse system or a spreadsheet as ranges by batch. Embedded profile inventory sits with the provisioning platform as pools awaiting release. Activation state sits in the business support system. Nobody can answer how many usable profiles exist for the market about to run a promotion, or how many activation codes were issued in the last thirty days and never consumed.

That unconsumed pool is real money and a real exposure. Codes issued and abandoned hold profiles that cannot be reused until somebody reclaims them, reclamation is usually manual because nobody built the sweep, and a code sitting in an inbox for six months is effectively a credential.

Build one inventory model spanning physical and embedded, with an expiry policy on issued codes, an automated reclaim that returns abandoned profiles to the pool, and stock alerting per market and per profile type. Then reconcile continuously rather than at migration: compare your local mirror against the platform on a schedule and treat any divergence as an incident rather than a report. Divergence is normal in production, and a system that only reconciles once during a migration will drift back out within weeks. Expect the first reconciliation to surface profiles in states nobody believed existed, and budget time to resolve them rather than treating it as a data cleanup task somebody will do later.

Why do provisioning notifications and device rules break after launch?

Result notifications are the mechanism keeping your mirror honest, and in production they get missed. Networks drop them, your endpoint is briefly unavailable during a deployment, a vendor retries on a schedule you did not read. A build that assumes every notification arrives will drift out of sync inside a few weeks, and the drift is silent because nothing errors. Poll for state on a schedule as well as listening, treat the platform as authoritative when they disagree, and log the correction so the pattern is visible. Ask any prospective developer specifically how they handled a missed notification, because the answer separates people who have run this from people who have read the specification.

Device rules break every autumn. A new device generation lands with different behaviour around multiple installed profiles, in app transfer paths, carrier bundle handling and how a failed download is presented. Operators usually discover this through support tickets rather than data, because nothing recorded the device model and operating system version at the moment a download failed, so a real failure cluster looks like noise across thousands of tickets.

Capture device model, operating system version and embedded identifier with every download attempt and every failure, and make eligibility a data driven rule rather than a branch in code. When a device family behaves differently you change a rule and ship it in a day rather than waiting for an application release. Teams that do this find the cluster within a week and can route affected customers to a working path while the fix lands.

What happens when recovery and transfer journeys are not covered?

Vendor platforms expose primitives. They release profiles, they report state, they do it securely. What they do not know is that your prepaid activation requires an identity check before release in one market and not another, or that your postpaid upgrade should keep the old profile enabled until the new one is confirmed working, or that your care team is measured on first contact resolution. The gap between a primitive and a journey is exactly where customers get stranded.

Device to device transfer is the sharpest example. The unsafe design releases first and hopes. The safe one keeps the existing profile enabled until the new download is confirmed installed, which requires knowing the real state on both devices before acting, which requires the local mirror. Without it you are choosing between a customer with two working profiles and a customer with none, and support cannot tell you which happened.

Recovery needs an authorised path an ordinary agent can execute. Today the loop is usually escalate, find someone with portal access, release manually, issue a new code, ask the customer to try again, and it takes hours or days. Design the care screen deliberately: what state is shown, who is permitted to release a profile, what preconditions are checked, and what gets logged when they do. If a developer describes the care screen without mentioning permissions and logging, they have not run this in production. That screen is also the cheapest part of the build and removes most of the escalations, which is why it should ship first.

Should you build custom or configure what you already own?

Do not build a provisioning platform. That is a security accreditation and key management decision rather than a cost one, and Thales, IDEMIA, Giesecke and Devrient, Kigen and Workz already carry it. Keep buying that layer and do not let anyone talk you into replicating it.

Before commissioning the layer above it, check what your existing tooling can already do. Vendor portals often expose more than the two people with access have configured, and business support systems frequently have unused fields and workflow that could carry a subset of profile state. If you are a small operator with one market, one platform, low volume and an engineering team that can absorb an occasional manual release without it hurting, the manual path is genuinely cheaper than a build and you should stay there.

Build the orchestration layer when two or more hold. Your care team escalates profile issues to engineering more than a handful of times a week. You ship devices where a failed onboarding causes a return. You operate in more than one market with different activation preconditions. You are moving to an embedded first retail journey and it is being designed now. Or you cannot report how many issued activation codes are outstanding, which means you have an inventory leak you cannot size.

How do hidden costs get into the quote?

Vendor count is the first. A quote priced against one provisioning platform and delivered against two is not a small extension, because interfaces and notification behaviour differ in practice even where the specification is shared. Design the abstraction at the level of your own state machine with vendor specific adapters underneath, even if you start with one, because retrofitting a second vendor into a single vendor design usually means touching the whole provisioning path.

Market count is the second. Identity verification requirements and profile release preconditions vary by country, and each variation is a rule with a test case rather than a configuration toggle.

Vendor access is the third and it is a schedule cost rather than a line item. Test credentials and a sandbox run on your vendor's calendar, not yours, so start the request on day one. Fourth is device coverage, because you need real handsets across the models you support and a way to test each autumn. Fifth is retail store activation, which has different authentication and different failure handling from an app journey and is often assumed to be the same flow. Sixth is building consumer and fleet provisioning together, which is two journeys rather than one and is the most expensive assumption in the category.

What separates a build that works from one that fails here?

The ones that work ship the local state mirror and the care console first, and nothing else. That is the cheapest part, it removes most escalations immediately, and it buys the time to do retries, recovery, transfer and inventory properly. The ones that fail attempt transfer journeys, retail activation and fleet provisioning in one release and spend a year while agents still telephone engineering.

Decide which product you are building for before the first sprint. Consumer provisioning is user initiated, assumes somebody can scan a code or tap a button, and can rely on retries with a human present. Fleet provisioning is orchestration driven, runs with no human in the loop, and must assume a device in the field cannot ask for help, which is why the industry published a separate specification for it. The state machines overlap and the trigger models do not. If the answer is genuinely both, scope them as two journeys over one inventory model rather than one flow with conditions.

Interview on vocabulary. Ask a developer to explain the difference between the embedded identifier and the card identifier and what happens when a profile lands on the wrong one. Someone who talks about scan codes has not built this.

Settle ownership before kickoff: the repository, the cloud accounts, the device eligibility data and the right to hire another firm. At Digital Heroes the client keeps all of it from the first commit. This layer sits between your business support system and a vendor you already depend on, and you do not want a third dependency in the middle of that relationship.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. McKinsey found that tech debt can amount to 20-40% of the value of a company's entire technology estate before depreciation, and CIOs report that 10-20% of the budget for new products is diverted to resolving tech-debt issues. Source: McKinsey & Company (2020) →
  2. Retailers improving Core Web Vitals saw measurable gains: Vodafone improved LCP by 31% for 8% more sales, Lazada saw a 16.9% mobile conversion increase, and Cdiscount saw a 6% Black Friday revenue uplift. Source: web.dev (Google Chrome team) (2021) →
  3. Digital Champions expect to achieve about 16% in cost savings and around 15% in revenue gains from digital operations over five years; the study surveyed 1,155 manufacturing executives across 26 countries. Source: PwC / Strategy& (2018) →
  4. An earlier SHRM benchmarking report (reflecting fiscal year 2015, published 2016) established a widely cited baseline average cost-per-hire of $4,129, illustrating how recruiting costs have climbed over time (SHRM's separate 2025 Benchmarking Report shows $5,475 for nonexecutive roles). Note: the $5,475 figure is not on this linked page; it comes from SHRM's 2025 report. Source: SHRM (Society for Human Resource Management) (2016) →
Deepti P. · Project Manager · Lucknow

Deepti manages client software projects with a bias toward writing things down. Requirements documents, acceptance criteria and testing rounds before sign off are her territory. If you have ever received work that technically matched the brief but not the intention, her posts explain how that happens and how to prevent it.

View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

Why can support never tell a customer why an eSIM download failed?
Because the three facts live in three systems and nothing joins them. Profile state sits on the provisioning platform, subscription state sits in the business support system, and the real state sits on the handset. Agent tooling usually shows an activated flag reflecting the subscription rather than the profile. Mirroring the profile state machine locally, keyed on the card and embedded identifiers with timestamped transitions, is what turns an engineering escalation into a first contact resolution.
How do we keep our local state in step when notifications go missing?
Assume they will. Networks drop them, your endpoint is briefly unavailable during a deployment, and vendors retry on schedules you did not set. Listen for notifications and also poll for state on a schedule, treat the platform as authoritative when the two disagree, and log every correction so the pattern is visible rather than silent. Ask any prospective developer specifically how they handled a missed notification, because that question separates production experience from specification reading.
What is the safe way to move a profile to a new phone?
Keep the existing profile enabled until the new download is confirmed installed, rather than releasing first and hoping. That requires knowing the real state on both devices before acting, which is only possible with a local state mirror. Capture device model and operating system version at every step too, because transfer behaviour differs between device families and changes with new releases, and without that data a real failure cluster is indistinguishable from noise.
How should we handle activation codes that were issued and never used?
Give them an expiry policy and an automated sweep that reclaims the profile back into the available pool. Unconsumed codes are both an inventory leak, because those profiles cannot be reused, and a security exposure, because a code sitting in an inbox for months is effectively a credential. Most operators cannot report how many are outstanding, and that number is usually the first thing a build makes visible and the easiest to justify.
Should we support more than one provisioning platform from the start?
Design for it even if you launch with one, because operators consolidate and switch. The practical differences appear in notification behaviour and error semantics rather than in the headline specification, so put the abstraction at the level of your own profile state machine and write vendor specific adapters underneath. Retrofitting a second vendor into a single vendor design normally means touching the entire provisioning path, which is far more expensive than designing the seam early.
Can one flow serve both consumer and fleet provisioning?
No, and assuming it can is the most expensive mistake in this category. Consumer provisioning is user initiated and can rely on retries with a person present. Fleet provisioning is orchestration driven, runs with no human in the loop, and must assume a device in the field cannot ask for help, which is why a separate specification exists for it. Share one inventory model if you need both, but scope them as two journeys with two failure models.
What should the care agent screen actually show?
Current profile state with its transition history, the device model and operating system version last seen, the activation codes issued and their status, and a short list of permitted actions with their preconditions checked. Every action taken should be logged with the agent's identity. If a developer describes this screen without mentioning who is allowed to release a profile and what gets recorded when they do, they have not run this in production. It is also the cheapest part of the build and should ship first.
We are a small operator with one market. Is a build justified?
Probably not yet. Below a certain activation volume the occasional manual release is genuinely cheaper than the software, and vendor tooling plus an engineering team that can absorb it is a reasonable operating model. Watch three numbers instead: escalations from care to engineering per week, failed onboardings that cause a device return, and outstanding activation codes you cannot account for. When any of those stops being absorbable, the case makes itself.
What should I prepare before contacting a software development agency?
A one-page brief beats a 40-page requirements document: the business problem in plain words, who will use the system, the 5 to 10 workflows it must handle, the tools it must connect to, and your budget range and deadline driver. You do not need wireframes, a specification, or technical vocabulary; producing those is the agency's job during discovery. Stating a budget range up front is the single best move, because it gets you honest scoping instead of a quote engineered to win the meeting.
Is a solo freelancer enough for my project, or do I really need an agency?
A solo freelancer is a fine choice for a well-defined build under roughly $15,000 to $20,000 with a limited lifespan: an internal calculator, a scripted integration, a prototype. Above $50,000, or for any system your business will depend on for years, you are buying continuity as much as code: enforced code review, cover when someone is ill, and support that outlasts one person's career plans. Price the risk of a single point of failure, not just the hourly rate.
How much should a small business budget for its first custom app or website?
For a focused first build, most small businesses land between $8,000 and $60,000: roughly $8,000 to $45,000 for a custom website and $25,000 to $60,000 for an internal tool or simple web app, based on Digital Heroes delivery across 2,000+ projects. Customer-facing products with payments, logins, or a mobile app start around $40,000. Quotes far below these bands usually mean a template with your logo on it, not software shaped around your workflow.
How many people should be working on my software project?
A typical $40,000 to $150,000 build runs on three to five people: a technical lead, one or two developers, a designer, and someone owning QA and project communication, often as overlapping part-time roles. More bodies do not make software arrive faster; past a point they slow it down with coordination overhead. The question that matters more than headcount is whether one named senior engineer is accountable for the outcome.
Does the tech stack matter, and which one should I ask for?
It matters less than agencies imply, provided it is boring. A mainstream stack, something like React or Next.js on the front end, Node.js or Python behind it, and PostgreSQL for data, means thousands of developers can maintain your system if you ever change vendors. Apply one test: ask how hard it would be to hire a replacement developer for the proposed stack, and walk away from anything built on an agency's in-house framework.
What should I have ready before I contact a development agency?
Three things, none of them technical: a one-page description of the problem in your own words, a list of the tools and spreadsheets the new system must replace or connect to, and a must-have versus nice-to-have split of features. Add a budget range, even a wide one, because it changes the conversation from fantasy to engineering. You do not need a formal specification; producing that is what a discovery phase is for.
Should I hire a freelancer or an agency for my software project?
A skilled freelancer is the right call for a single-discipline scope under roughly $15,000, like a website, a plugin, or one integration. Above that, projects need design, backend, testing, and project management at once, and a solo builder becomes the single point of failure: if they get sick or take a bigger client, your project simply stops. Agencies bill 20-40% more per hour but carry continuity, code review, and someone to escalate to, which is what you are actually buying.
How do I work out whether custom software will pay for itself?
Do the arithmetic on hours before anything else: if the system saves three staff eight hours a week at a $35 loaded hourly cost, that is about $43,700 a year against, say, a $70,000 build plus 15 to 20% annual maintenance, a payback around two years. Add revenue effects only if you can name them specifically, like faster quotes or fewer abandoned orders, not as vague growth. In our delivery experience the businesses that see payback inside 24 months are the ones automating a process they already measure.
What is a discovery phase, and is it worth paying for separately?
Pay for it, and treat the output as yours. A discovery phase runs two to three weeks, typically 5 to 10% of the eventual build budget, and produces a written scope, wireframes, and a fixed quote you can take to any vendor, including a competitor of the agency that wrote it. Skipping it is how projects end up quoted from a two-paragraph email and delivered at twice the price.
What is the biggest mistake first-time software buyers make?
Choosing the lowest quote without asking why it is the lowest. A bid 40% under the field usually gets there by skipping tests, documentation, and code review, which are invisible in a demo and brutal to pay for later; every stalled project Digital Heroes has been asked to rescue tells some version of that story. The second mistake is signing without a written scope, which reliably turns the winning cheap quote into 1.5x to 2x the price by launch.
How do we get years of data out of our old system and into the new one?
Treat migration as a planned sub-project: a field-mapping document, at least one dry run on a copy of your data, then a cutover with the old system kept read-only for 30 days as a safety net. On Digital Heroes projects it consumes 10 to 15% of the budget when the old system has an export, and more when data must be pulled out screen by screen. Ask any vendor to walk you through their last migration before you sign.
Who owns the code when an agency builds my software?
You should, completely, through a written intellectual property assignment that transfers everything on final payment; without that clause, copyright stays with whoever wrote the code by default. Insist that the repository lives in your own GitHub organization from day one and that hosting, domains, and third-party accounts are registered to you. Also check for licenses to the agency's proprietary frameworks buried in the contract, because those can make switching vendors practically impossible even when you own your own code.
Who can build a custom software system?

Digital Heroes builds custom software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.

Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.

What makes Digital Heroes different from other software companies?

Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.

Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.

How can I check Digital Heroes is legitimate before getting in touch?

Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.

Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.

Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?