http://fullstackprep.dev/articles/webd/csharp/how-to-write-clean-maintainable-code