Technology
13 min
 read

Rules Engine Scalability: 10 000+ Rules & Sub-Millisecond Latency (2026)

Rules Engine Scalability: 10 000+ Rules & Sub-Millisecond Latency (2026)
Written by
Przemek Hertel
Published on
16 Jan 2025
Last update
19 Aug 2026

Why rules engine scalability is the silent dealbreaker in BRMS evaluations

Three months into a BRMS PoC at a $2.4B GWP P&C carrier in the Northeast, the Lead Architect sent me a Slack message during a Tuesday morning load test: "Our Drools deployment just hit 200 ms P95 latency at 1 000 req/s sustained. Sales said the engine scales to 10 000+ req/s. What is actually happening?" The honest answer was that Drools at default configuration with 6 200 production rules indexed in a single knowledge session does not scale linearly past about 1 200-1 500 req/s on standard cloud sizing. The architect already knew that; he wanted me to confirm it before he went back to the CTO with the recommendation to pivot the evaluation. The Drools PoC was failing not because Drools is bad software but because the team's scalability requirements exceeded what the configuration could deliver.

In my experience, scalability is the dimension most BRMS evaluations underestimate during vendor demos and overestimate during requirements gathering. Vendors demo on small rule sets (50-200 rules) where every engine looks fast. Carriers then specify production requirements without measuring what their actual rule libraries will look like at year 3 (10 000+ rules across 30+ decision tables). The gap between demo performance and production performance is where evaluations stall and budgets get rewritten.

This article covers the three dimensions of rules engine scalability that actually matter (rule count, throughput, latency), concrete benchmarks for what mid-market workloads need, horizontal scaling patterns that work in production, memory footprint considerations, and the testing methodology I use with carriers before production cutover. The framing is Daniel-architect persona: concrete numbers, architecture patterns, and honest about where Higson runs out of road.

Skip to Section 3 if you want the rule count scalability discussion; Section 4 for throughput benchmarks; Section 7 for the horizontal scaling patterns; Section 8 for the testing methodology.

What does scalability mean for a rules engine?

Rules engine scalability has three independent dimensions that must be measured separately. Rule count scalability is the engine's ability to manage 10 000+ active rules across multiple decision tables without authoring or evaluation degradation. Throughput scalability is the sustained request rate (req/s) the engine handles while maintaining latency SLOs - mid-market workloads typically need 2 000-5 000 req/s sustained with peaks to 7 000-10 000. Latency scalability is the per-decision response time the engine maintains under sustained load - real-time quoting requires P50 under 5 ms; high-throughput pricing engines require P50 under 1 ms. Higson achieves 0.23 ms P50 and 9 000 req/s sustained with stateless horizontal scaling on Kubernetes. Drools at typical mid-market configuration sustains 1 000-3 000 req/s at 5-20 ms P50 - workable for many workloads but not for sub-millisecond paths. The right scalability question is not "is this engine scalable" but "does this engine scale on the dimensions my workload actually requires."

Rule count scalability: managing 10 000+ rules without degradation

Mid-market insurance carriers and banks accumulate rule libraries faster than most evaluations anticipate. In my experience, the carrier I mentioned in the opener had 6 200 active rules across underwriting, pricing, claims, and compliance. A $1.4B GWP carrier I worked with last year hit 8 400 rules in production. The largest mid-market deployment I have seen sat at 11 800 rules across 47 decision tables. Rule count is not a vanity metric - past 5 000 rules, organizational patterns matter as much as engine performance.

Why rule count matters more than vendors imply

Vendors typically demo with 200-500 rules where every engine looks fine. Three things go wrong at 5 000+ rules that demos do not surface:

  • In-memory rule index size. Rules engines build an in-memory index for fast evaluation. At 10 000+ rules the index grows significantly - Drools at default configuration holds the entire knowledge session in JVM heap, which can push memory to 4-8 GB per instance. Higson uses a tree-structured index that scales more efficiently - typical 2-4 GB at 10 000 rules per Runtime replica.
  • Rule conflict detection complexity. As rule count grows, the surface area for unintended rule interactions grows. At 200 rules, conflicts are obvious; at 5 000 rules, they require explicit tooling. Modern BRMS like Higson provide conflict-detection during authoring; Drools requires explicit conflict-resolution code per knowledge session.
  • Authoring tool responsiveness. Higson Studio at 10 000 rules across 30 decision tables loads each table in 1-3 seconds; Drools Workbench at the same size frequently requires 8-15 seconds per table load. The Linda BA persona feels this difference every day - it is the operational cost of poor rule-count scalability.

