Be part of week-based sprints executing on the backlog in lockstep with developers as part of an Agile team.
Work as an independent contributor collaborating with a team of developers and test engineers.
Collaborate with product management, support, and engineering teams in order to establish priorities.
Mentoring and code reviewing for a remote team, setting best practices and policies, writing specs, wiki pages, knowledge base articles, and other internal documentation.
Work closely with the support team, and communicate with customer sysadmins, DBAs, and developers for troubleshooting.
Provide technology recommendations and strategy to support the business requirements.
Collaborate with product management, support, and engineering teams in order to establish priorities, understand requirements, formulate test plans, and execute them accordingly.
Ability to work on urgent issues.
Qualifications:
7+ years of experience in Java development.
Solid understanding of object-oriented programming (OOP) concepts.
Solid foundation in Java Core and J2EE development fundamentals including best practices and design patterns.
Experience in Spring-MVC/Spring-Boot framework.
Experience in Java REST web service.
Database design fundamentals and knowledge in JPA.
Experience in analysis, design, and developing business requirements.
Experience with TDD, code testability standards, JUnit/Mockito.
Experience developing backend components, services, or APIs in Java or a similar language.
Strong skills writing high-performance, multi-threaded, efficient, and maintainable software code.
Experience crafting and implementing highly scalable and performant microservices-based applications.
Familiarity with HTTP, REST, HTML, JSON, and similar web-based development technologies, and with building complex multi-tier parallel distributed systems that communicate via them (such as the backend of complex websites).
Knowledge of SQL and experience working with online data stores (one of MySQL, PostgreSQL, Oracle, MS SQL Server).
Experience with building, maintaining, and scaling large scale distributed systems.
Ability to identify trade-offs between various implementations and make decisions about which solution would be best for a given situation.