There are also some more things to consider. If you code against interfaces, and using minimal core member set, and do all the rest API with extension functions, only providing core implementation in several classes, you mostly don’t have the “public” problem. You need to hide just implementing classes, not so much.