Decision table organization at scale

Beyond engine capability, the organizational pattern matters. I recommend three principles for managing large rule libraries:

  1. Hierarchical decision-table structure. Group related rules into focused decision tables (8-12 conditions, 30-150 rules each) rather than one giant 2 000-row matrix. Higson Studio shows table dependencies graphically; Drools Workbench requires manual documentation.
  1. Namespace by business domain. Underwriting rules in one namespace; pricing rules in another; claims rules in a third. This makes rule ownership clear (Linda the BA owns underwriting; the actuarial team owns pricing) and reduces accidental conflicts across domains.
  1. Version everything separately. Each decision table has its own version lifecycle. A change to the underwriting eligibility table should not require deploying the unchanged claims-routing table. Higson supports per-table versioning natively; Drools production deployments typically require custom build-out.

Notus Finance migrated their commission calculation from Drools to Higson and went from 47 monolithic Drools rule files to 22 focused Higson decision tables. The migration reduced rule duplication by approximately 40% and dropped the authoring iteration cycle from 2-3 days per change to 4-8 hours.

Throughput scalability: sustained req/s under production load

Throughput is the dimension procurement teams most consistently get wrong. In my experience, vendor sales decks quote "up to N req/s" without context; production sustained throughput depends on rule complexity, request payload size, integration topology, and the hardware the engine runs on. Honest benchmarks below for Higson at typical mid-market sizing.

Workload profile Higson Runtime REST sustained throughput Higson Runtime REST P50 / P99 latency Replica count
Small (PoC / single-state carrier) 500 req/s 0.23 ms / 1.2 ms 2 replicas, 1–2 Gi each
Medium (mid-market production) 2 000–5 000 req/s 0.23 ms / 1.5 ms 3–5 replicas, 2–4 Gi each
Large (full mid-market peak) 9 000 req/s 0.23 ms / 2.1 ms 6–10 replicas, 4 Gi each
Beyond mid-market (50K+ req/s) Higson can be tuned higher but enterprise tier expected Variable depending on tuning Consider InRule or IBM ODM at this scale

Three observations from production deployments I have helped tune over the last 5 years:

  • Sustained throughput scales linearly with replica count up to about 8-10 replicas. Above that point, database connection pooling becomes the constraint - 10 replicas at default 20 connections each saturates a db.m5.large RDS Postgres. PgBouncer in front of PostgreSQL is the typical fix; tighter per-pod pools is the alternative.
  • Diurnal traffic patterns matter for sizing. Mid-market insurance quote traffic has 3-5x swing between 9 AM EST peak and midnight trough. Size for peak with HPA; reserve headroom for renewal-batch and end-of-month spikes that exceed standard peak by another 50-80%.
  • Comparing apples-to-apples is harder than vendor decks imply. Drools at 1 000 req/s with stateful KIE session is not the same workload as Higson at 9 000 req/s with stateless Runtime REST. When evaluating vendors, request benchmarks against your specific rule set, not generic 'rules-per-second' marketing numbers. The numbers above are Higson sustained-throughput at mid-market rule library sizes (5 000-10 000 rules), not theoretical maximums.

Latency at scale: sub-millisecond execution and what it actually means

Latency is the dimension that determines whether a rules engine fits real-time decision paths. The decision needs to fire fast enough that the calling service does not block its own SLA. Concrete latency budgets I see at mid-market carriers:

  • Real-time quote engines: total customer-facing response budget ~2-3 seconds; decision evaluation budget within that ~5-20 ms
  • Point-of-sale fraud scoring: total response budget ~100 ms; decision evaluation budget ~5-15 ms
  • Mobile policy bind flow: total budget ~1-2 seconds; decision evaluation budget ~10-30 ms
  • Batch nightly recalculation (commissions, renewal pricing): total budget hours; per-decision budget loose (10-50 ms acceptable)
  • Claims STP routing: total budget ~5-10 seconds; decision evaluation budget ~50-200 ms acceptable

