In this chapter we've looked at features that make it easier to work with larger code bases. We've looked at this from two different perspectives: abstractions we can build in our code, and features outside the code that make it easier to manage.

Our in code abstractions have focused on using names to abstract away expressions. We saw how we can define names using val, and manage names as the top-level using package and import.

Outside the code we looked at organizing code into files, and using sbt to work with larger projects.