This document provides an overview of system architecture and design patterns. It discusses layer architecture and the separation of concerns principle. While MVC is a design pattern for user interfaces, layers separate components by role and allow for modular development. The document cautions against "sinkholes" where requests pass through layers without processing. It recommends separating concerns into modules to address specific functionality. The document advocates starting with a monolithic architecture for early-stage projects, and explores when to transition to microservices. It summarizes a candidate architecture for a wishlist application using Ruby, Hanami, and other technologies that enforce separation of concerns.