Our development department is split into multiple smaller development teams, each responsible for one or more domains. They align with the product & design team and stakeholders from within Effectory.
Autonomous development teams
Each team is responsible for one or multiple domains depending upon their size and similarity. That responsibility covers the entire range, from development to keeping the domain in a running state in production.
The team decides the ideal architecture and infrastructure for the domain they own; they are the ones in charge of the domain.
While each team has a lot of freedom to decide how they can operate at their best, there are some boundaries to that freedom to ensure that we can all work together. One of these boundaries is that (micro)services/ domains communicate by sending messages/events to Microsoft ServiceBus topics.
Agile working
Most of our teams work in two-week sprints. Each morning starts with a standup through Microsoft Teams or in the office to discuss blocking work and check if collaboration or help is required. Work is picked up in pairs or with the use of pull requests in Azure DevOps.
During a sprint, work is estimated and aligned with the product owner and designer to have it ready to be picked up in the next sprint. Each sprint ends with a sprint review to share the progress of the previous sprint with the stakeholders. After the sprint review, we look back at the last period in a retrospective to see what we can improve. Finally, we take our improvement points and plan the sprint for the next period.
Every six weeks, the product team presents the work of the past three sprints to the organization in easy bite-size blocks so that everyone is up-to-date on the ongoing changes to our platform.
Meetings and focus groups
Every sprint, the development teams come together to share knowledge that they gained over the past period. This can be related to new techniques or solutions used in the past period or knowledge about their domain.
Next to working in a team, members of the teams also work together in focus groups on specific topics (front-end/security/etc.). One of these focus groups is the architecture board, a mix of developers from all teams to review and help out teams with their architecture. The goal of this group is not to prescribe architecture but to guide and help review architectural changes.
The product and development teams collaborate every quarter to look ahead, align, and make a rough plan for the upcoming quarter. Once or twice a year, this moment, is combined with Creative days. A two-day hackathon-like event where developers can work on anything they like to improve the platform or their working environment.
What's the dev process like?
Due to the autonomous nature of the development teams, it is challenging to give one definition of the techniques used, because each team picks its own. We can say that all our domains are hosted in Microsoft Azure, use C# to code in the backend and Angular/TypeScript for our front end.
Deployments are fully automated using feature toggles or following a test/stage/production environment release flow. Azure infrastructure is managed using IaC/ARM/bicep scripts, and we use services like Renovate, Sonarcloud, and Snyk to help maintain the quality of our domains.