In designing complex systems, it's important to break the big problem down into smaller and smaller pieces. We've see that idea again and again throughout the course. But in the next few videos, we're going to look at another idea for managing the complexity of big systems. This idea has to do with reducing the amount of repetition in our code. It's a concept called abstraction, and the way it's going to work, is that we're going to take function definitions, cases where we have two or more examples of very similar functions and pull out from them, a more general function, which will let us later plug in the details of the different functions. So we're going to get less code, and more of our code will be more general or more abstract. It's going to be kind of fun, and what's going to happen here is that all of this discipline you've learned about type comments and templates and template rules, well all of that's going to pay off in a really big way in these videos.