Photo by Joseph Barrientos on Unsplash

Is microservices always good?

Blindly separating into small services and believe that will provide the code to be loosely coupled and easier maintained and deployed is a delusion.

It might give you delusion that it brings those benefits at first, but when business requirements changes, you might see the changes will cross cut the services as they are actually just indirectly tightly coupled.

What actually matter?

The well designed boundaries and coordination between etc. services with the hard work to deal with current business requirements and also prepare for the future by considering the cost between creating boundary vs delay decision (since over-engineering can cost more)

These considerations and leverages should be the factors driving architects to making decision on the architectural styles, principle and decisions.



Photo by Siyuan on Unsplash

What is software architecture?

Software architecture consists of four parts:

  • System structure (architecture styles): like monolithic or microservices.
  • Architecture characteristics: Including availability, reliability, testability, scalability, fault tolerance… etc.
  • Architecture decisions: The rules (disciplines) defining how the system should be constructed, example will be which layers can access which layer. (Variance model should be created to assess cases that can not follow the rules)
  • Design Principles: Soft guidlines created for the team to decide what to do in certain scenarios, as the hard diciplines (decisions) can not be defined for every cases. Example of a principle (guidline) might be dev team should leverage asynchronous messaging between services.



Photo by Kelly Sikkema on Unsplash


Interface Segregation Principle (ISP) suggests that the client (dependent client modules) classes should not be able to access the methods / states that the class that they are depending on (composition / inheritance).

Usually this happens when we design a class / interface with a big scope (class explosion) and the changes of that class will cause the client (dependent client modules) classes needed to be re-deployed and re-compiled.