Release
Early, Often, Stable
Alexey Kupriyanenko, R&D Manager
WIX
RERO
Background
Release early. Release often.
And listen to your customers
Eliminate the risk of creating software that
no one will use
1997. Eric S. Raymond
Time-based
▪ Scope of release is defined in
advance
▪ Strict schedule for releases: every
week/month/year
▪ Predictability for contributors and
users
Background
source
Works really well with open source projects
Feature-based
▪ One release - one feature
▪ A developer is responsible for deploy
process
Background
In most cases, it’s the fastest feedback
loop between you and customers
I like the
Web
Background
What is often?
= amount of developers / 2
per day
but it can be more
Background
I know what I’m talking about
We have daily releases in production~500
It can be risky
Be prepared for the
production bugs
We all know that they are exists,
you must be honest with yourself
Risks
Therac-25
The Worst Computer Bugs in History:
Race conditions in Therac-25
These computer bugs left a significant
impact on the people who experienced
them
motivationRisks
Boeing 737
Boeing 737 cockpit screens go blank if
lands on specific runways:
with a 270-degree true heading
source
motivationRisks
Let’s talk about motivation
Eliminate the risk
of creating soft that no one is using
Motivation
Reduce code review complexity
Motivation
Higher quality software
Motivation
Reduce development friction
Motivation
Let’s talk about methodology
Continuous
Integration
Strategy
If it hurts, do it more
You could avoid merge conflicts by
integrating code more frequently
Continuous
Delivery
Strategy
Every time you commit some code
the commit makes its way to a server
Feature flags
Strategy
Putting an if condition around a new
feature, and having it related to something
external to the code
if (isFeatureEnabled) {
doSomething();
}
Separation of
delivery and release
Strategy
▪ Developing the feature bothers no one
▪ QA and other developers get the feature
as needed
▪ Deployment is low risk and uneventful
▪ Releasing a feature is a business
decision
Deployment is low risk
Strategy
QA and other developers get the feature as
needed
Strategy
Releasing a feature is a business decision
Strategy
Let’s talk about ingredients
Tests
Ingredients
You have to be sure that you didn't
break your or colleague's code
QA approach
Ingredients
It’s impossible to run tons of manual
regressions for your product
You have to find a way to have a
minimal amount of manual QA
Monitoring
Ingredients
It’s almost impossible to cover 100% of
all possible cases
You have to have monitoring of
production system
Version control
system
Ingredients
Get rid of all unnecessary steps and
branches in your git methodology
Challenge it as much as possible and
question every step
How it works in our projects
Microservices
Experience
One application can be deployed
granularly
Development
sprints
Experience
You don’t need to build an exceptional
process, work by scrum/kanban or
something that fits your needs
Experience
git
Most simplistic GitHub flow
Experience
CI
CI - under the hood
Experience
Apache Kafka
Open-source stream-processing
software. Platform for handling real-time
data feeds
Experience
https://www.wix.engineering/post/making-order-in-ci-cd-mess
git local
Experience
git remote
PUSHCommit
Repo
Update
Post ReceivePre ReceivePost CommitPost Commit
Git Event
Listener
Produce Kafka messages for every
commit push to any of Wix repositories,
this message is consumed by any
service (not only Lifecycle services that
what to be notified of such events).
Experience
https://www.wix.engineering/post/making-order-in-ci-cd-mess
Build Server - TeamCity
Experience
Build Server
Experience
We extended TeamCity capabilities and
added a plugin that produces a Kafka
event whenever a build starts /
completes / fails.
https://www.wix.engineering/post/making-order-in-ci-cd-mess
Repo
Descriptor
Service
Experience
Since we use several build tools and
technologies, we created a general
entity called “Artifact”
https://www.wix.engineering/post/making-order-in-ci-cd-mess
Build Descriptor
Service
Experience
Consumes TeamCity messages and
triggers a complete “build refresh”
process.
Once the task is completed, a message
is delivered to all consumers
https://www.wix.engineering/post/making-order-in-ci-cd-mess
Artifactory
Experience
Wix binary repository with a snapshot of
a successful build
https://www.wix.engineering/post/making-order-in-ci-cd-mess
RC service
(release candidate)
Experience
Manages the RC process, validates the
build can be RCed (no pending changes
to build in CI TC and CI build is green)
and monitors the progress of the RC
process
https://www.wix.engineering/post/making-order-in-ci-cd-mess
GA service
(global availability)
Experience
Manages the GA/Testbed/Rollback
processes, stores the current and past
GA versions of each build. It is also
responsible for the complete process
https://www.wix.engineering/post/making-order-in-ci-cd-mess
Production
Interface
Service
Experience
Responsible for reflecting the status of
an artifact in production.
It monitors the deployment progress
and updates the developers
https://www.wix.engineering/post/making-order-in-ci-cd-mess
Snapshot
Commit to master branch, triggers a build in dev TeamCity, a successful build produces
a SNAPSHOT version artifacts that are stored at Wix binary repository (Artifactory).
Experience
RC
The version is ready for deployment; it first needs to be promoted from Snapshot to RC,
this operation practically copied the last snapshot version from SNAPSHOT repository
in Artifactory to RC repository
Experience
RC
1 commit = 1 version
Each commit in master potentially can be released to production
Experience
RC
We deploy every RC to CDN
CDN: https://static.parastorage.com/services/editor-elements/1.221.0/dist/main.min.js
Experience
GA
Once an RC version is ready, the developer can deploy it to production by updating the
production with the new RC version.
Experience
GA
https://static.parastorage.com/services/editor-elements/1.221.0/dist/main.min.js
Experience
https://static.parastorage.com/services/editor-elements/1.223.0/dist/main.min.js
Environments
Experience
We have SINGLE prod environment
No staging/pre-prod or something else
On prod we are doing all testing
With the internal tool, we can override any
production artifact version with RC
Gradual rollout
Experience
We can open new features for
▪ specific group of instances in a cluster
▪ specific group of people
▪ specific group of GEO
▪ set % for every group
Gradual rollout makes sense
if you have enough traffic
A/B Experiment Infrastructure
https://github.com/wix/petri/
Experience
Monitoring
Experience
▪ kibana / Log monitoring
▪ sentry / JS runtime monitoring
▪ new relic / VM monitoring
▪ grafana / action monitoring
▪ pingdom / alive monitoring
▪ tableau / business monitoring
▪ opsgenie / on call management
Rollbacks
Experience
Easy to trace what has changed in
production and rollback if the new
version didn’t behave as expected
Enjoy
your Early, Ofte releasesearly, often, stable
Fast user feedback loop
Minimum development friction
High quality
Huge team motivation
Thank You
alexeyk@wix.com github.com/kupriyanenko
alexeyk@wix.com github.com/kupriyanenko
Q&A
GAs per Month
Experience

Alexey Kupriyanenko "Release Early, Often, Stable"