Modern software architecture has shifted from monolithic architectures toward distributed architectures such as microservices and serverless computing. Microservices architecture can be characterized as an architecture that disaggregates the application into independently deployable parts (or services) which inherit important characteristics such as scalability, fault-isolation, and flexibility. Serverless computing can be thought of as a unique level of abstraction where the developer can solely concentrate on business logic with complete abstraction of the control and complexity of managing servers. Serverless offers automatic scaling of resources and only charges the organization on a pay-as-you-go basis based on usage, complete with an automatically scaling model that allows an organization not to charge for capacity that is not being utilized. With each architecture, there are trade-offs. Microservices can become complex, as microservices can incur overhead in the communication between services. Serverless can potentially incur cold-start latency, along with complexity in addressing latency and vendor lock-in. A hybrid architecture is emerging that allows organizations to leverage attributes from microservices and serverless architectures, so that organizations can gain the advantages from both architectures. Ultimately, factors contribute to making a decision either way based on organizational constraints, project features, and the competence of the team. It is important to have an understanding of the patterns of these distributed architectures and their constraints.