What are Software design principles? Software design principles represent a set of guidelines that helps us to avoid having a bad design. Associated to Robert Martin who gathered them in “Agile Software Development: Principles, Patterns, and Practices". According to Robert Martin there are 3 important characteristics of a bad design that should be avoided: Rigidity: It is hard to change because every change affects too many other parts of the system. Fragility: When you make a change, unexpected parts of the system break. Immobility: It is hard to reuse in another application because it can't be disentangled from the current application. What does SOLID stands for? S: Single responsibility principle . O: Open close principle . L: Liskov's substitution principle. I: Interface segregation principle. D: Dependency inversion principle.