A guide to Create Smart, Reusable Softwares with SOLID Principles and Design Patterns + System Design, Scalability