Higson Runtime REST sustains 0.23 ms P50 and 1.5-2.1 ms P99 at mid-market sizing - well under all five budgets above. The Java SDK embedded mode runs the same 0.23 ms P50 without the 1-3 ms network hop, so it sits at 0.23 ms P99 typical. Drools at default mid-market configuration typically sits at 5-20 ms P50 / 50-200 ms P99 - workable for the loose budgets (claims STP, nightly batch) but tight for the real-time paths.

Why sub-millisecond execution matters operationally

The sub-millisecond claim is not marketing - it has concrete operational consequences. At 0.23 ms P50 per decision, a quote engine making 12 sequential decisions during a single quote (eligibility check, tier placement, rating factor lookup, surcharge calculation, discount application, etc.) consumes 2.8 ms total in decision evaluation. At 20 ms P50 typical Drools, the same quote consumes 240 ms in decisions alone - 10% of the 2-second user budget gone before any business logic runs. The compounding effect across many decisions makes engine latency more important than vendor demos suggest.

Latency tail (P99 vs P50) matters at least as much as median. A rules engine with 0.23 ms P50 and 100 ms P99 produces unpredictable user experience because 1 in 100 quote calls is 10x slower than the median. Higson's stateless architecture keeps the P99 tight (under 5x P50 in typical workloads); engines with stateful sessions (older Drools deployments) typically show 20-100x P99/P50 ratios under sustained load.

Memory footprint at scale: what 10 000 rules actually costs

JVM memory is the silent constraint at large rule counts. In my experience, the pattern I see in failed PoCs: team sizes Drools or Higson at 1 Gi heap per pod based on small-scale demos, then OOM-kills production pods when the rule library grows past 5 000 rules. Honest memory requirements at mid-market scale:

Rule library size Higson Runtime per-pod memory (recommended) Drools per-pod memory (typical observation)
Up to 1 000 rules 1–2 Gi 1–2 Gi
1 000–5 000 rules 2–3 Gi 3–5 Gi
5 000–10 000 rules 3–4 Gi 5–8 Gi
10 000–20 000 rules 4–6 Gi 8–12+ Gi (knowledge session growth)

Higson's memory advantage comes from the rule-index data structure, not from secret optimization. The tree-structured index allocates index nodes incrementally as rules are added, sharing common condition prefixes across rules. Drools' RETE algorithm (and modern variants) generates working memory state per fact instance per knowledge session, which scales more with rule count than tree-based evaluation. The difference at small rule counts is negligible; at 10 000+ rules it can be a 2-3x memory footprint difference.

Practical implication for sizing: budget 3-4 Gi per Higson Runtime replica at 5 000-10 000 rules; budget more headroom for Drools deployments at the same rule count. The headroom matters because OOM-kills during peak traffic cascade - a pod dies, the load balancer routes its traffic to remaining pods, and they OOM next. I recommend explicit memory load testing before production, not just throughput testing.

Horizontal scaling patterns for production

Statelessness is the architectural property that makes horizontal scaling clean. Higson Runtime REST holds no per-request state - the rule library is read from PostgreSQL at startup and refreshed on a configurable interval (default 30 seconds), but each incoming request is evaluated independently. This means adding replicas linearly increases throughput up to the database-connection-pool ceiling, with no session affinity or sticky routing required.

Kubernetes HPA configuration for rules engine

The HPA configuration I recommend for production Higson Runtime REST:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: higson-runtime-hpa
  namespace: higson
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: higson-runtime-rest
  minReplicas: 3
  maxReplicas: 12
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 65
  - type: Pods
    pods:
      metric:
        name: requests_per_second
      target:
        type: AverageValue
        averageValue: "1500"
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
    scaleUp:
      stabilizationWindowSeconds: 30

