Sunday, December 20, 2020

Microservices - Why?

 


I read an article with the basic theme:

“Microservices was a good idea taken too far and applied too bluntly."

Link: Microservices — architecture nihilism in minimalism's clothes

I agree with a lot of what is in there as I have seen the complications this design pattern leads to and often wondered if it was worth it. 

This general behavior matches a familiar one that happens time and again. A similar things happened (is still happening?) with NoSQL and you could say the same thing:

 “NoSQL was a good idea taken too far and applied too bluntly."

Ditto for the semi-recent trend of "Single Page Webapps". XML was another one.  The list is broad, deep and goes further back than my time in the field.

Why is there the constant trend in software development of chasing the latest idea and overusing it until it collapses on itself? Haven't we seen this pattern enough to not repeat our mistakes? Ultimately, this is an immature behavior, but what is the source of that immaturity?  Is it simply because the field only goes back a few decades? Is it that the field is dominated by a younger and less experienced group of people?

Software engineers are initially drawn to the discovery aspect of technology, so they naturally gravitate toward the "new".  Human nature leans toward doing the familiar, often ignoring the "why". There is also the time required to learn a new technology that is a driver for getting the most out of that investment. Maybe these combine so that once the new thing is learned, it tends to propagate that new pattern and/or technology without asking "why".

Maybe it is an education problem.  Are we giving students these lessons and warnings about them in their Software Engineering classes? Wouldn't it be helpful if every student coming out of school knew about this danger and could recognize it as quickly as they can regurgitate the big-oh complexity of a bubble sort?

There's also a class culture in software where the "coolness" factor is related to the "newness" factor.  Many engineers look down upon the use of older technologies, ridiculing their use and sometimes shaming people into using new tech.  Who wants to be coding in PHP and be socially outcast from all the cool kids?  This behavior is especially troubling because it promotes the idea that the technology is more important than the problem it is meant to solve.

As an engineering leader, it is important to combat these less-than-rational reasons for adopting a technology. I think I am often viewed as a curmudgeon about adopting new technology, but asking "why" is the responsible thing to do.

 

No comments: