Oskar Dudycz

Pragmatic about programming

Sociological aspects of Microservices

2021-01-20 oskar dudyczMicroservices

cover

Last week, I started writing about the topic of cutting systems into microservices (read more here). I was sceptical about the frequent technical motivations associated with them. I have listed elements that, in my opinion, justify dividing our system into smaller pieces. I have distinguished these as:

  • the difference in traffic in particular parts of the application (e.g. the administration module does not need as many resources as the search module),
  • the ability to dynamically increase the system capacity with horizontal scaling (e.g. by adding more instances of the sales service on the Black Friday),
  • multi tenancy, i.e. when we do not want the operations made by one client to affect operations of another client,
  • multi-region: when we have a global system, and we want it to work equally fast, e.g. in the USA as in Europe.

Today I would like to put the cat among the pigeons again and talk about the sociological sphere of using microservices. Quite often, we make our decisions not only based on technical or business requirements. The same thing happens for cutting our systems into microservices. Let’s check what the most common reasonings are:

  1. CV Driven Development, Hype Oriented Programming, Hipster As A Service. These are patterns or doctrines that tell us to use the latest technologies, so we take the most fashionable, trendy, jazzy tools that we can get, usually blindly. I have participated in projects where I joked that we only use libraries with no more than two contributors because we want to discover young talents. I also had a visionary client who did not want to use popular and proven technologies. Although he tried to do an ordinary ETL process, he was always searching for something new instead of using, e.g. MSSQL Integration Services or Reporting Services. He wanted to be an “explorer” and be one of the latest blockbuster solution’s first adopters. I ended up rewriting the solution 3-4 times from scratch using different, weird tools. Quite often we choose technology to have “fun”. There is nothing wrong with that, as long as it coincides with the client’s “fun”. Unfortunately, too often, these two ways are mutually exclusive. That can be a recipe for disaster. We forget that our job is to create systems that just work. They’re supposed to bring in money for our customer. If our decisions make our work enjoyable, then that’s all the better for us. But “first things first”, the most important should be customer satisfaction, not our pleasure.

  2. The recruitment aspect. In our industry, everyone wants to do the latest things, using the latest technologies and the most popular frameworks. It’s the same with microservices. I was involved a few times in conversations with others saying: “Well, I think that we do not need microservices, but without using them, I will not persuade people to work in my company”. Cobol was cool once, now finding a living programmer to code in this might be challenging. But that’s a different story. In my opinion, we should consider whether we, as programmers, are not exaggerating the lust for newer technologies. I am not talking about minimalism and looking for stagnation, but a pragmatic and common-sense approach that we often lack. Do we have to try everything? Maybe we should focus more on delivering business value than trying to use all technologies on earth?

  3. Independence and leadership. When we discuss the possibility of cutting the system into independent modules we’re thinking “this is my moment!“. Now we can finally have our own modules. Now we can separate ourselves from the people we don’t like. We can focus on our work and tell the others “screw you!“. Of course, autonomy is a significant value. We should aim to have self-organising teams. However, with great power comes great responsibility. We have to remember about Conway’s Law:

    “Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.”

    The mere fact that we have independent microservices will not make them the right solution. If the teams cannot get along, so will the microservices they have created. I coined the pattern that I called the “Negotiator Pattern.”; we have two systems that can’t get along, so now we have to add a third one to coordinate them. After that, usually, you end up having three systems that don’t talk to each other. The same applies to development teams. You can read more about that in my Architect Manifesto.

We also have to remember about “Cognitive Load”. It relates to the amount of information that you can process at one time. In other words, how complex is what you’re trying to learn. The higher it is, the more it costs and increases the risk of project failure. See more in the excellent presentation by Manuel Pais and Matthew Skeleton:

To sum up, we’re usually focusing on the technical reasoning of microservices. We also have to consider sociological aspects, as they can be much more dangerous than making a technical mistake.

Thoughts?

Oskar

👋 If you found this article helpful and want to get notification about the next one, subscribe to Architecture Weekly.

✉️ Join over 11500 subscribers, get the best resources to boost your skills, and stay updated with Software Architecture trends!

Loading...
Event-Driven by Oskar Dudycz

cover

Through my window, I see the result of good plans but poor execution. Opposite my flat, there is a partially completed construction place. Buildings were supposed to be eye-catching Mediterranean style apartments. Delivery date? Two years ago. Actual? More and more unknown.

Some time ago, I heard that using Event Sourcing makes creating Event-Driven Architecture easier. The arguments were correct, that if we’re already publishing events to trigger business workflows, then at some point, we may want to also store events to not lose information. Agreed. However, I also heard that keeping the state as events will simplify things. We’ll have a source of truth with a record of the system behaviour. This will allow, e.g. to confront the results of the operations with the recorded state. I’d agree with that, with one distinction. It’s easier as long as you already know Event Sourcing.

Many people in the DDD community claim that the essential is to properly break down the system into autonomous parts called bounded contexts. Once we have it, the rest is secondary and will sort itself out. For sure.

Many seasoned programmers speak similarly about new technologies. They claim that they can translate past experience into new technologies. That’s true that by analogy, they can catch the big picture quicker. But isn’t it a bold assumption to say that Win.Forms specialist will learn Angular quickly?

The end result may differ a lot from the initial ideas. I saw the plan of those buildings next to me. Now I can see the effects of the execution. Or actually, the lack.

I believe that we should carefully acknowledge not only the point of view of our authorities but also their seating point. If we want to find out how to form a wall, do we ask an architect or a foreman? An architect may know the theory, but the practice is what we’re looking for. On the other hand, if you want to know where to put the wall, you prefer the architect to do measurements. At least if you don’t want to have the roof falling to your head.

After I had torn a ligament in my knee, I went to two qualified orthopedists. One said I should have surgery and do a reconstruction. The second stated that there is no need for that; rehabilitation should be enough. Guess which one had a specialization in surgery and which in rehabilitation?

People usually give us advice from the point where they’re currently standing. They are entitled to a biased view. An architect who rarely does programming will tend to downplay the value of implementation and tactical patterns. Midlevel developers will focus on technicalities instead of the global system impact. The team manager or consultant will emphasize the importance of soft skills (or esoteric techniques known only to them).

The truth is that we need all of them. The excellent plan will fall on the bad execution. The best execution for the wrong case will be just a waste of time. We should carefully evaluate the advice considering what we need and what an expert can give us.

Therefore, when we’re reading an article, watching a talk, let’s also pay attention to the place where the person is standing. The perspective from there may be much different from where we are right now. That can be good, as it may push us in the right direction. But it may also be misleading, as we accidentally take biases of this person without understanding the tradeoffs. Personally, I prefer to follow not only people from pedestal but also those that are closer to my position. A bit further in the journey, but not too far. That helps me to calibrate my view as those people are more relative to my daily struggles.

Polish historical leader Józef Piłsudzki reportedly used to say: “Right is like an ass, everyone has its own”.

Cheers!

Oskar