Versioning is usually the first–and too often, the only–technique architects reach for when imagining a breaking change to an API’s interface. Based on my experience managing the evolution of a public API, I’ve recently cataloged several alternative techniques and their tradeoffs. I released the first version of an open-source service virtualization tool called mountebank in early 2014. Since that time, I have made or incorporated several breaking changes to its public API, some of them significant, without once requiring users to manage a version upgrade process.
In this presentation, I’ll share the learnings I’ve collected over nearly a decade of changes, including:
Patterns of evolution in addition to versioning
The natural tradeoffs that exist between API elegance, obviousness, and stability
Broadening the conversation from API evolution as an architectural concern to a broader product management concern
What's the focus of your work these days?
I'm in a technology leadership role at ThoughtWorks, so it's a lot of community building capability development and a lot of trying to make sure that the flow of knowledge between the work that we do in various teams happens so that we can all learn from each other. A rising tide lifts all ships mentality.
What's the motivation behind this talk?
I have maintained an open source product that is controllable through an API for about nine years. And I intentionally did it as an experiment to try to play with a versionless approach to an API. So even though it's evolved considerably in the nine years, it's done so without requiring an upgrade from consumers and there's some downsides to that that we'll talk about in the talk, but the upsides is a much easier consumer experience. And so I wanted to talk about various strategies and patterns that I've used to help maintain that consumer experience through a long lived, flexible API.
How would you describe the persona and level of your target audience for this session?
The persona would be for those developers, architects, technical product managers who are interested in treating API as a product, maybe more strategic APIs, maybe they are partner or public APIs or strategic inside the enterprise, and looking for patterns of evolution that take into account not just implementation complexity, which is a common concern today, but also consumption complexity.
Is there anything that you would like this persona to walk away with after seeing your presentation?
Partly, I want them to walk away with more empathy for what it means to be on the receiving end of an API that goes through rapid versioning and just the busy work required to keep up with the pace of evolution. And then a little bit of awareness in terms of the tradeoffs around implementation complexity and interface complexity.
North America Head of Technology @thoughtworks
Brandon Byars is a passionate technologist, consultant, author, speaker, and open source maintainer. As Head of Technology for Thoughtworks North America, Brandon is part of the group that puts together the Thoughtworks Technology Radar, a biannual, opinionated perspective on technology trends. As a consultant, he has helped lead digital transformation agendas across a range of industries, with a focus on those technical enabling blocks and integration strategies that help promote autonomy and agility at scale. He is the creator of mountebank, a widely used service virtualization tool, and wrote a related book on testing microservices.