Most founders arrive with a picture of the trading screen and a rough budget. The screen is the cheapest part. What decides whether the platform survives its first month of real volume is the layer underneath: where liquidity comes from, who holds the private keys, and what happens to a deposit that fails a risk check at 3 a.m.
This guide follows the sequence we use on exchange builds, with the numbers and the failure modes we actually hit. Timelines assume infrastructure work starts on day one, not after development finishes — that single assumption accounts for most schedule overruns we have seen.
A crypto exchange is software that brings together three functions: order intake and matching, asset custody or routing, and settlement with an auditable ledger. Everything else — charts, referral programs, mobile apps — sits on top of those three.
The distinction that matters commercially is who provides depth. On a platform with its own order book, you own the matching logic and carry the risk of an empty book. On a platform that routes orders to an external venue, you own the interface and the risk layer, and someone else provides the depth. That choice cascades into custody, licensing and cost, which is why it comes before feature planning rather than after it.
Four models cover almost every brief we receive. They differ less in features than in who holds funds and where depth comes from.
| Model | Who holds funds | Source of depth | Compliance load | Typical build |
| CEX with own order book (B-book) | You | Internal matching plus market makers | Highest | 3–5 months |
| Broker layer over an external venue (A-book) | Liquidity provider | Provider's order book | Moderate | 2–3 months |
| P2P with escrow | Escrow contract or platform | User advertisements | Moderate | 2–3 months |
| Instant swap | You, briefly | Aggregated provider rates | Lower | 1–2 months |
A DEX changes the question entirely, since smart contracts replace both custody and matching; the tradeoffs between centralized and decentralized models deserve their own comparison. If your target market has weak banking access, a P2P exchange with escrow often outperforms a spot venue, because it works when local rails do not.
The market decides the licensing route, the fiat rails and the pairs you need on day one. A platform aimed at US retail traders and a platform aimed at Latin American remittance users share almost no infrastructure below the trading screen.
Revenue comes from four places: trading fees, the spread on conversion, withdrawal fees and listing fees. Spread revenue behaves differently from trading fees — it needs a real price source, so a converter running on internally invented rates cannot monetize it honestly. We rebuilt one converter to route through a live venue as market orders specifically for this reason.
Keep the technical build separate from the commercial launch. Standing up the platform is an engineering project with a defined end; growing volume is not. If the commercial side is what you are scoping now, how to start a crypto exchange business covers the operating model, staffing and go-to-market, while this guide stays on the platform itself.
In the US, the baseline is FinCEN registration as a money services business plus money transmitter licences in each state you serve, with New York running its own regime. The EU offers a single passported framework instead. Licensing timelines routinely exceed development timelines, so this step runs in parallel with everything else.
What licensing changes technically is the transaction pipeline. On one build we wired risk screening to every inbound deposit before the balance was credited, with three configurable thresholds: below the first, deposits auto-approve; above the second, all active screening providers are called in parallel; above the third, the transaction goes to a human reviewer.
One provider in that set answered in roughly 500 ms, another took up to an hour — so the orchestrator times out and falls back to whatever has returned. We also normalized every provider's taxonomy down to about 70 internal risk categories, which is what makes a provider swap a configuration change instead of a rewrite. Handling identity verification data is a separate design problem from screening transactions.
The honest framing is not "custom is better." It is how much of the core you need to own.
| White label | Hybrid (our base + custom modules) | Custom from scratch | |
| Time to live | From 2 weeks | 1.5–3.5 months | 4–7 months |
| Web platform cost | Configuration only | $36,000–$93,000 | $230,000–$564,000 |
| You control | Branding, keys, domain | Business logic and new modules | Everything, including the engine |
| Main risk | Ceiling on customization | Base constrains some choices | Schedule and engine correctness |
Across our estimates the same scope costs 25–35% less on an existing base than from scratch — $36,000 against $48,000 at entry level, $64,000 against $81,000 at the top of the mid tier. That gap is the value of code already tested in production, not a discount.
The fastest deployment we have run went from contract to live in under two weeks: deploy the base, connect the domain and SSL, swap API credentials for payment, SMS and market data, apply branding, smoke test the critical flows. Compare that path against building or buying a matching engine before committing, and look at a white label centralized exchange if speed outranks differentiation.
Order intake, matching, ledger and wallet management belong in separate services with explicit boundaries. On one production migration we moved from a single virtual machine to Kubernetes with 17 containerized microservices, Helm charts, secrets in HashiCorp Vault wired into the CI pipeline, and a Redpanda message bus between services.
The detail that costs teams weeks: not every service can autoscale. Order book and wallet services carry state, so a horizontal pod autoscaler applied uniformly breaks them. Define the stateless-versus-stateful policy before you write the charts. Two more findings from the same platform — order history queries were doing full table scans and dominated peak load until we added composite indexes, and candle generation ran on unbounded cron jobs that hit out-of-memory and left gaps in chart data, which we fixed by moving to worker-based processing with container limits near 700 MB.
Read more on how trading platforms are structured at scale and on the way a matching engine processes orders.
An MVP that can take real money needs less than most feature lists suggest: registration with identity verification, deposits and withdrawals per supported network, an order book with limit, market and stop-limit orders, balances split between funding and trading, and an admin panel with role separation.
What we add early because retrofitting is expensive: partial fills, a fee configuration with tiered ranges, and an audit log that records the old and new value of every administrative change. Two accounts — funding and trading — beat five; fewer internal transfers means fewer reconciliation failures.
Margin, futures, options, staking and P2P are separate modules with their own liquidation and accounting logic. Turn them on when the spot book has volume, not before. One platform we worked on accumulated modules A through G over six to twelve months of client feedback, including VIP tiers, per-user fee structures and fiat overnight staking — none of it in the original scope. The full CEX feature set is worth reviewing before you freeze the MVP boundary.
An empty order book is not a marketing problem. If a pair has no external price source and no resting orders, a market order cannot be priced at all — the system will reject it.
The approach that solved this on one spot market was order book mirroring. When a user sells, the backend borrows the equivalent amount on an external venue using 3x margin, executes there, credits the user's USDT balance, and settles the borrow afterwards.
The book looks deep from day one because it is backed by the venue's depth. The cost is operational: you monitor margin utilization, borrow limits and collateral continuously, and we ran Telegram and Slack alerts on every threshold. We also added a switch that disables the external provider and falls back to internal matching, so a provider outage degrades the platform instead of stopping it.
On the fiat side, connect at least two providers and treat settlement windows as distinct states — instant and standard SEPA do not clear alike, and mixing pending fiat with confirmed crypto in one balance model creates reconciliation problems that are painful to fix later. Choosing a liquidity provider and finding banks that keep crypto accounts open are both slower than the integration work itself.
Custody design determines your blast radius. Rather than one hot wallet, we build several, each labelled by geography, entity type and risk profile, and bind the user to a wallet at account level. The deposit address locks to that contour after first use, old addresses are archived instead of deleted for recovery, and users can be reassigned between contours in bulk without stopping the platform.
On top of that sits forced address regeneration: when a deposit address is flagged, the system issues a new address across every supported network and retires the old one, and later deposits to it are rejected or quarantined.
Flagged funds go one of two ways — a quarantine account where the user can submit documents and a return wallet, or a silent transfer to cold storage that leaves the user-facing transaction status unchanged. We also run a duplicate ledger in a separate service and compare the two continuously; on divergence the system halts operations and alerts rather than continuing on numbers it cannot trust.
MPC custody and multisig are both viable for key management, with different operational tradeoffs; pick based on who must approve a withdrawal. Our full notes on crypto exchange security go deeper on threat modelling.
Load testing on an environment where the database, cache and application share a server measures resource contention, not your product. Separate them first, then define target, stress and crash profiles before you run anything.
These are the criteria we set on one pre-production environment, API only, no UI in the loop:
| Metric | Target | Stress (≈2×) | Crash (≈3–4×) |
| Concurrent users | 50–100 | 150–200 | 250–300 |
| Orders/sec (create + cancel) | 20–50 | 80–150 | 200–300 |
| Total API RPS | 250–600 | 800–1,200 | 1,800–2,500 |
| Create order latency, P95 | ≤ 200 ms | ≤ 500 ms | — |
| Order book latency, P95 | ≤ 100 ms | ≤ 300 ms | — |
| 5xx error rate | ≤ 1% | growth accepted | — |
Zero data loss is a pass condition at target load. One more correction we had to make: disable modules the production launch will not include, because the frontend calls their endpoints regardless and generated up to half the measured load on features nobody would use.
We do not treat an exchange as launch-ready until deposits and withdrawals have run on mainnet with real assets. Testnet fee estimation, confirmation timing and network-enforced minimums all behave differently, and those differences surface on the first real withdrawal rather than in QA.
Operationally, two alerts pay for themselves immediately. The first fires when a hot wallet balance drops below the threshold needed to cover network fees — we traced a batch of stuck deposits to exactly this, where a fixed fee exceeded the available balance and the transfer silently waited.
The second compares the two ledgers. We deliberately rejected manual override endpoints for retrying transactions: the system already polls every few seconds, and a manual button mainly creates duplicate-transaction risk. Improve the automation instead of giving support staff a lever.
Plan node synchronization from week one. A Bitcoin full node takes five to ten days on dedicated hardware; Tron and BNB Smart Chain sync in one to three. Started late, node sync becomes the item blocking go-live after all the code is finished.
Figures below are web platform estimates from our own project scoping. Mobile applications are priced separately.
| Platform type | Cost | Development time |
| Instant exchange / converter | $21,000–$28,000 | 1–2 months |
| Spot exchange (basic → advanced) | $36,000–$64,000 on our base; $48,000–$81,000 from scratch | 1.5–3.5 months |
| P2P platform | $32,000–$53,000 | 2–3 months |
| Futures platform | $34,000–$74,000 | 2–3 months |
| Spot + P2P combined | up to $93,000 / $120,000 | 3–4 months |
| Full custom build (Node.js, C++/Java) | $230,000–$280,000 | 4–5 months |
| Enterprise scope | $403,000–$564,000 | 4–7 months |
Integrations are minor by comparison: a KYC/AML service costs about $1,600, external liquidity around $4,000, a bank API $2,500, and a blockchain node $800–$1,600 depending on the network. For a component-level breakdown, see crypto exchange development cost. Add one month of discovery to every timeline above.
Frontend behaviour is backend load. On one platform the UI polled a best-price endpoint every 10 to 30 seconds, and each call hit the database directly. The service degraded without any external traffic at all. Selective caching fixed it — cache what changes slowly, such as asset lists and candles, never personal balances or open orders.
One trade is at least four accounting events. Transfer from A to B, transfer from B to A, fee on each side. Recording a trade as a single transaction is how exchanges lose fee revenue without noticing. We keep this at a trading-layer accounting level, separate from user-facing transaction history.
Incremental IDs are an invitation. Sequential user and order identifiers make enumeration trivial. Long UIDs, as the major venues use, are also what makes internal transfers by user ID possible later.
Infrastructure access is the most common schedule risk. Development finishes, staging passes, and then production credentials are not provisioned. We have seen that add two to three weeks to otherwise complete projects, which is why infrastructure readiness now appears in contracts as a dated client deliverable.
Pre-production must be a copy, not a resemblance. A staging environment that differs from production in service topology or external dependencies will pass tests that production fails. We now stabilize the cluster first, then clone the infrastructure including third-party agents, and only then run dev to preprod to QA to production with deployment triggered by tag. There is no value in scaling environments that are not yet stable.
Challenge. A spot market launching with no existing volume. With no resting orders and no external price source for its pairs, the platform could not price market orders at all. The obvious alternative — holding all customer funds on an external venue to guarantee execution — moved the entire custody risk onto a third party, which the client would not accept.
Solution. We built an order routing layer over an external venue with two operating modes. In no-borrow mode, deposits move from the hot wallet to the venue and orders execute there directly. In borrow mode, funds stay under our control: the platform uses its own liquidity with 3x margin, executes the user's side immediately, and clears the borrow against the venue afterwards.
Trading precision comes from the venue's API with an admin override, and we separated display precision from execution precision so rounding in the interface can never affect a fill. A configuration switch disables the external provider entirely and routes orders back to internal matching. Margin utilization, borrow limits and collateral positions each report to Telegram and Slack alerts.
Result. The order book showed real depth from launch day without the platform surrendering custody. A provider outage degrades the venue to internal matching rather than halting trading. The tradeoff we accepted openly: if margin, borrow limits or collateral fail, user trades fail — so monitoring is not optional in this design.
The same routing layer later absorbed the conversion feature, which had been running on internally set rates: converting became a market order through the trading engine, which gave users real market pricing and gave the platform a spread it could account for. A related build is documented in our case study on a centralized exchange with its own token.
| Layer | What we use | Why |
| Backend | Node.js, Go; C++ or Java for engine work | Concurrency for order intake; low-level control where latency matters |
| Frontend | React / Next.js, TradingView charting | Server rendering and a charting standard traders already know |
| Data | PostgreSQL with read replica, Redis | Transactional integrity; replica absorbs history queries |
| Messaging | Redpanda / Kafka | Event streaming between services, ordered and replayable |
| Orchestration | Kubernetes, Helm, HashiCorp Vault, GitLab CI | Per-service scaling policy and secrets outside the repository |
| Blockchain | Self-hosted BTC, ETH, LTC, TRON, BNB nodes; external RPC providers | Own nodes where regulation requires it, RPC where it does not |
| Compliance | KYC and KYT providers behind a normalization layer | Provider swap becomes configuration, not a rewrite |
Creating a crypto exchange is a sequence of irreversible decisions taken early — custody model, liquidity source, licensing jurisdiction — followed by execution work that is well understood. Get the first three right and the rest is scheduling. Get them wrong and no amount of engineering later will fix the economics.
One to two months for an instant exchange, 1.5 to 3.5 months for a spot platform on an existing base, and four to seven months for a full custom or enterprise build. Add one month of discovery to each, and start blockchain node synchronization in week one — a Bitcoin full node alone takes five to ten days.
Only if you want to own liquidity and monetize the spread. Routing orders to an external venue removes the need for an internal engine and cuts time to market, at the cost of depending on that venue's uptime and API limits. Most platforms launching without existing volume start with routing and add an internal engine later.
Registration as a money services business with FinCEN, money transmitter licences in each state where you operate, and an AML programme with suspicious activity reporting. New York applies its own BitLicense regime. Licensing runs on a longer clock than development, so start it in parallel rather than after launch.
By sourcing depth externally — either routing orders to a liquidity provider, or mirroring an external order book while keeping custody in house. Both give users a populated book from day one. A market maker agreement is the third route, and the three are frequently combined.
It is a real option when speed matters more than differentiation. We have taken a branded platform from contract to live in under two weeks by deploying an existing base, swapping credentials and applying design. The ceiling is customization: business logic that the base was not designed for still requires development.