CapitalOne embarked on a journey to become a leading technology company several years ago. The company has embraced open source, the public cloud, continuous delivery, DevOps, and microservices. It regularly competes for talent with companies like Amazon and Google, and engineers often jump between these companies (particularly in DC, Seattle, and NYC).
CapitalOne has already seen great results from this transformation, but it has come with its own challenges. CapitalOne used to have a large enterprise architecture team, which made decisions about which frameworks, platforms, patterns should be used. As the company hired more engineering talent, that did not work well anymore. Great engineers don’t enjoy the ivory tower approach and want to make their own decisions about the applications they’re building. As a result, CapitalOne allowed much more freedom to individual engineering teams and now has a truly polyglot and diverse environment.
As CapitalOne made a push to public cloud and embraced continuous delivery, teams that adapted different technologies naturally started building their own CI/CD frameworks and pipelines. At the end of 2017, CapitalOne Bank engineering leadership picked the most mature of these frameworks and mandated that everyone must use it. This was done to minimize the amount of “plumbing” work teams were doing and to avoid additional audit risk. (CapitalOne is in a highly regulated industry and production deployments have a multitude of audit controls attached to them.) This decision was initially met with disappointment and pushback. While the framework that was picked was the most mature, it did not immediately support everyone’s diverse patterns: ECS versus Kubernetes; all the programming languages used to build services (Java, Go, Clojure, Node.js, Python, etc.); containerized versus serverless patterns; Angular versus React for single-page applications, etc. Other teams that built their own frameworks felt disrespected and underappreciated, and everyone’s morale suffered.
Andrey Utis details the architecture of this reusable CI/CD framework and explains how CapitalOne Bank addressed this challenging situation:
Finding the right balance between supporting diverse patterns and consistency and reuse can be a challenge. Andrey details how the company built enough trust with engineering teams to be able to say “don’t do this” without affecting team morale.
Andrey Utis is a senior director of software engineering at CapitalOne, where he leads the retail bank architecture and platform teams. Andrey has held several leadership positions on engineering teams within CapitalOne, delivering features like online account opening and fraud and customer security protection and building a state-of-the-art CI/CD framework and transforming the organization to have a DevOps mindset. Previously, he spent several years as a consultant building large-scale distributed systems. Andrey studied computer science at the University of Maryland and Case Western Reserve University.
Help us make this conference the best it can be for you. Have questions you'd like this speaker to address? Suggestions for issues that deserve extra attention? Feedback that you'd like to share with the speaker and other attendees?
Join the conversation here (requires login)
©2019, O'Reilly Media, Inc. • (800) 889-8969 or (707) 827-7019 • Monday-Friday 7:30am-5pm PT • All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners. • firstname.lastname@example.org