Forum Diskusi dan Komunitas Online

Full Version: Performance Testing for Banking Applications: How to Handle Traffic and Transaction
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
[attachment=9604]

Performance Testing for Banking Applications: How to Handle Traffic and Transaction Spikes
Banks rarely fall over at 2 p.m. on a quiet Tuesday. They fall over at 9:00 a.m. on the last working day of the month, and often the cause is something the bank itself did.

Here's a pattern I've seen in different forms. Salaries are credited at the start of business. The mobile app sends a friendly push notification: "Your salary has arrived." Within about a minute, a large share of the customer base opens the app to check. Balance calls spike. Then people start paying rent, bills and cards. Transfers spike. Meanwhile the batch job that posts the salary credits is still running, and it holds locks on the same tables the balance queries need.

Nobody planned that spike. The marketing team designed the notification, the payroll team scheduled the credit, and engineering built the balance API. Each did their job. The combination created the load.

That's why I don't treat spike testing as "run a load test with more users." A spike has a shape, a cause and a chain of components that give way in a particular order. Once you see it that way, you can test for it deliberately.

Step 1: Build a Spike Calendar Before You Build a Test
Start with questions, not tools. When does your traffic leave its normal range, and why?

Pull a year of traffic data from your monitoring and mark the peaks. Then ask the business what they know that the data can't tell you: campaigns, product launches, regulatory deadlines, tax dates, festival periods, payroll cycles of your largest corporate customers, partner batch schedules, and anything that triggers a push notification or SMS.

You'll end up with four kinds of spike, and they behave differently.
[attachment=9605]

Predictable spikes follow the calendar: month end, payday, tax deadlines. You know they're coming, so there's no excuse for being surprised.

Self-inflicted spikes come from your own actions: notifications, campaigns, emails, a new feature release, an in-app banner pointing everyone at the same screen.

Cascading spikes start small and grow through your own behavior. A dependency slows down, clients time out, retries multiply, and a modest slowdown becomes a flood.

Hostile spikes are deliberate: credential stuffing, scraping, card-testing bots, denial-of-service attempts. They matter for performance because they compete with real customers for the same capacity.

Step 2: Model the Workload, Not Just the Volume
A spike isn't more of the same traffic. It changes the mix.

During a payday spike, balance and transaction-history calls rise faster than anything else, followed by transfers and bill payments. During a market event for a brokerage, quote and order requests dominate. During an outage elsewhere in the country, your login and password-reset endpoints may take the hit.

So model the journeys, with realistic proportions and think times. A script that hammers one endpoint tells you about that endpoint. A mixed scenario tells you about the system, including shared resources like connection pools, caches, message queues and the core banking interface, where different journeys compete.

Use production data to set the proportions, and be honest about uncertainty. If you've never seen a spike this big, say the mix is an estimate and test more than one plausible mix.

A small piece of arithmetic is worth doing early, because it makes bottlenecks visible. Here's an illustration with made-up numbers. Suppose transfers arrive at 200 per second, and each one holds a database connection for 150 milliseconds. Multiply them: on average about 30 connections are busy at any moment. If your pool holds 25, the system will queue requests even though CPU looks fine. The same sum with realistic numbers from your own system often explains a bottleneck before you've run a single test.

Step 3: Find the Chain, Because Failures Arrive in Order
Spikes break systems in sequence. Map the dependency chain for each critical journey: gateway, authentication, application services, caches, databases, the core banking system, fraud checks, message queues, and external partners such as card networks or payment rails.

Then ask of each link: what's its limit, what happens when it's reached, and what does the link before it do in response?

Core banking interfaces are the classic weak point. They're often the most expensive and least elastic part of the stack, designed around steady batch-style throughput. Everything in front of them can scale out while that one interface becomes the ceiling. If you know where it is, you can protect it with caching, queuing and rate limits instead of discovering it live.

Step 4: Test the Shape, Not Just the Level
This is where most test plans are thin. Use several load shapes, because each exposes something different.

Two of these deserve special attention in banking.

The spike shape matters because autoscaling takes time. New instances need to start, warm up and register. If traffic doubles in thirty seconds and your scale-out takes four minutes, you're running on whatever you had provisioned. Test the actual lag, and decide whether you need pre-scaling before known events.

