Avoiding Over-Engineering - Applying Design Patterns in LLD | OneNoughtOne