In this position...
We are seeking a highly skilled Full-Stack Technical Anchor to work in the development of our GOMS microservices platform using a combination of open-source frameworks (Java) + Cloud native technology stack. As a Technical Anchor, you will be responsible for designing, developing, and implementing scalable microservices architecture that will support the company's business requirements.
Culture:
- 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.
- Optimize for flow, not utilization: pull-based flow.
- Quality centric – very few defects (1-2/month), naturally high test-coverage (90-100%), high internal code quality.
- Continuously improving – in ways of working, technology, & architecture.
Architecture:
- 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);
- Small classes, small methods, communicative code
- 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)
- 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).