Building the culture of moving fast and what came of it
300x increase in deployments, 100% increase in revenue, 95+% result developer happiness — These are just a few of the results of our ongoing process to transform our culture and ways of working towards moving ever faster. Now that we are over 5 years in I wanted to take a look back at what have been the effects in practice and what have we done to achieve those.
What is a culture and why do we need it?
Culture in short can be defined as “the ideas, customs, and social behavior of a particular people or society“, aka. how a group of people behaves.
Reinforcing desired behaviors when you are just 2 people is simple enough, you can directly communicate on each occasion what you think should happen. However, the moment you move beyond 2 people you have communication channels where you aren’t part of and as such can’t affect with direct communication. This is where culture comes in — We can use culture as a tool to scale out desired habits, to build a culture that reinforces behaviors that are desired, and to lessens the ones that aren’t.
Building a culture
Now that we have established what culture is and why would we need such a thing but how do we then build it? In theory, it’s not that difficult, you just need to define what you want and act on it. In theory that is, reality though can be a bit different.
Step 1: Define it
The first part is easy but equally important — Define the culture you want to grow, it should be simple enough for everyone to remember it so that it can be used as a “north star” for decisions made down the line.
Example of our culture in Aller Media Finland:
Move fast and improve relentlessly
Some of the things that this means in practice:
- Start from things that have the biggest impact — Spend time on things that matter
- Act when you have 70% of the information you need — To avoid “analysis paralysis” move before you know everything
- Prefer a two-way door, always have plan B — Since you move before you know everything, you need to make sure decisions are easy to revert
- Build everyone kickass CVs — Guarantees that we focus on interesting technologies which help on recruitment as well
- Always keep on the move — Sitting still will lead to ever-increasing technical debt which slows down progress
Step 2: Enable it
This is the meat and bones of growing a culture. Once you have defined it you need to make sure that it actually stays alive and grows, this means that you need to build systems, tools, and ways of working, etc. to support the culture you want, otherwise it will die as new people rotate in and old ones default to old ways of working. A culture that lives only by its definition has a short lifespan.
Some of the principles that we use to enable our culture:
- Trust and ownership — You build it, you own it, you run it
- Automate everything — In the end, the only work done should be writing business logic
- Vertical integration — Everything from development to operations to business in the same product team
- Simplify & unify — Make sure developers can be as productive as possible
Our road to moving fast
Since the process for chasing the ability to move fast is something that has to happen alongside normal product development it is slow and steady progress, although the more and more tooling and ways of working we have in place the faster we accelerate. Here are some of the bigger bits along the way
New tools
- Move to GitHub to take advantage of the modern tooling and better integrations to different tools
- Switch to AWS & containers to keep onboarding fast and enable high resiliency to enable developers to focus on things that matter
- Add infrastructure-as-code tooling with CDK (& CloudFormation) to give developers full control and enable an easy way to revert infrastructure changes
- Add Continuous Deployment to make sure deployments are quick & easy and make sure developers don’t have to spend time on things that aren’t generating value
Unifying technologies
- Switch services to Node.js to have one main language and ways of working throughout the stack
- Switch to TypeScript to enhance JavaScript development experience with the tooling that it provides
- Switch UIs to React/React Native to have one main way of developing
New ways of working
- Switch Teams to DevOps & Product Team model to move the decision making as close to the information as possible
- Add A/B tested releases to make sure we have an easy way out if something breaks
- Rotating PR reviews and Delegating & documenting through GitHub issues to make sure information is spread and we don’t have any single point of failures in the team knowledge
Result highlights
Here are some of the highlights of results in 2021 compared to back in 2015, when the transformation work started. Bear in mind that many of these numbers are not percentages but multipliers!
100x faster on-boarding
Back in the day, with tightly coupled systems each requiring a specific version of a subsystem, new developer onboarding could take over a month. Nowadays, with all systems standardized with Docker and with updated documentation through new ways of working, new developers are on-boarded effectively in under 1 hour, releasing to production on their first day.
300x increase in deployments
By modernizing ways of working, implementing infrastructure-as-code control over infrastructure and full release automation deployment speed increased from single release in 2–3 months (when systems were tightly coupled) to 100+ per month from a single team.
100x Traffic handling
The ability to handle traffic spikes went from 2–3x back in the day when resources needed to be reserved to 100x with on-demand capacity and multi-layer network-level caching without any issues
99.5% reduction in running costs
Running costs of a single product went down to 0.5% of the original costs by migrating to AWS, implementing modern & cloud-native technologies, and enabling developers to have full control and visibility to costs and infrastructure. You can read more here: In short: How we saved 99% on our AWS server costs
100% increase of monthly ad revenue
The modern development setup and ways of working allowed us to do more refined work on advertising, which “overnight” increased our ad revenue by 100% once released (on top of normal year-over-year growth).
95+% developer happiness
While the progress has been made to move faster, developer happiness has been in increasing steadily along with it, and eventually last year it started “breaking the scale”, looking like it was broken as it got stuck to 100%
Finally
In the end, the most important result of the whole process is the realization throughout the company that moving fast is not a project that has a start and an end date but it’s an ongoing continuous process.
— By Mikko Tikkanen, Head of Development at Aller Media Finland