Unfortunately, C# does not have anything like C++’s friend. Hence, for instance, in order to solve something like the classic matrix/vector multiplication example (where efficiency can be gained by befriending matrix and vector, such that each class has access to the private members of the other), I have to define the class members internal.
Now I know myself, and improper encapsulation will lead to messy code, sooner or later. Hence I would like to keep the internal universe as small as possible.
This will lead to very small assemblies.
Does that have any drawbacks, or doesn’t that matter?
Answer to question in the title: how small assembly should be?
There is no particular requirements or recommendations on size of assemblies*.
*Insane number of assemblies (probably in thousands) in theory may slow down loading due to need to lookup information in more places.
When picking size consider: