Senior Java Software Engineer
What you'll do:
- Develop and maintain scalable, data-driven applications in Java, leveraging object-oriented programming principles.
- Actively contribute to requirements, taking the initiative to identify additional requirements, and take the lead on design workshops
- Pair with and/or mentor junior team members.
- Contribute to agile practices like estimations, proactively research topics, share and present your ideas and contribute to peer discussions.
- Work independently or utilise pair-programming approaches to implement and optimise microservices and distributed systems on GCP (GKE, PubSub, BigQuery, Dataflow) with containerisation tools like Docker and Kubernetes.
- Build and manage efficient data processing pipelines, employing streaming technologies and both relational/NoSQL databases.
- Write and execute comprehensive unit, integration, and non-functional tests to ensure code quality and system performance.
- Collaborate on continuous integration and delivery processes using Jenkins, adhering to best practices in Git-based version control and automated testing.
- Troubleshoot production issues, propose improvements, and stay current with emerging technologies to drive innovation in the platform.
What you'll bring:
- Experience with Java and object-oriented programming concepts.
- Experience with data platforms, data processing frameworks and streaming technologies.
- Familiarity with microservices architecture and distributed systems.
- Exposure to Google Cloud Platform (GCP), particularly GKE, PubSub and BigQuery.
- Some experience working with relational and/or NoSQL databases.
- Knowledge of containerisation and orchestration (e.g. Docker, Kubernetes).
- Understanding of software engineering best practices, including version control (Git), CI/CD, and automated testing.
- Experience with unit testing, integration testing, and non-functional testing to ensure code reliability and system performance.
- Hands-on experience with Jenkins for CI/CD pipeline automation.
- Good problem-solving skills and a willingness to learn new technologies.
- Ability to identify areas for improvement and communicating problems to the team