Before the first release we should define which methods should be public for library users. For many methods it is enough to be `pub(crate)` All public methods should be documented