--- title: "Design a Scalable System" date: 2023-03-06T21:18:23+01:00 draft: true ShowToc: true cover: image: "cover.png" caption: "Design a Scalable System" relative: false responsiveImages: false --- Well, after I've posted my argo serie, I've found out that I couldn't really make myself understood. So now I want to talk more not about the way of implementation, but rather about the consequences of different implementations. And maybe I will e able to finally make a point about why I don't like Terraform and why I think that ArgoCD is mostly misused by almost any SRE team I know. But first I'll try to describe how I see myself as a part of a team, the team as a part of a bigger team, and all the teams across different companies as links in the bigger chain. This is how I used to see development teams before: ![Chain](/posts/design-a-scalable-system/chain-1.png) The whole team is using something as a service, for example `AWS`, the whole team is working together and producing something that is passed to a customer. But apparently this approach is only applicable to small teams, and I think it's working just fine. But there is a problem. Teams tend to grow without an understanding that they are growing, hence they keep acting like they're small but in the same time they don't change the workflow, and brick-by-brick they are building something that eventually is something unscalable at first and later unmaintainable. Example of an evolution like this: Let's take a regular Java(backend) + JS(frontend) web application