https://shikhalev.org/2021/06/refactoring.html