

What’s more, a small interface is more easily adapted to new use cases.Ĭlear boundaries between system logic and application-specific logic In Cape it’s common for a component to contain procedures for both system logic and application-specific logic.

It’s easier to reason about interaction between the modules when their interfaces are small. We also want to highlight the importance of keeping module interface to a minimum. Testing was easy since we could verify each module independently. This way, when building a module we only needed to worry about a limited number of issues. We created modules with clearly defined functionalities, and carefully designed the communication protocols between these modules. Modularization From the beginning we explicitly took a modular approach to system design this is critical for isolating complexities. These principles were critical for both the project’s success and the ongoing maintenance of the system. These principles were proposed based on learnings from the development of other systems at Dropbox, especially from Cape’s predecessor Livefill. Throughout, we’ll focus the discussion on a few key design decisions.īefore we begin, let’s touch on a few of our principles for developing and maintaining Cape. Then we’ll look at the core scheduling component of the system. First, we’ll discuss Cape’s architecture. In this post, we’ll take a deep dive into the design of the Cape framework. Currently there are over 70 use cases registered under Cape’s framework, and we expect Cape adoption to continue to grow in the future.
