I love all these articles which are wholly ignorant of how complex software is in reality and how such advice isn't necessarily good.
Sometimes decomposition results in problems at the other end of the scale such as communication performance, data duplication, extremely nested abstractions, messaging complexity, contract and API versioning hell etc.
Getting the sweet spot between monolithic coupled blobs and fragmented latent deathtraps is an art which can't be puked out in a blog post. It takes literally years of experience and some guesswork and testing and thinking.
Ultimately, lots of small programs are just as painful as a single large one if they have to talk to each other or do IO.
Sometimes decomposition results in problems at the other end of the scale such as communication performance, data duplication, extremely nested abstractions, messaging complexity, contract and API versioning hell etc.
Getting the sweet spot between monolithic coupled blobs and fragmented latent deathtraps is an art which can't be puked out in a blog post. It takes literally years of experience and some guesswork and testing and thinking.
Ultimately, lots of small programs are just as painful as a single large one if they have to talk to each other or do IO.