Problems & solutions · Custom Software

Charity Raffle and Lottery Software Problems: The 6 That Void a Draw or Risk Your Licence, and How to Avoid Them

Charity Raffle Lottery Management Software workflow illustration showing common problems and fixes.
The short answer

The most expensive failure in charity raffle software is a ticket sequence that cannot be reconstructed. Under draw night load, a naive numbering scheme produces gaps where reservations were abandoned, duplicates where a payment retry issued twice, and tickets whose position in the sequence depends on which application server happened to handle the request. Nobody notices while the money is coming in. It surfaces when a regulator asks you to account for every number issued, and the honest answer is that you cannot. At that point the exposure is not a refund, it is a voided draw, a jackpot that has to be unwound, and a licence conversation you cannot win.

Why does ticket numbering get underestimated so often?

Because on paper it is a counter, and every developer has written a counter. The requirement reads as one line in the licence conditions, it produces no visible feature, and it is the single hardest engineering problem in the whole build.

What makes it hard is that three things have to be simultaneously true at several hundred sales per second across multiple servers. Every ticket sold carries a unique number. The full sequence reconstructs afterwards with no unexplained holes. And no number is ever issued twice, including when a payment processor times out and the buyer presses the button again.

The common approaches each fail in a specific way. A database sequence bottlenecks under load and becomes the reason checkout times out in the final hour. A distributed identifier generator scales beautifully and leaves gaps that a regulator will ask you to explain. Issuing the number before payment settles produces holes wherever a card declines. Issuing it after settlement without idempotency produces duplicates the first time a webhook is delivered twice.

The pattern that holds is a single authoritative issuance path with pre allocated blocks, tickets that exist only once payment has actually settled, and an append only ledger where an abandoned reservation is recorded as abandoned rather than deleted. Reservation before payment, issuance after, nothing removed. Ontario's electronic raffle system requirements are the strictest widely available reference on this, and building to that standard tends to satisfy other regulators too. If a developer proposes generating numbers on the client, or reconstructing them afterwards from a payment processor export, that is the moment to stop the conversation rather than the moment to negotiate.

What goes wrong when you migrate supporter and prior draw records?

Most charities arrive with three years of history spread across a packaged raffle platform, a payment processor, a donor database and a spreadsheet somebody maintained for the calendar draw. The instinct is to bring all of it into the new system so the reporting is continuous. That instinct causes two specific problems.

The first is that historical ticket records were never designed to be re verified. If you import old draws as live data, your new ledger now contains sequences it did not issue and cannot vouch for, and the integrity guarantee you just paid to build is diluted by records that predate it. Keep completed draws as an archive: immutable, queryable, clearly labelled as imported, and outside the issuance ledger. Reporting can join across both. The ledger should only ever contain tickets your system issued.

The second is supporter identity. The same person appears as a ticket buyer under an email address, as a donor in your fundraising database under a household record, and as an event attendee under a misspelling. Merging those badly is worse than not merging them, because a raffle purchase is not a gift and treating it as one distorts every fundraising metric you have and can create receipting problems. Decide before migration which system owns the constituent record, keep the raffle transaction linked to it rather than duplicated inside it, and record the transaction type explicitly. Charities that skip that decision spend the following year explaining to their board why total income moved.

The third, smaller trap is subscription draws. If supporters are already on a recurring monthly entry with a stored payment method, migrating those mandates is a payments exercise with its own consent and authorisation questions, not a data load. Plan it as a separate workstream and expect a proportion of mandates to need re authorisation rather than transfer.

Why do payment webhooks and in venue devices break after launch?

Two integrations decide whether a draw night goes well, and neither of them is the one people ask about during procurement.

The first is the payment processor callback. On a quiet Tuesday, a payment succeeds and the confirmation arrives instantly. On draw night, callbacks arrive late, arrive twice, or never arrive at all while the charge has definitely gone through. If your system issues a ticket on receipt of a callback with no idempotency key, a duplicate delivery issues a second ticket for one payment. If it issues nothing when a callback is lost, you have a buyer who has been charged and holds no ticket, which is a regulatory problem rather than a support ticket. The fix is unglamorous and non negotiable: idempotency keys on every issuance, a reconciliation job that compares settled charges against issued tickets on a short cycle, and a visible exception queue rather than a log file. Test it by deliberately replaying callbacks and by dropping them.

The second is in venue hardware. Handhelds, thermal printers and arena connectivity turn a web problem into a field operations problem. The failure is always the same shape: a seller in a concourse loses signal mid transaction and either the buyer is charged with no ticket printed or the seller retries and issues two. Devices need to hold a local queue, generate their own idempotent request identifiers, show the seller unambiguously what has reached the server, and refuse to print anything the server has not confirmed. Test that in the venue, with the venue's own network, on a busy night, before you rely on it for a jackpot.

What happens when prize claim and licence reporting are not covered?

Every project in this category is scoped around the sale and the draw, because that is the exciting part. The work that follows the draw is where operational discipline collapses and where the regulator actually looks.

