https://medium.com/@xuannhat25/learn-to-model-object-and-behavior-with-go-series-an-example-with-dish-washing-part-1-8468b72404e8