docstrings and abstraction