James Coglan

Open source developer and independent author

James has been working in software for twelve years, primarily as a back-end web developer, most recently in the live music and online education sectors. He created the open-source web messaging system Faye, whose internals now form the basis of much WebSocket tooling in the Ruby and JavaScript ecosystems. James also enjoys hacking on language tools, creating the cross-language parser generator Canopy, and a toy logic  programming language called Infer.

James is the author of the book JavaScript Testing Recipes, and am working on a second called Building Git, available in 2019.

Past Activities

James Coglan
Code Mesh LDN 2018
09 Nov 2018
13.30 - 14.15

Breaking changes

Semantic Versioning has become a de-facto standard in the last few years, with several language ecosystems now relying on it to manage software upgrades. However, it is frequently misunderstood as a technical tool for making cold hard guarantees about code, rather than as a human tool for signalling intent and setting expectations.

Never is this more apparent than when we consider what a "breaking change" means. It's highly contextual: it depends on which language you're using, what your public interface is, what guarantees you've explicitly or implicitly made to users, how much software sits downstream of you, and so on. In this talk I'll explore several ways you can accidentally break other people's JavaScript apps, how to avoid them, and what to do when you can't.


The aim here is to reframe our thinking about software compatibility and change management. Though there is certainly a role for formal tools like type systems in this problem, James believes it's primarily a human communication problem. It benefits from considering how code and its surrounding ecosystem conveys information to and from its users and factoring in the logistical and ergonomic problems of making changes at scale.


Though ostensibly targeting a JavaScript audience, the concepts in this talk apply to greater or lesser extent in other language ecosystems, and within any codebase of reasonable size. A basic understanding of JavaScript would be helpful but is not essential.