
Let's take a look at some visibility options that Kotlin provides. Even when a module is meant to be consumed by a single application, it's best to treat it as a fully independent piece of software - as it is. While this article is focused on libraries, the same is applicable to multi-module projects. Additionally, when changes are made to the actual implementations, it prevents making breaking changes by mistake. This will lead to more concise and easier to use APIs, indirectly, resulting in easier-to-maintain projects. It is often good practice minimizing the libraries' functionality that is accessible to consumers.

This means types, methods, properties, etc.

When designing libraries, one important aspect is the public API surface.
