There is no one size fits all

Everybody knows there is no Silver Bullet. We all know there is no one size fits all, however, we still look for it. It happened over and over and for sure will keep happening. Before when there was SOA, people were doing SOA wrong and want to fix all problems with ESB. So there was the SOA Rest Guerilla movement; Let's stop adding things on ESBs and move all to services. Now everybody has coded into microservices, they have distributed monolith in most cases and people are considering removing things from microservices and moving to Kubernetes. Why just run stateless code there right? If we can run all the things there like stateful databases, IoT/Edge, BFF, ML. However, there are other computing models. Most of the couples have Virtualization(EC2 on AWS), Containers (ECS/EKS on aws), Edge(Lambda on Edge for AWS), Serverless(AWs Lambda).

The history repeats: Over and Over again

There are workloads that could fit well on kubernetes others don't. There will be always use cases that will change drastically at scale and there all sorts of different problems and requirements. A long time ago there were JEE(Java Enterprise Edition - also called J2EE back on the days) people did the same mistake lets run all the things there. As you can see, we always know that there is no silver bullet but we still are looking for it. So At the end of the day, it's about balance. We still did not get this lesson as the IT industry. Distributed systems imply that there is no single system.  No Single runtime time, No Single box to add all the stuff. Some problems can be fixed at the platform level with Kubernetes / Istio. However not all the things run on Kubernetes and they should not all run over there. Lyft Envoy is growing a lot on mobile(proxy/lb). There is a need for more distribution with frontend(runs on people browsers), Mobile (runs on people cellphone), Edges Computing(Runs close to people locations for latency reasons). For operations, it is much easier to run all the things in one place. However, this is much more limiting. So If technology is changing and these are the same issues, why they keep coming?

People Problems

Often people consider this "one size fits all" issue a technical problem. We are in 2020, I dont think thats the case anymore. IMHO it's all people's problems, for different reasons we might get different problems but the common denominator is people. IMHO the forces which make this problem happens are:

1. Technology is not about sports: People end up supporting technology like they support football/basketball teams. We cannot provide unconditional love to technology because it blinds us. Technology should serve us not the other way around. Every 5-10 years everything changes. So there is no sense in having unconditional love and basis for temporary tech. Most of the tech is temporary.

2. Lack of Architecture / Design Skills: Lots of companies consider to have an "Architect" a dysfunctional thing. Because you have a team, the team can take care of the architecture, right? If you have a great talent pool maybe but in practice even with great talent pool there are still very poor decisions in a sense of design and architecture.  Because it requires thinking, compiling, and deliver code into production is great however it does not guarantee great design/architecture in the long run.

3. Lack of talent shape decisions: Management often gets afraid of engineers doing some activities, which makes a sociological effect of moving too many things to architecture/infrastructure and components that should not be there end up there because of the talent concentration in DevOps, Architecture and infrastructure teams.

4. There is no Turning back effect: Software allows change. Even poorly architected and poorly designed. However, it's very hard for management or business to pay the price of refactoring. For service industry projects often ends after you deliver them in production. For product companies, there is always a bigger priority so things get "final" and "fixed" easier than you think.

5. Knowledge gravitates towards people to companies: There is no such thing and "company" knowledge. There is only people's knowledge. IF you can retain and attract amazing talent with Architecture / Design skills the problems will keep happening over and over. Even worse because your company anti-buddies will fight "different" ideas for lots of the wrong reasons like Fear, Job Security, Ignorance, Power, etc. Some companies are worried about losing talent but they are no worries with the "debt people" they are keeping. Great people end up leaving, sooner or later with makes the problem keep happening.

The bottom line

In my previous blog post, I was talking about the Death of the microservices due to the rise of distributed monoliths. You might be wondering that this is 2 completely different subjects right? Wrong. It's all the same thing. IF we are doing wrong by moving all the code to shared-libs by side-effect creating a distributed-monolith and killing microservices. The solution cannot be "move all the things to Kubernetes or Platform" because we will have the same issue.

Lack of talent and education are shaping our bad decisions. Principles are more important then ever, however, if you dont have enough people who care about it and execute than well. You won't get a proper architecture and will fail by coupling one way or another.


Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java