COBOL.fyi

Leading Hub for COBOL and Mainframes
Back to Articles
Industry

Why 95% of ATM Transactions in the US Still Run on COBOL

COBOL still powers a huge share of global banking because it was built exactly for high-volume, decimal-precise, audit-friendly transaction processing, and no alternative matched that fit when the industry standardized around it.

Wednesday, March 25, 2026·8 min read
Why 95% of ATM Transactions in the US Still Run on COBOL

Every time you tap your card at an ATM and cash slides out in seconds, something invisible happens underneath: a programming language invented before the moon landing checks your balance and authorizes the transaction. That language is COBOL, born in 1959, still running the financial world's most critical infrastructure.

How Big Is COBOL's Footprint?

The numbers are hard to believe. COBOL handles 95% of ATM transactions and 80% of all in-person credit card transactions in the United States. Globally, 43% of banking systems are built on it, processing over $3 trillion in commerce every day - more than the GDP of most countries, quietly reconciled while everyone sleeps.

The codebase is enormous. Bank of New York Mellon alone runs 112,500 COBOL programs across 343 million lines of code. Globally, an estimated 800 billion lines of active COBOL exist, and around 1.5 billion new lines are still written every year. It's not a dying language being kept on a drip. It's a working ecosystem that keeps quietly growing.

Table showing COBOL's role in banking: 95% of US ATM, 80% credit card, 43% global systems, $3T+ commerce.

COBOL quietly powers the backbone of global finance.

Why COBOL Was Chosen Originally

Picture a bank's data center in 1965. Rows of refrigerator-sized mainframes hum in air-conditioned rooms. Every night, the bank has to read every account, apply interest, process checks, and reconcile balances before branches open in the morning. If that fails, people don't get paid, mortgages don't clear, governments don't collect tax. There's no retry button.

COBOL was built for exactly this. Its syntax reads like stylized English - COMPUTE INTEREST = PRINCIPAL * RATE / 100 - so business analysts and auditors, not just programmers, could check that the logic actually matched the policy. Its native fixed-point decimal arithmetic handled money precisely, without the rounding errors that binary floating-point math produces. Those errors are catastrophic when you're reconciling millions of transactions to the cent.

What really sealed it was standardization. The US Department of Defense convened the [CODASYL committee](https://en.wikipedia.org/wiki/COBOL) in 1959 to build a common business language that would run across different hardware vendors. By 1961, IBM, GE, NCR, and Honeywell had all committed to COBOL compilers. A bank CIO could make a straightforward bet: build in COBOL and your programs run on your next machine, whatever brand it is. IBM pushed this further by weaving COBOL into its System/360 mainframe line alongside CICS and DB2. Early core banking suites like Hogan and Systematics were built on that exact stack, and that's how COBOL got wired into banking's backbone for the next several generations.

Main Alternatives in That Era

COBOL didn't win by accident. There were real competitors, and each had genuine strengths.

FORTRAN (1957) was clean and widely used in universities and engineering firms, but it was built for scientific work - matrix math, physics simulations. It had no real record-oriented file handling, and its floating-point arithmetic was wrong for financial ledgers. Banks needed to process customer records, not solve equations.

Assembly language came before all of them. Many early banking systems were written in it, and it was fast and hardware-close. But it was brutally machine-specific and expensive to maintain. As banks scaled to millions of accounts across nationwide operations, keeping large assembler codebases running became unsustainable. It was a specialist's tool in a world that needed something more industrial.

RPG (1959) was IBM's solution for businesses migrating off punched-card tabulators. It was good at reading records and printing formatted reports, and it found a long, comfortable life on IBM's AS/400 midrange systems in manufacturing and retail. Its column-sensitive syntax was just too constrained for the kind of large, multi-product core banking logic that major banks needed.

PL/I (1964) was IBM's swing at building one language to cover both scientific and business computing. It was powerful, genuinely so, but trying to do everything made it heavy and hard to learn. By the time it matured, COBOL and FORTRAN already had deep roots. Asking a bank's IT department to rip out working COBOL systems for a newer, more complex alternative was never going to be an easy sell. PL/I found homes in insurance and government but never broke into core banking at scale.

Table comparing why FORTRAN, Assembly, RPG, and PL/I failed in banking systems.

Why early languages struggled to win over banking IT.

Why Those Alternatives Didn't Dominate Banking

Each one was built for something slightly different from what banks actually needed. FORTRAN pointed at science labs. Assembler couldn't scale across large development teams. RPG was good at output, not at running a ledger. PL/I was late and too complex to displace a standard already in motion.

COBOL fit the problem so cleanly that it pulled everything else toward it. New banking packages, card networks, and interbank settlement systems all built around COBOL. Every integration written to talk to an existing COBOL system was, naturally, also written in COBOL. The ecosystem deepened year after year, and walking away got harder each time.

There was also something cultural at play, and it mattered a lot in a regulated industry. Bank auditors and senior managers could read COBOL. When a regulator or executive needed to trace a loan calculation through the code, they could follow it. Assembler was opaque. PL/I's complexity made verification harder. COBOL's plain-language design built a kind of institutional trust that the alternatives never quite matched.

The Paradox That Defines Modern Banking

Banks are sitting with a real contradiction. Their most important infrastructure runs on technology most of their own developers have never touched, kept alive by a shrinking group of aging specialists. Around 60% of COBOL-using organizations say finding skilled developers is their biggest problem. Many of these institutions are running code whose full behavior no single person completely understands anymore, trusted only because it has worked correctly, every single day, for thirty years.

And yet the math still favors leaving it alone. A botched core banking migration can cost more in one event than years of mainframe operating expenses. For a bank board, "don't touch what works" is a rational, defensible position when the downside of getting it wrong is so severe.

That's what COBOL's architects accidentally built in 1959. A language focused on one thing, processing business transactions reliably and readably, standardized just widely enough that the entire industry ended up on it. That convergence created something so tangled with regulation, vendor infrastructure, and institutional memory that leaving it behind isn't really a technology problem anymore. It's a coordination problem on a civilizational scale.

So the next time cash slides out of an ATM in under three seconds, a 60-year-old language is doing its job somewhere underneath, boring and invisible and decimal-exact, just as it was designed when IBM mainframes were new and the moon hadn't been visited yet. Banks aren't clinging to COBOL out of nostalgia. It's simpler than that: when you're moving trillions of dollars a day, the most radical thing you can do is often to leave the part that already works exactly where it is.

#cobol#mainframe#ai