The recovery test matters because systems are often more fragile after a spike than during it. Queues are full, caches are cold, clients are retrying. I've seen platforms hold up through the peak and then fall over twenty minutes later while recovering.

Step 5: Define Success Before You Run Anything
"It didn't crash" isn't a result. Agree on pass criteria with the business.
  • Latency targets on percentiles, such as p95 and p99, for the journeys that matter. Averages hide the customers who are suffering.
  • Error budgets per journey. Some failure is tolerable on a balance check and unacceptable on a payment.
  • Correctness under load. Verify that balances and ledgers reconcile after the test. A system that stays fast by dropping or duplicating transactions has failed.
  • Graceful degradation. Define what the system should do when it can't serve everything: shed non-essential features, queue low-priority work, show a clear message. Then test that it really does.
On that last point, I'd rather see a bank deliberately turn off its spending-insights widget during a spike than let the whole app slow down. Priority matters. Payments and logins come first, and the "nice to have" features should step aside. Feature flags make this controllable, but only if someone has tested flipping them under load.

Step 6: Test the Protective Machinery
Banks usually have defenses against overload. Test whether they work.
  • Rate limiting and throttling. Do they protect the core without blocking legitimate customers who share an address?
  • Circuit breakers and timeouts. Do they open when a dependency struggles, and close again sensibly?
  • Retry policies. Do they use backoff and jitter, or do clients all retry at the same instant? Are retries safe for money-moving calls, meaning idempotent?
  • Queues and backpressure. Do queues have limits, and what happens when they fill?
  • Load shedding. Can the system refuse low-priority requests cleanly?
  • Failover and capacity in the secondary site. A disaster recovery environment sized for half the load fails the day you need it.

Finally, check observability. During a spike, can your team see saturation, queue depth, error rates and slow dependencies on one screen, and do the alerts fire early enough to act on? A test that passes while nobody could have diagnosed a failure is half a result.

Be Honest About the Limits of Testing
A few caveats belong in any plan.

Your test environment is almost never identical to production. Data volume, network topology and the behavior of partner systems differ. Treat results as strong evidence, not proof, and record the differences.

Third-party systems often can't be load tested directly. Use stubs that mimic their latency and failure behavior, informed by real measurements, and test your reaction to those conditions.

Testing in production at full scale carries its own risk. Where it's done, it needs agreement, guardrails, off-peak windows and a way to stop fast. For most teams, a mix of production-like testing and carefully controlled, smaller production checks is the sensible balance.

And some cost-benefit judgment applies. Not every internal tool needs spike rehearsal. Reserve the full treatment for customer-facing journeys, payments, and anything that touches the core.

Where AI Helps
AI is useful for forecasting traffic from historical patterns and event calendars, clustering performance regressions across releases, and flagging anomalies in latency and error rates early. It can also help generate realistic traffic mixes from production logs. What it shouldn't do is decide whether the system is safe to ship. Pass criteria should be explicit numbers that people have agreed to and can defend.

If your product includes an AI assistant or model-based fraud scoring, include them in the load test. Model inference adds latency and has its own capacity limits, and a fraud check that slows down under load can quietly become the system's bottleneck.

Mistakes I'd Warn You About
Testing at yesterday's peak. Your next peak will be bigger, and growth plus a campaign can double it.

Ignoring the batch window. Online and batch workloads share resources, and the combination is where locks pile up.

Scaling the front and forgetting the core. The most elastic layer isn't the one that breaks first.

One test, one shape. A steady ramp tells you nothing about a thirty-second surge.

No communication plan. Marketing's push notification is part of your load profile. Make sure engineering knows the schedule.

A Closing Thought
Try this next week. Ask marketing, payroll operations and your largest corporate customers for their next three calendar dates that could send a crowd to your app at the same moment. Compare that list with your performance test plan. Any date that isn't represented is a spike you're planning to meet for the first time in front of customers.

I expect the practice to move toward continuous capacity rehearsal: scheduled, automated spike and recovery tests tied to the business calendar, with results feeding directly into decisions about pre-scaling and feature flags. If you'd like help building that rehearsal for your own spike calendar, our FinTech Software Testing Services team works with banking and payments teams on exactly this.