http://www.javacodegeeks.com/2012/05/why-developers-never-use-state-machines.html