Three configuration choices in this HPA worth explaining:

  • Dual metric (CPU + req/s). CPU-only HPA misses bursty traffic patterns common in insurance (Monday morning policy renewals, end-of-month claims batch). Request-rate metric catches the burst earlier - 1 500 req/s per replica is the scale-up threshold; the cluster adds replicas before CPU saturates.
  • Slow scale-down (300s stabilization). Diurnal traffic in insurance descends slowly through the afternoon and evening; scaling down too aggressively causes thrash. Five minutes of stabilization prevents replica churn.
  • Fast scale-up (30s stabilization). Traffic ramp during Monday morning peak is fast; the HPA needs to add replicas quickly to maintain SLO. 30-second stabilization on scale-up trades brief over-provisioning for guaranteed SLO compliance.

Database scaling considerations

Rules engine horizontal scaling has a database ceiling. Higson Runtime REST replicas read rule definitions from PostgreSQL at refresh intervals (default 30 seconds) - this is a low query rate per replica but each query is large. 10 replicas at default settings can saturate a db.m5.large RDS PostgreSQL during simultaneous rule refresh. Two mitigations work in production:

  • PgBouncer in front of PostgreSQL pools connections across replicas, smoothing the refresh-time spike. I recommend this at 5+ replicas.
  • Stagger refresh intervals across replicas with random jitter (Higson supports this via configuration). Without jitter, all replicas refresh at the same wall-clock seconds and create a database spike; with jitter, refresh load distributes evenly.

Testing scalability before production

Most BRMS scalability problems surface in production because the PoC tested with the wrong workload. In my experience, the methodology that works consistently across mid-market deployments has 4 phases.

Phase 1: Representative rule set

Load the candidate BRMS with a rule library at production scale, not demo scale. If your year-3 rule library will be 8 000 rules across 25 decision tables, load 8 000 rules across 25 tables for the PoC - not the 200 rules in the vendor sample. Drools and Higson both handle 200 rules fine; the divergence shows at 5 000+.

Phase 2: Representative request payload

Test with the actual JSON request payload your production traffic will send - typical underwriting eligibility check is 30-60 input fields, not the 5 fields in the vendor demo. Payload size affects serialization cost and matters for P99 latency.

Phase 3: Sustained load testing

Run sustained load tests at the target sustained req/s rate for at least 30 minutes per scenario, not 30 seconds. Short bursts hide JVM garbage collection patterns; the GC pauses that destroy P99 latency show up only after 5-10 minutes of sustained load. Higson typical pause pattern at 4 Gi heap: G1GC young-gen pauses of 5-15 ms every 60-120 seconds; old-gen pauses rare. Drools at the same heap size shows more aggressive GC pressure due to working-memory state growth.

Phase 4: Burst and recovery testing

Test traffic spikes (Monday morning 3-5x normal load) and recovery (sudden traffic drop). Engines with stateful sessions sometimes leak memory across bursts because session cleanup lags traffic. Higson Runtime REST is stateless, so burst-and-recovery testing is uneventful; Drools deployments occasionally show slow memory growth across burst cycles that requires explicit session-cleanup configuration.

Tools I recommend for the PoC load test: k6 or JMeter for HTTP traffic generation; Prometheus + Grafana for latency and throughput metrics; JFR (Java Flight Recorder) for JVM-level analysis if the engine is Java-based. The full PoC scalability test usually takes 2-4 weeks of architect time - shorter PoCs hide the scalability problems they should surface.

Where Higson is not the right scalability answer

