remaking pso after read "The Clean Code" book and using TDD