We can summarise the main ideas like this. Components encapsulate functionality while the bases decide how the code should be exposed and executed, e.g. as a command line tool, a lambda function, or a REST API. This separation allows us to easily change how our code is executed by including an arbitrary set of building blocks in each project, that can later be used to build the artifacts we need. Finally, the development project is used to improve the development experience.