System Design — C4 Model
“The C4 model is an “abstraction-first” approach to diagramming software architecture, based upon abstractions that reflect how software architects and developers think about and build software. The small set of abstractions and diagram types makes the C4 model easy to learn and use.” — https://c4model.com/
Have you ever tried to express yourself in a System Design meeting and found drawing those squares and circles and in the end became a big mess? Well C4 tries to address that in a fashionable way. Having 4 tiers of diagrams(Context, Containers, Components and Code), the one I most enjoyed is called Containers.
Not Docker! In the C4 model, a container represents an application or a data store. A container is something that needs to be running in order for the overall software system to work. In real terms, a container is something like:
Server-side web application: A Java EE web application running on Apache Tomcat, an ASP.NET MVC application running on Microsoft IIS, a Ruby on Rails application running on WEBrick, a Node.js application, etc.
Client-side web application: A JavaScript application running in a web browser using Angular, Backbone.JS, jQuery, etc.
Client-side desktop application: A Windows desktop application written using WPF, an OS X desktop application written using Objective-C, a cross-platform desktop application written using JavaFX, etc.
Mobile app: An Apple iOS app, an Android app, a Microsoft Windows Phone app, etc.