Responsibilities for Internal Candidates
ARCHITECTURE:
- Small classes, small methods, communicative code :
- Java/Kotlin – Older services are in Java, new services use Kotlin
- Pivotal Cloud Foundry – migrating to Google Cloud Platform
- Component/Sequence Diagrams generated dynamically from test-runs of end-to-end and component-level tests (Living Sequence Diagrams)
- Event-Driven Microservices Architecture – new end -to-end functionality is usually added by adding microservices that are loosely coupled by events (RabbitMQ, Kafka);
- Actual Microservices – the logic of the service fits on half a screen (usually);
- Development on MacBook Pros with IntelliJ IDEA (both supplied) for security reasons;
- Infrastructure as code (where possible) – our infrastructure is configured via code and git versioned config.
PRACTICES:
- User Stories (that are actually vertical) – while we mainly implement APIs, we do so with the 3rd Party developer in mind as our user;
- User Story Mapping – we identify stories that support the business process (Activities & Steps) and the commercial objective ("Release" Slice – although this is a notional concept since we're shipping to prod 15-20 times per day);
- BDD/TDD (as if you really meant it) – outside-in development, driven from scenarios with outer and inner loops from e2e, CDC, component (service) tests, unit tests, mutation testing;
- Trunk Based Development – no feature branches, all development done on Master/Main with small safe steps;
- Continuous Deployment – 1-3 commits at a time are pushed, resulting in our automated build then testing that service and then end-to-end with other services, automatically deploying it to production with blue-green deployment 20-40 minutes later (depending on the service) ;
- Deployment to primary and failover environments as part of the build ;
- Reverse Pull Requests – for collaborative code review even though many commits are already running in prod (we're only done when engineers say they're happy the code is maintainable).
EXPERIENCE & BACKGROUND REQUIREMENTS:
- Engineering degree in Computer Science or related
- 3-5 years of experience primary in Java (Full Stack desired) and Test Driven Development (TDD) working with tools such as JUnit, Mockito or related
- Experience with Microservices is required.
- English proficiency (both written & verbal)
- Additional experience as a plus: eXtreme Programming techniques, CI/CD, Asynchronous Messaging (Kafka, RabbitMQ, Pub/Sub), Jenkins, Microservice architecture, Pivotal Cloud Foundry (PCF), Google Cloud Platform (GCP)
COMPETENCIES & SKILLS:
- High degree of autonomy – particularly on how development is done and on prioritizing work that accelerates the team.
- Highly collaborative – pairing, mobbing, pair swapping, daily technical knowledge sharing sessions - working with team mates continuously via screen sharing, regular breaks, multiple team-wide collaborations per day.
- Optimize for flow, not utilization – pull-based flow, no sprints/iterations, just small slices of work taken to do every few days.
- No Estimating – we have an automated forecasting tool that uses empirical throughput data to forecast scope completion when appropriate.
- Quality centric – naturally high test-coverage (90-100%), high internal code quality.
- Continuously improving – in ways of working, technology, & architecture.