Experience of different approaches and patterns to gain a maintainable code, flexible architecture and rich, highly scalable applications