Add some more documentation and thought process