WIP Refactoring https://en.wikipedia.org/wiki/Rule_of_three_(computer_programming) Coding Guidelines Function interface should be small Functions should take only the arguments it uses. Its types should be relevant to its logic, without any extraneous information.