
Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)

Real software is incredibly cheap to build, and getting cheaper all the time as computers get faster. • Real software is incredibly expensive to design. This is true because software is incredibly complex and because practically all the steps of a software project are part of the design process.
Robert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
As noted above—engineering is more about how you do the process than it is about what the final product looks like.
Robert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
On any software project of typical size, problems like these are guaranteed to come up. Despite all attempts to prevent it, important details will be overlooked. This is the difference between craft and engineering. Experience can lead us in the right direction. This is craft. Experience will only take us so far into uncharted territory. Then we mu
... See moreRobert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
It would be nice if high level software design could be a more rigorous engineering process, but the real world of software systems is not rigorous. Software is too complex and it depends on too many other things. Maybe some hardware does not work quite the way the designers thought it did, or a library routine has an undocumented restriction. Thes
... See moreRobert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
The software design is not complete until it has been coded and tested. Testing is a fundamental part of the design validation and refinement process.
Robert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
In order to deal with the complexity, software is designed in layers.
Robert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
There is no hierarchy of importance among the different aspects of a software design. An incorrect design at the lowest module level can be as fatal as a mistake at the highest level. A software design must be complete and correct in all its aspects, or all software builds based on the design will be erroneous.
Robert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
The overwhelming problem with software development is that everything is part of the design process. Coding is design, testing and debugging are part of design,
Robert C. Martin • Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)
No one expects an engineer to create a perfect design the first time. Even if she does, it must still be put through the refinement process just to prove that it was perfect.