Typehinting all around for testability, as well as extensibility later on.