To make code future proof, it must be able to accommodate the most possible change in the requirements with the least possible change in code. How can we do this when the future is unknown? In this workshop, we'll explore several ideas for how to make code that can adapt to many possible futures. We'll work through a series of exercises to help you make your code more flexible, practice looking beyond the code to see the logical assumptions that code places on its environment, and understand how to make the next version of a module "backward-compatible" with the current version.