We deploy daily out of master
At the beginning of 2016, we had to branch each day to ship our code. Now, those days are long gone, and we ship out of master every day. The transition was not without its hiccups, but, through a mix of heroics, brilliance, and good old-fashioned patience, the team came together to make deploys the way we wanted them to be. And we shed a whole lot of process and overhead as well.
Developers own quality
For years, we lamented developers’ over-reliance on manual testing to ensure quality. We’d say, “We ought to have more automation,” but nothing would really change. As the code base grew, our quality assurance engineers ended up on a treadmill of repeated regression. And when the QA team inevitably fell behind, we’d hold up features, causing a log jam in products.
2016 is the year that ended. Developers own quality, and they’re responsible for making sure their features have adequate testing. If a feature hasn’t been released, it’s because the developer isn’t done, not because QA ran out of time.
We built a quality framework
Freed from the burden of repetitive manual testing, our quality team built an impressive framework for ensuring the quality of our code. Tools like Unified Test Reporting and Test Selector have transformed the developer workflow. A developer can deploy her code on an EC2 VM and then run automated tests or try the code by hand, harnessing the power of the cloud with the click of a button.
Kafka is a core architecture
The Notifications Team replaced our listing updates code base with a modern one based on Kafka, Yarn, and Samza. It’s faster and easier to monitor and maintain, and contributing to massive traffic growth in the last few months. And the architecture is now available for other teams who need stream processing.
Redis is a core architecture
Before 2016, Redfin did not have a built-in caching strategy. Now, we have Redis, which is behind some of the huge performance gains we’ve seen on the map and listing details page this year.
We put ourselves on the open source map through our release of React Server. We’re looking for more things to open source going forward, and more ways to evangelize what we’re doing to other engineers.
We built an internal tech lead community
As engineering has grown, we found ourselves with enough tech leads to start building a community among them. We brought them all together for a tech lead summit, where they discussed cross-cutting topics affecting the whole engineering org like security, build and dev environment, scaling in the cloud, and monitoring.
We also sent our tech leads to leadership training, the same training that Redfin managers receive. The training focuses on soft skills like leadership, listening, and saying what you mean respectfully. These skills have become critical for our tech leads as we’ve grown.
We’ve embraced root cause analysis
When things don’t go as planned, it’s become natural for engineering teams to run a root cause analysis to learn how we can improve.
More teams, more focus
As engineering grew, we introduced seven new engineering teams to tackle specific challenges.
Common Components make development faster
One of the biggest wins of our React porting project has been the Common Components library, which now includes form framework components that are powering multiple products. Our new front-end working group will carry this focus into 2017.
So long, Eclipse
Developers who’d used IntelliJ in the past sung its praises, saying they felt much more productive with it than with Eclipse. So, after an evaluation, we moved to IntelliJ, and recently added an optional Ultimate license for developers who need it.
So long, Maven (almost!)
Perhaps the thorniest of all of the engineering projects we tackled this year was moving from Maven to Bazel. Any Day Now, we’ll be deleting Maven from our build process. Maven config files will be there only to tell IntelliJ how projects fit together – and even that, one day, we hope to remove. And once our build, test, and deploy environments are fully powered by Bazel, we’ll be shifting towards improvements to the developer build experience.