Every large project can, and should, be broken down into small isolated projects that are developed and maintained independently.
Furthermore, I think that writing software using monolithic design is bad practice. It creates coupling within the project, and it makes it harder to reuse code. It's harder to onboard new people, and so on. However, the biggest problem is that it creates a lot of communication overhead for the team. The more people you have working directly with each other, the more emails, meetings, and other kind of communication you end up incurring.
Splitting things up into small components that are each maintained by separate teams of 5~6 people is a far more productive way to maintain large software projects than to create monoliths.
Using static typing as a crutch to work around poor project architecture doesn't actually solve the problem. Also, there is a question whether static typing is what contributes to projects being written in a monolithic style in the first place. I often see this to be the case for projects written in statically typed languages, while ones written in dynamic ones tend to be broken up much more aggressively from the start.
Furthermore, I think that writing software using monolithic design is bad practice. It creates coupling within the project, and it makes it harder to reuse code. It's harder to onboard new people, and so on. However, the biggest problem is that it creates a lot of communication overhead for the team. The more people you have working directly with each other, the more emails, meetings, and other kind of communication you end up incurring.
Splitting things up into small components that are each maintained by separate teams of 5~6 people is a far more productive way to maintain large software projects than to create monoliths.