Senior Software Engineer (Java)
Engineer | Hybrid Working, UK
Push Technology (www.pushtechnology.com) is trusted by leading brands worldwide to manage and optimize delivery of data around the world to their web, mobile, and IoT applications. Diffusion does the complex work to provide real-time data – reliably, globally, and at scale and speed.
We develop and reward people who have the drive and motivation to make a significant contribution to the continued growth of our business. We strive to provide a culture of accountability, challenge and opportunity and encourage a spirit of collaborative, creative and fresh thinking. We want everyone to contribute and add value by turning their own skills, strengths and interests into results.
We strive to be a place that people want to work and want to work hard. With great benefits and an already impressive international team of technology experts, we want to bring on new team members that have passion, drive, innovation and leadership, just like our products.
Diffusion is an innovative real-time data platform. Following a recent investment round, the Diffusion development team is growing and there is a wealth of new feature development on the road map.
We are seeking a highly experienced Java engineer to expand the team working on the core Diffusion product. The ideal candidate will have very strong low level Java development experience and a good knowledge of JVM environments. The successful candidate will work within the Diffusion server team under the direction of the Product Architect, be able to lead the development of substantial features and subsystems and will work collaboratively and independently as required.
The problem space requires good computer science skills. The product deals with low-level concepts including bit manipulation, sockets, binary protocols, operating system idiosyncrasies, networking, and systems engineering throughout the entire stack, as well as a broad array of common Web technologies.
- Under the direction of the Product Architect, design, specify, implement, test, and document server features and subsystems.
- Maintain the existing server codebase, refactoring and improving areas as necessary.
- Take responsibility for the consistency and quality of the server. Diagnose and fix bugs and implement enhancements to improve the performance, fidelity, and usefulness of existing Diffusion features.
- Co-develop automated unit and integration tests with all deliverables to ensure appropriate quality levels. Improve the Continuous Integration pipeline, extending the level of automated testing of the adapter components wherever possible.
- Coach other engineers across the department on software patterns and principles.
- Participate in code review, give appropriate feedback, and help others to improve their contributions.
- Work within a product engineering team to ensure that new features best meet the market needs.
- Clearly and confidently communicate technical concepts at high and low levels.
The successful candidate will be required to follow modern development approaches including top-down design practices, agile development, continuous integration, continuous delivery, and peer review.
- Senior Java programming experience; expertise in object-oriented development, debugging, test creation, and fault diagnosis
- Significant experience of Java development using very low-level concepts.
- Experience of development of distributed middleware products.
- Ability to innovate independently and in partnership with others
- Systems engineering throughout whole stack from user-facing features to networking and operating systems, especially Linux
- Expertise with Java Virtual Machines (JVMs), the Java memory model, JIT compiler, and use of runtime diagnostic tools
- Awareness of the evolution and direction of the Java platform and its broader ecosystem
- Network programming; understanding of messaging protocols such as MQTT and AMQP, and WebSockets
- Understanding of algorithms and their optimisation
- Secure development expertise
- Experience of non-blocking asynchronous patterns
Nice to Haves
In addition to the above it would be advantageous for candidates to have some knowledge of the following:
- Lock-free/wait-free algorithms and data structures
- Message-oriented middleware, data grids, and a grounding in distributed systems concepts
- Experience with transactional data processing in databases and/or distributed systems
- Customer facing experience on technical matters
- Experience collaborating with customers to design solutions within their technical environment
Experience of using Hazelcast