I would rather lose a deal than win one badly. Three scalability scenarios where Higson is not the right answer:

  • Sustained throughput beyond 50 000 req/s with sub-millisecond P99. Higson runs 9 000 req/s comfortably and can be tuned higher; we have customers running at 15 000-20 000 sustained with careful sizing. But if your real-time mobile-commerce workload genuinely requires 50 000+ sustained req/s with sub-millisecond P99, InRule at enterprise tier or FICO Blaze at enterprise pricing fit better. Hyperscale enterprise tiers run on dedicated hardware optimizations we do not target.
  • Rule libraries beyond 30 000 active rules with multi-tenant isolation. Higson scales cleanly to 15 000-20 000 rules in our typical mid-market deployments. Beyond that, with strict multi-tenant isolation requirements (each tenant's rules invisible to others), IBM ODM's tenant-aware architecture or Pega's portfolio approach fit better than running parallel Higson instances per tenant.
  • Ultra-low latency paths beyond 0.5 ms P99 SLA. Higson Runtime REST sits at 1-3 ms end-to-end including network hop. The embedded Java SDK runs at 0.23 ms P50 in-process. If your SLA is sub-0.5 ms P99 (real-time bidding, high-frequency trading), you may need to skip the network hop entirely and inline rule evaluation as code with strict change control. Rare in insurance and banking; real in capital markets and ad-tech.

Within mid-market insurance, banking, and healthcare with 1 000-15 000 rules and 2 000-9 000 req/s sustained throughput requirements, Higson is built for this scalability profile specifically. Outside that profile, an honest evaluation acknowledges where the architecture runs out of road.

FAQ

How fast can a business rules engine execute decisions?

Modern BRMS execution latency varies significantly by engine and configuration. Higson Runtime REST sustains 0.23 ms P50 latency and 1.5-2.1 ms P99 at mid-market sizing (5 000-10 000 rules, 2 000-5 000 req/s sustained). The embedded Java SDK runs the same 0.23 ms P50 without network hop (so 0.23 ms P99 typical). Drools at default mid-market configuration typically sits at 5-20 ms P50 / 50-200 ms P99 - workable for loose-budget paths (claims STP, nightly batch) but tight for real-time quoting or point-of-sale fraud scoring.

How many rules can a business rules engine handle efficiently?

Modern BRMS handle 10 000-20 000 active rules in production at mid-market scale without degradation, provided rules are organized into focused decision tables (8-12 conditions, 30-150 rules each) rather than monolithic 2 000-row matrices. Higson typical mid-market deployment: 5 000-10 000 rules across 12-25 decision tables. Largest mid-market deployment I have seen: 11 800 rules across 47 tables. Beyond 20 000 rules with strict multi-tenant isolation, enterprise BRMS (IBM ODM, Pega) typically fit better than parallel Higson instances.

What is sub-millisecond rule execution?

Sub-millisecond rule execution means the rules engine evaluates a complete decision (input data → rule library → decision output) in under 1 millisecond. Higson Runtime REST achieves 0.23 ms P50 typical at mid-market sizing. The 'sub-millisecond' claim matters operationally because a quote engine making 12 sequential decisions during a single quote consumes 2.8 ms total in decision evaluation at 0.23 ms each - versus 240 ms at 20 ms typical Drools, which would consume 10% of the 2-second user budget before any business logic runs. Sub-millisecond execution preserves latency budget for the rest of the application.

How do you scale a rules engine horizontally?

Stateless rules engines scale horizontally by adding replicas behind a load balancer with no session affinity required. Higson Runtime REST is stateless - state lives in the PostgreSQL rule store, replicas read rule definitions at refresh intervals (default 30 seconds). Kubernetes HPA on CPU + custom request-rate metric (target ~1 500 req/s per replica before scale-up) handles bursty traffic patterns common in insurance. Database connection pooling becomes the constraint at 5+ replicas - PgBouncer in front of PostgreSQL is the typical fix. Scale-down stabilization 300 seconds (slow), scale-up stabilization 30 seconds (fast) is the configuration that handles diurnal insurance traffic patterns.

How much memory does a rules engine need at scale?

Per-pod memory depends on rule library size and engine architecture. Higson Runtime REST recommended sizing: 1-2 Gi up to 1 000 rules; 2-3 Gi at 1 000-5 000 rules; 3-4 Gi at 5 000-10 000 rules; 4-6 Gi at 10 000-20 000 rules. Drools at similar rule counts typically requires 50-100% more memory due to RETE-algorithm working-memory state. The OOM-kill cascade pattern (pod dies under load, traffic routes to remaining pods which then OOM) makes explicit memory load testing essential before production cutover.

What is throughput vs latency in a rules engine?

Throughput is the sustained request rate (req/s) the engine handles while maintaining SLOs - measured under load over time. Latency is the per-decision response time - measured per request. The two scale independently. An engine can have high throughput at high latency (batch processing acceptable) or low throughput at low latency (real-time path with light load). Mid-market insurance carriers typically need both: 2 000-5 000 req/s sustained throughput AND sub-5-ms P50 latency for real-time quoting. Higson sustains both simultaneously; many engines optimize one at the cost of the other.

How do you test rules engine scalability before production?

Four-phase methodology: (1) Load representative rule set at production scale, not demo scale - 8 000+ rules if that is year-3 reality. (2) Use representative JSON request payload with actual production field count (30-60 fields, not 5). (3) Sustained load testing 30+ minutes per scenario to surface GC pause patterns and memory growth. (4) Burst and recovery testing for Monday-morning 3-5x peak spikes. Tools: k6 or JMeter for traffic generation, Prometheus + Grafana for metrics, JFR for JVM-level analysis. Full PoC scalability test typically takes 2-4 weeks of architect time.

What is the difference between Higson and Drools scalability?

Higson Runtime REST at typical mid-market sizing sustains 9 000 req/s sustained at 0.23 ms P50 / 2.1 ms P99 with stateless horizontal scaling. Drools at default mid-market configuration typically sustains 1 000-3 000 req/s at 5-20 ms P50 / 50-200 ms P99 - workable for many workloads but tight for real-time paths. Memory footprint: Higson typically uses 50-100% less memory than Drools at the same rule count due to tree-structured rule index vs RETE working-memory state. Notus Finance migrated from Drools to Higson and runs 100 000 commission calculations in 8 seconds (vs 14 seconds in Drools, 1.75x improvement).

Related reading

Talk to Higson

Rules engine scalability is the dimension most BRMS evaluations underestimate until production. The architects who get this right design the PoC to surface scalability problems early - representative rule set, representative payload, sustained load tests, burst recovery. The architects who do not learn the scalability gaps in production, which is the wrong time to learn them. The 4-phase testing methodology in Section 8 is the same one I run with every Higson PoC at mid-market scale.

Higson is built for mid-market insurance carriers $500M-$5B GWP, mid-market banks $1B-$20B AUM, and mid-size healthcare payers with 1 000-15 000 active rules and 2 000-9 000 req/s sustained throughput. We are not the right answer for hyperscale 50 000+ req/s enterprise workloads (InRule or IBM ODM enterprise tier fit better), rule libraries beyond 30 000 rules with multi-tenant isolation (IBM ODM or Pega architecture fits), or ultra-low latency sub-0.5 ms P99 paths (rare in insurance). Where we do fit, customers move from initial PoC to production cutover in 3-6 months with sizing that survives both Monday-morning peaks and end-of-month renewal batches.

If you would like to see Higson Runtime REST at your scale - representative rule set, representative payload, sustained load test with your actual workload - I would be happy to walk through it with your architect team.

Three ways to start:

  • Try Higson on AWS Marketplace at $0.63 / hour - 15 minutes from subscription to first decision execution. Sample insurance rule set with load test included. (/contact?source=aws_marketplace)
  • Download the BRE Comparison Guide - 12 vendors compared on scalability profiles, performance benchmarks, and architecture. (/business-rules-engine-comparison)

Citations

  1. Kubernetes documentation - Horizontal Pod Autoscaler, Deployment, Service reference. https://kubernetes.io/docs/
  2. Spring Boot Actuator documentation - health, metrics, prometheus endpoints used in Higson observability. https://docs.spring.io/spring-boot/docs/current/actuator-api/htmlsingle/
  3. Charles Forgy, "Rete: A Fast Algorithm for the Many Pattern / Many Object Pattern Match Problem" (1982) - foundational paper on RETE algorithm Drools implements.
  4. Gartner Hype Cycle for Decision Management Software (2025) - BRMS market context and performance landscape.
  5. Forrester Wave: Digital Decisioning Platforms (Q1 2026) - vendor performance and scalability landscape.
  6. NAIC Model Bulletin on the Use of Artificial Intelligence Systems by Insurers (2023, updated 2024-2025) - audit-trail requirements that affect scalable BRMS deployments. https://content.naic.org/sites/default/files/inline-files/2023-12-4 Model Bulletin_Adopted_0.pdf
  7. Notus Finance / Higson case study (Drools migration, 100 000 calculations in 8 seconds, 1.75x improvement) - https://www.higson.io/case-study/
  8. OMG Decision Model and Notation (DMN) Specification - the standard most scalable BRMS implement. https://www.omg.org/dmn/

Take Full Control of Your Product Logic

We provide fee Proof Of Concept, so you can see how Higson can work with your individual business logic.