I use this to do some practice myself, and I successfully applied some technique like factory pattern, usage of interface, and some advanced trick from git-amend's tutorials to do the programming, tho I often feel I am overengineering this stuff