There are many types of different software systems, each of them suited for different scenarios, built for different needs, and using different sets of assumptions. Writing and deploying a classical, standalone desktop application is nothing like writing and deploying a microservice that needs to communicate with many others over a network.
In this section, we'll go through the various models that you can use to deploy your software, the common mistakes that people should avoid when creating distributed systems, and some of the compromises people need to make to create such systems successfully.