The winner has to be contacted, identified and paid, sometimes with withholding and reporting obligations that depend on jurisdiction and prize size. Unclaimed prizes carry rules about how long you hold them and what happens to the money afterwards. Then the licence report is due and it must reconcile gross sales, expenses, prize payout and the charitable proceeds figure your conditions require, against a ledger that also has to explain every number you issued.

Built into the system, that report is generated from the same ledger that issued the tickets and takes minutes. Assembled by hand from a payment export and a spreadsheet, it takes a week, and the two sources disagree because the payment processor knows about refunds the spreadsheet does not. That disagreement is exactly what a monitor looks for.

The other uncovered gap is close time enforcement. Sales must stop at the second the licence specifies, and a transaction that was in flight when the clock struck has to be handled by a rule you decided in advance rather than by whoever is watching the screen. Decide with your compliance counsel whether an in flight authorisation completes or is voided and refunded, write it into the system, and log every decision it makes. A single sale that completed after close is enough to put a draw in question.

Should you build custom or configure what you already own?

Buy if you run one or two conventional draws a year in a single jurisdiction with a modest jackpot. Rafflebox is a real product with genuine experience in Canadian charitable draws and will handle a standard 50/50 or calendar raffle without you writing anything. Ascend Fundraising Solutions has serious experience with large in venue draws and the hardware and staffing that go with them. There is no prize for reinventing ticket numbering, and a charity that builds when it should have bought has converted a solved compliance problem into an unsolved one.

Build when draws have become a recurring revenue programme rather than an event, when you sell across jurisdictions whose eligibility, numbering and reporting rules differ, when your draw structures include stacked, early bird or subscription formats a packaged product does not expose, when per ticket platform fees have grown large against your charitable proceeds, or when supporter data from draws is strategically important and needs to sit in your own systems with clean attribution.

How do hidden costs get into the quote?

Jurisdiction count is the largest multiplier and the most commonly missing. Each additional province or state brings its own eligibility rules, numbering expectations, unclaimed prize handling and reporting format, and in some cases a requirement that the system be reviewed before use. A proposal that does not name the jurisdictions in scope is priced for one.

Certification is the second, and it is calendar time rather than engineering time. Where a regulator reviews a system before it may be used, that review happens after the software is finished and cannot be compressed by adding people. Charities that discover this in month four lose a draw season.

Load testing is the third and is routinely quoted as a line item rather than a phase. Testing to a realistic peak means building traffic generation, running against production grade infrastructure and fixing what it finds, and what it finds is usually in the payment path.

In venue hardware is the fourth, since handhelds, printers, spares, seller training and venue network testing are an operations programme, not a feature. Subscription draws are the fifth, because recurring billing, failed payment handling and entitlement questions arrive together. And the sixth is your own people: your compliance counsel deciding the inconclusive geolocation policy and the close time rule, which sits on the critical path and appears in no developer's number.

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

Sequence first. The builds that work ship one draw type, in one jurisdiction, online only, with the compliance core complete: issuance ledger, eligibility gate, draw evidence and reporting. In venue sales and subscriptions come afterwards, once the core has survived a real draw night. The ones that fail try to launch every channel into the first season and discover the ticket ledger problem with a jackpot on the line.

Second, treat the evidence pack as a deliverable with a name, not as a reporting screen. Ask any developer to describe its contents before you sign: pool size at close, the hash of the sealed pool, the timestamp, the random source used, the selection, the witnesses. If they cannot list it, they are building a checkout with a random number at the end.

Third, make the append only ledger a day one decision. Immutability cannot be retrofitted onto tables that have been doing updates, and a system that has restated its own history is precisely the thing a challenge attacks.

Fourth, rehearse. Run a full dress rehearsal with synthetic load at your expected peak, replay and drop payment callbacks deliberately, and run a test draw end to end including the evidence pack. Then do it again in the venue with the real network.

Finally, settle ownership in writing before kickoff: the repository, the cloud accounts and the right to hire another firm. At Digital Heroes the client owns the code from the first commit. The licence obligations sit with your charity, and if a regulator asks for draw evidence you cannot be waiting on a vendor to grant access to your own records.

Research & sources

The evidence behind this guide

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

  1. The average developer spends more than 17 hours a week dealing with maintenance issues such as debugging and refactoring, and about four of those hours on 'bad code' - waste that equates to nearly $85 billion annually worldwide in opportunity cost. Source: Stripe (2018) →
  2. An independent Forrester Total Economic Impact study of OutSystems found a 363% three-year ROI with payback in under 6 months, illustrating that faster, lower-labor build approaches can materially shift the payback math. Source: Forrester Consulting (commissioned by OutSystems) (2024) →
  3. In an RCT, the no-show rate was 23.5% for patients receiving a text-message reminder versus 38.1% for the control group - a 14.6 percentage-point reduction (p = 0.04). Source: Clinical Pediatrics / PubMed Central (Lin et al.) (2016) →
  4. Sensor Tower's State of Mobile 2026 reports that global users spent 5.3 trillion hours in iOS and Google Play apps in 2025 (+3.8% YoY), roughly 3.6 hours per day per mobile user. (Note: the page does not itself contrast app time vs. mobile-browser time, so the 'overwhelming majority of time in apps vs browsers' framing is not directly supported by this source.). Source: Sensor Tower (2026) →
