https://www.ibuildings.nl/blog/2016/01/programming-guidelines-part-1-reducing-complexity