SOLID Principles for Better Software Design