Sienna A. · Director of Design · APAC · Sydney

As design director for APAC, Sienna oversees the visual and product design work that goes into web, mobile and commerce projects, and sets the standard other designers work to. Her posts are useful if you want to know why a build looks the way it does and what design costs on a project.

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

FAQ

Frequently asked questions

How do we know whether our ticket numbering would survive a regulator's review?
Ask for the full sequence from a completed draw, exported as a document, and read it as an auditor would. Every number should be present, every gap explained by a recorded abandoned reservation, and no number should appear twice. Then ask how the sequence behaves when two servers issue at the same millisecond and when a payment callback is delivered twice. If the answer involves a database auto increment and nothing else, the system has not been designed for draw night.
Should we import our previous draws into the new system?
Import them as a labelled read only archive, not into the issuance ledger. Historical records were never designed to be re verified, and mixing them with tickets your system actually issued dilutes the integrity guarantee you paid to build. Reporting can join across both stores. The ledger should only ever contain numbers your own system issued under its own rules.
What is the risk when a payment succeeds but the confirmation never arrives?
A buyer who has been charged and holds no ticket, which is a compliance problem rather than a support issue, or a duplicate ticket if a repeated callback issues a second one. Both are avoidable with idempotency keys on issuance and a reconciliation job comparing settled charges against issued tickets on a short cycle, with failures in a visible queue rather than a log. Test it by deliberately replaying and dropping callbacks before launch, because draw night will do both.
How should the system handle a sale that is in flight when sales close?
By a rule you decided in advance with your compliance counsel, applied consistently and logged. Either the in flight authorisation completes and the ticket is valid, or it is voided and refunded, and the system must never leave that decision to whoever is watching the screen. A single sale recorded after the close time is enough to put a whole draw in question, so this belongs in the specification rather than in operational judgement.
What breaks with handheld selling inside a venue?
Connectivity, and the failures are duplicated sales or charged buyers with no printed ticket. Devices need a local queue, request identifiers generated on the device so a retry cannot create a second ticket, a visible indication of what has reached the server, and a rule that nothing prints until the server confirms it. Test this in the actual venue on the actual network during a busy event, because a concourse at intermission behaves nothing like an office.
Why does certification add so much time to the schedule?
Because where a regulator reviews a system before it may be used, that review happens after the software is finished and runs on the regulator's calendar rather than yours. It cannot be shortened by adding engineers. Confirm your obligations with your regulator at the start of the project rather than at the end, and plan the draw calendar around the review window rather than assuming a launch date.
Can we run subscription draws on the same platform?
Yes, but treat it as its own phase. Recurring entry brings stored payment methods, failed payment handling, entitlement questions about what happens to a month a supporter did not pay for, and consent records that have to survive an audit. If you are migrating existing mandates from another platform, expect a proportion to need re authorisation rather than transfer. Charities that fold this into the first release usually delay the compliance core to accommodate it.
Which costs are most often missing from a raffle software quote?
Jurisdictions, certification time and load testing. A proposal that does not name the jurisdictions in scope is priced for one, and each extra one is a rule set rather than a locale setting. Regulator review is calendar time after the build, not engineering. Load testing to a realistic peak is a phase that includes fixing what it finds, usually in the payment path. Then add your compliance counsel's time deciding the inconclusive geolocation policy and the close time rule, which no developer can decide for you.
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.
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 many SaaS seats do we need before building custom becomes cheaper?
The crossover usually shows up between 20 and 50 seats on premium tiers. Salesforce Enterprise lists at $165 per user per month, so 40 users cost about $79,000 a year in subscriptions, which is real money against a custom system you would own outright. Run the comparison over three years: if subscription spend beats the build cost plus 15-20% annual maintenance, custom wins on price before you even count workflow fit.
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.
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.
What are the biggest mistakes first-time software buyers make?
Choosing the lowest bid, paying more than 30-40% upfront instead of on milestones, skipping a written specification, and having no maintenance plan for after launch. The most expensive of the four in Digital Heroes rescue projects is the missing spec: without written acceptance criteria, done becomes an argument instead of a checklist, and every disagreement resolves in the vendor's favor. Fix those four and you have avoided most of the ways these projects fail.
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.
We run everything on spreadsheets and Airtable. How do we know it's time for custom software?
The reliable signals are re-typing the same data into multiple tools, one employee acting as human middleware between systems, and errors appearing in handoffs between teams. Hard limits force the issue too: Airtable's Team plan caps at 50,000 records per base, and Business costs $45 per seat per month, so a 20-person team pays about $10,800 a year for a tool it has already outgrown. When workarounds consume more hours than the tools save, the spreadsheet era is over.
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?