Recently updated on September 17, 2026
Subject matter experts:
The most expensive architectural decision in test automation isn’t which framework to use. It’s whether your developers can read, review, and contribute to the test code. Same-language automation is how you tear down the wall between dev and QA.
— Victor Olkhovskyi
We pick the test automation language from the platform under test. Java backend, Java tests. That single choice decides whether your developers can review the suite, contribute to it, and reuse what they have already built.
There’s a popular pattern in test automation: pick a specialized testing framework, regardless of what language your production code is written in. Backend in Java? Automation in Python. Backend in Go? Automation in JavaScript. Backend in C#? Automation in whatever the QA team already knows.
It’s convenient. It lets QA engineers work in their comfort zone. And it creates a wall between your development team and your test automation that will cost you far more than the convenience is worth.
On the banking platform we’ve been building for years, now running 60+ microservices and 900+ API endpoints, we write the automation suite in Java because the backend is Java. We’ve written about how that suite runs in parallel with development.
This article covers the decision that comes first: which language to write it in.
Framework comparisons rank execution speed, syntax elegance, ecosystem maturity, and learning curve. One question outranks all of them.
Can your developers read, review, and contribute to the test code?
A suite in a language only QA reads ends up with a single owner.
On projects we’ve inherited that ran this way, developers stayed out of the test code. Failures went back to QA for interpretation, and capacity gaps stayed inside the QA team.
Architectural improvements to the suite waited for the only people who could make them.
The banking platform runs Java microservices. We run the API test suite in Java too, following a deliberate design principle: we write automation per platform, in the language of the platform it tests. Three things followed from that choice.
Every automation PR goes to code review, and developers sit on those reviews alongside QA. They assess test logic, assertion quality, and code structure.
The useful part is what they catch that a QA-only review misses. A developer who wrote the service knows which endpoint in a flow commits the transaction, so an assertion on the wrong response stands out to them immediately.
They also know what already exists. Where a shared module has a retry wrapper, a hand-rolled polling loop in the test becomes one import.
A reviewer in another language loses all of that. A Java developer reading a Python suite can follow the intent of a test, and that is where the review ends.
During delivery crunch on the banking platform, developers wrote basic happy-path end-to-end scenarios themselves. They already knew Java and the business logic, and the suite ran on the build tool and test runner they used every day.
Testing capacity expanded at the point where we needed it most.
This works for the straightforward paths. Edge cases, negative scenarios, and anything that needs test data in a particular shape stay with QA, who find the cases worth writing.
The platform’s backend already had libraries for Kafka, Vault, database access, and third-party API clients. The Java test suite imports them directly.
The suite uses the backend’s Kafka consumer, its Vault client for test credentials, and its HTTP client with the auth handling already built in.
The model classes matter most here. A Java suite deserializes responses into the same DTOs the services publish, so a renamed field or a changed type breaks compilation. In another language the suite keeps its own copy of every payload shape, and those copies drift.
A Python or JavaScript suite would need a parallel implementation of everything on that list: a second Kafka consumer, a second set of payload models, all for functionality that already exists.
The core idea we built into automation was that it should be per-platform — per backend or per frontend. If our backend uses Java in a microservices architecture, then automation should also be Java. The idea was that developers could be involved: they could review QA’s automation pull requests, see what coverage QA is building, help from the technical side. If you’re using a different programming language, you can’t even ask for code review.
— Victor Olkhovskyi
The usual argument: QA should use whatever language they’re strongest in, because test code quality matters and people write better code in languages they know.
That holds in isolation. A QA engineer who is expert in Python writes cleaner Python tests than Java tests for the first few months. The system-level effects run the other way.
| QA’s Preferred Language | The Backend Language |
|---|---|
| Faster initial QA productivity | QA learning curve for the first months |
| Test code review stays inside QA | Full developer code review on tests |
| QA covers every scenario alone | Developer E2E contributions when needed |
| Libraries rebuilt from scratch | Direct library reuse (Kafka, Vault, HTTP clients) |
| Payload models maintained twice | Shared DTOs, drift caught at compile time |
| One owner for the suite | Shared ownership across the team |
The short-term code quality advantage of a preferred language is real. Over the life of a suite you maintain for years, the cost of isolating automation from the development team is larger.
The learning curve is short. API test automation uses a narrow slice of any language: HTTP calls, serialization, assertions, and a test runner. Our QA engineers picked that up in weeks while developers reviewed the early pull requests. The wider benefits of a shared language appear on the workflow side.
Same-language automation is specifically about the test suite that validates the platform it’s paired with. Backend Java → backend API tests in Java. Frontend React → frontend E2E in TypeScript.
The principle is per-platform alignment. On a platform with both ends, the two suites use different languages on purpose.
Disposable scripts are the exception. We write one-off data generators and performance utilities in whatever gets the answer fastest. The principle covers a suite that lives alongside your codebase for years.
Most teams reading this have a suite already: Python tests against a Java backend, a few thousand of them, and a QA team with other work to do. The coverage is real and the suite is running, so the question is how to change languages while keeping both.
One path freezes the old suite. It stays in CI with the coverage it has, and everything new goes into the backend language from the first feature. The two run side by side, and the old one shrinks as the features it covers change or retire. This is the cheapest start and the longest finish, because you carry two runners, two CI configurations, and two sets of test data helpers for as long as both live.
Another path ports the flows that matter most and leaves the rest. Authorization end to end, ledger accuracy, whatever costs the most when it breaks in production: those tests earn a rewrite, because those are the ones developers open when something fails. The remaining Python tests stay until the features under them change.
A full rewrite makes sense when the old suite is already in trouble. Flaky tests, a run that takes hours, coverage of endpoints the platform has since dropped. In that case the work was due anyway, and the language is a decision you make while doing it.
Six months into any of these, the number worth looking at is how many automation pull requests a developer reviewed or wrote. That number is what the migration was for.
Matching the backend language has a hiring cost. A QA automation engineer with Java on the CV is a smaller pool than a QA automation engineer, and the posting competes with your own backend roles for the same skill.
The bar is lower than the ad suggests. API automation uses a slice of the language, so the person we look for is a QA engineer who can learn that slice under code review. Java experience moves someone up the list, and a strong QA engineer without it still gets an interview.
What the choice buys back is onboarding. The engineer who joins reads the service code in their first week, so the ramp-up covers the business domain and the platform itself.
Team composition shifts as well. A platform with a Java backend and a React frontend needs QA engineers across two stacks, which shapes how you split a small team. During a vacancy, developers hold the basic coverage, which takes some of the urgency out of filling the role.
Let’s be honest — QA engineers may have less depth in a given programming language than developers. Under code review, developers can help and suggest how to do things better, more correctly, more flexibly. And when QA is overloaded or there’s a capacity gap, you can involve developers — they can at least write basic end-to-end scenarios. Because very often, after something new is deployed, even the basic happy path doesn’t work.
— Victor Olkhovskyi
When you start a new automation initiative, or restructure an existing one, the first question we ask is the simplest one: what language does your development team work in every day? That language is the one for the suite that tests their platform.
Three things make that choice hold in practice.
The learning curve for QA takes the first months. In exchange, developers review the tests, contribute to them during crunch, and share ownership of test quality.
The wall between developer code and test code is the most expensive architectural decision in fintech test automation. Matching the language is how you take it down.
Kindgeek builds test automation for fintech platforms that developers and QA own together. One shared standard for quality.
Contact usThe language of the platform under test. For backend API automation, that means whatever your services run on.
Developers can then review and extend the suite, and it reuses the libraries and model classes that already exist. Frontend E2E follows the frontend stack for the same reasons.
They cover happy-path end-to-end scenarios when the suite runs in a language they already use, which helps during delivery crunch. Edge cases, negative paths, and test strategy stay with QA.
For the first months, yes. API automation needs a narrow slice of the language, and developer code review shortens the curve. The trade is short-term QA velocity for long-term shared ownership.
AI in payment processing uses models to make the calls that fixed rules used to…
AI models are increasingly influencing payment decisions involving real money, from whether a transaction should…
As more companies choose a blockchain consulting partner every year, the success of their blockchain…
A complete application to become an Electronic Money Institution takes the FCA roughly three months…
Take $49.995 as an example. This amount can be part of a discount, tax, or…
Fedwire, the US domestic wire system, settles more than $4.7 trillion in transfers a day,…