Senior Java Developer

Job Description

As a Software Engineer you are part of a cross-functional service-oriented team, working on extending and maintaining our platform.

You will be responsible for writing clean, secure and well-tested code. You follow best-practice guidelines and help to improve those guidelines, your code is open by default and easy for others to reuse. You are part of a team and with the team extend, maintain and operate assigned parts of our platform.

You have a good understanding of the user needs within your service and work with the product owner and other team members to translate these into technical solutions. You work through the entire lifecycle of a service or product, from understanding requirements, development to deployment, support and maintenance. You show an understanding for deadlines, find pragmatic solutions and are proactive in raising potential risks.

You will help the team in solving the challenges that arise as our business grows and develops; working together to ensure the service continues to meet the needs of our business and its customers.

The Team

The Core Team is a newly formed team within our department. Its mission is to provide central services around our core entities and systems that make it easier for Service Oriented Engineering Teams to build functionality on top of. The team provides these “as a service” through clear APIs, documentation and support – focusing on creating a smooth developer experience for other teams. The team will also focus on topics like standardization, re-use and reducing duplicated effort across the department. We work with an exciting mixture of technologies including Java/Spring, AWS, MySQL, Kafka, Jenkins, Microservices (Docker, REST) and Angular.

Key Tasks & Responsibilities

  • Work inside a small team with a well described and groomed product backlog and be comfortable with agile methodologies and practices
  • Improve existing applications, design and build solutions from scratch
  • Develop code and contribute to reviews, retrospectives, planning and development sessions
  • Shape development technologies and practices
  • Follow best-practice guidelines and processes and help to improve those
  • Work with Product Managers to convert user stories to features and tasks
  • Grapple with business logic and help solve business needs
  • Troubleshoot and resolve issues in a timely fashion manner
  • Communicate effectively in both verbal (day-to-day discussions, team meetings) and written forms (documentation, emails, communication tools) with local and remote team members
  • Whilst the above is a guide to general expectation of the role, we expect this position to evolve allowing you greater scope to gain both knowledge and experience

Skills & Expertise

Required

  • At least 5 of commercial Software Engineering experience
  • Experience with Java
  • Spring (or similar), Maven/Gradle, RESTful APIs, JUnit and SQL
  • Experience with any relational databases: MariaDB, MySQL, PostgreSQL etc
  • Knowledge of streaming and queuing solutions (e.g. Kafka)
  • Knowledge of best practices, RESTful APIs, design patterns, unit testing
  • Familiar with Agile processes
  • Passion for writing elegant code and a desire to constantly refactor and improve, with a good understanding of SOLID, design principles and OOP
  • Understanding basic Data Structures and Algorithms
  • Comfortable with applying continuous integration and deployment.

Nice to have

  • Experience working with Cloud technologies (AWS, Azure, GCP, etc)
  • Experience working with NoSQL databases. AWS Dynamo is also a plus
  • Experience working with front-end code, ideally using Angular
  • Experience with cache solutions. Redis, Memcached, or else
  • Understanding the concepts of DDD and hexagonal architecture
  • Maintaining CI/CD pipelines
  • Working on high-volume transactional systems
  • Experience with any other major programming language: JavaScript, GoLang, Python, etc.
  • Knowledgeable about information security, able to design and implement solutions with mitigation against security threats