I have seem a lot people thinking about how can increase the software availability, an Yes!, you can increase the memory and CPU, but it's the best way ?
If you think No!, you are right isn't the best way, so here is when I start to talk about the Loose Coupling concept. You just need to follow one rule :
- As application complexity increases, a desirable attribute of the system can be broken into small part, loosely coupled.
What I mean is the system should be independent, we always and always should think to reduce dependencies. Just in this way when a change fails or just a deprecated library fails in the system it won't fail in cascade to other components.
Just one part of the system will down and you can focus your energy just in the issue.
I know sometimes is easier just to add another module to your application.
Here some of the most common reasons.
- One module more, it's small.
- They won't use that module frequently.
- I have to deliver it quickly.
- I don't know how to do it.
- It's complex, new server, new connection, new unit test...
- And the list can go on...
That is a serious mistake, Fatal mistake. And so? the system fails and who is the guilty?. The customer for having an increasing the system? or just you for having excused yourself?
You just need to keep in mind some concepts, ServerLess, Micro-services, Coupling, Cohesion.
Believe me, you will sleep better.