Senior Java developer - up to 100k
I am currently recruiting for a trading exchange in London, they have developed an open source concurrent programming framework which provides a way for developers to think about how to parallelise their architecture in a straightforward and easy to code fashion.
They are looking for senior developers at the moment with the potential to move in to more of a leadership position in the future.
Their technology stack and architecture are driven by their strict performance targets - processing 10's of thousands of orders a second, with consistent end-to-end latencies under 100 microseconds.
The core of their tech stack is Java (they keep up to date with releases, so are currently using Java 8 and expect to migrate to Java 9 pretty swiftly once it is released). They believe that Java offers a good balance for high performance coding and developer productivity. They experiment with other languages around the edges of their system, but for the main code base they value consistency.
To meet their latency targets they operate a highly stateful application - with all live/working state held in memory, and work hard to eliminate unnecessary complexity. They use quite a few open source libraries - and contribute back a number of projects themselves - but they avoid tying themselves to 3rd-party frameworks. They want to understand and be in control of their whole stack, and not beholden to someone else's design. Data archival and reporting occur out-of-band, mainly using Percona (a commercially supported MySQL derivative). They also have an in-house high performance time series datastore for market data, and an application & system metrics database built on top of LevelDB.
Their exchange runs on commodity servers, and they use techniques such as CPU isolation, thread pinning and memory-locking to eliminate jitter for their critical paths. They practice 'mechanical sympathy' - learning how modern hardware and operating systems work, and take a scientific approach to building software that works with these systems to get the best performance that they can from them.
They also invest heavily in testing and automation - as you'd expect from one of the pioneers of Continuous Delivery. Alongside their performance requirements, having responsibility for handling large sums of other people's money makes them take correctness very seriously. They have a large suite (15000+) of BDD-style Acceptance Tests that act both as a regression suite and to give us confidence that new features function as expected, and a range of performance tests from micro-benchmarks of core routines to end-to-end tests where they replay traffic from production environments.
Key Responsibilities / Duties:
Work with Business Analysts to define and estimate the software solution for each user story
Design, develop and test software components to exacting technical and performance criteria
Maintain the automated unit and acceptance test suite for all software delivered in line with best practice in continuous integration
Peer review and pairing
Research and assess new products and technologies to enhance or extend the platform
Contribute to the overall system design and architecture
Help to support their system in production
Writing good software is an addiction!
Bad code offends you