Java/Kotlin Software Engineer
Job description
About the role
You will own the full lifecycle of features in our core banking platform, collaborating closely with product managers and fellow engineers to translate business requirements into robust technical solutions. You will design and implement services in Java and Kotlin that power critical financial workflows, ensuring your code is scalable, testable, and maintainable for the long term. You will partner with cross-functional teams to deliver incremental value, taking responsibility for your designs from initial concept through to production deployment and ongoing improvement. You will actively participate in code reviews, contribute to architectural discussions, and help mentor more junior engineers on best practices. Your work will directly impact the customer experience, helping to redefine what it feels like to engage with finance on a daily basis. You will embrace the challenge of working in a regulated environment, where your attention to detail and commitment to quality are paramount. You will leverage your problem-solving skills to troubleshoot complex issues and ensure our systems remain reliable and performant. If you are motivated by building products that matter and want to be part of a team that moves finance forward, this role is for you.
Key facts
What you'll do
Investigate production incidents and drive improvements to prevent future issues, applying structured debugging and analysis to keep our services stable.
Design and implement new features using Java and Kotlin, ensuring your solutions integrate cleanly with existing services and meet business objectives.
Refactor legacy code to improve clarity and performance, reducing technical debt and making future changes easier to implement.
Collaborate with product managers and stakeholders to clarify requirements, identify edge cases, and define testable acceptance criteria.
Write comprehensive unit and integration tests to validate your code, using testing frameworks to achieve high confidence in changes.
Analyse system performance and propose optimizations, using profiling tools and metrics to guide your improvements.
Work with infrastructure teams to enhance deployment pipelines, making releases safer and more predictable for the team.
Explore and prototype new technologies where appropriate, evaluating whether they can solve problems better than current approaches.
Document your designs and decisions clearly, helping other engineers understand the system and reducing onboarding time.
Contribute to on-call rotations, responding to incidents and supporting the continuous availability of critical services.
Mentor junior engineers by providing constructive feedback on code and design, helping them grow their skills and confidence.
Participate in agile ceremonies including planning, stand-ups, and retrospectives, sharing updates and removing blockers for the team.
Champion best practices around security and compliance, ensuring your work aligns with regulatory requirements and internal standards.
Take ownership of your work from initial spike through to production deployment, driving tasks forward with minimal supervision.
Requirements
You have a Bachelor's or Master's degree in Computer Science, Software Engineering, or a related technical field.
You have solid experience programming in Java, demonstrating a strong grasp of core concepts and the ability to write clean, efficient code.
You are comfortable writing idiomatic Kotlin, using its features to express intent clearly and safely.
You understand fundamental data structures and algorithms, enabling you to choose the right approach for each problem.
You have worked with relational databases, writing complex queries and understanding schema design principles.
You are familiar with REST APIs, both consuming and designing them to be intuitive and well-structured.
You have used at least one modern testing framework and written tests that verify behaviour and protect against regressions.
You understand software design patterns and can apply them to improve the structure and flexibility of your code.
You have experience working in an Agile environment, participating in ceremonies and adapting to changing priorities.
You are comfortable working in a regulated financial services environment, where attention to detail and adherence to processes are essential.
You have a strong command of the English language, both written and verbal, enabling clear communication with your team.
You are able to work independently and collaboratively, taking ownership of your responsibilities while supporting your colleagues.
You have a genuine interest in building products that improve people's financial lives and are excited about joining a customer-focused business.
Nice to have
Experience working with microservices or event-driven architectures, helping services communicate efficiently and reliably.
Familiarity with cloud platforms and infrastructure as code, enabling you to build and deploy resilient systems.
Knowledge of containerisation technologies such as Docker, and understanding how they fit into modern delivery pipelines.
Experience with messaging systems like Kafka or RabbitMQ, managing asynchronous communication between services.
A background in financial services or fintech, giving you context for the problems our customers face.
Understanding of software security fundamentals, helping you build systems that protect customer data.
Practical notes
This role is based in our London office.
This is a full-time permanent position.
You will need to attend interviews in person at our London office.
Successful candidates must be eligible to work in the United Kingdom without sponsorship.
We are an inclusive employer and welcome applications from all backgrounds.
If you are excited by the opportunity to build the future of banking and want to be part of a recognised, award-winning team, we encourage you to apply.