GRASP Patterns
* Information Expert - assign a responsibility to the class that has the information necessary to complete the responsibility
* Controller - assign the responsibility for handling a system message to a class that represents the overall system or represents a use case
* Creator - assign the responsibility to create A to B if B aggregates, contains or closely uses A
* Low Coupling - assign a responsibility so that coupling remains low
* High Cohesion - assign a responsibility so that cohesion remains high
* Polymorphism - use when related behaviors vary by type
* Indirection - assign a responsibility to an intermediate object to mediate between components
* Pure Fabrication - assign a highly cohesive set of responsibilities to a class that does not represent a domain concept
* Protected Variations - identify points of predicted variation and create a stable interface around them
I originally thought it was a shame that the principles of high cohesion and low coupling had to be explicitly listed as design patterns. I suppose that at some point Mr. Larman had to direct a student to apply what he had learned to the benefit of his code.
7 Wastes of Software Development
Mary and Tom Poppendieck identified these seven wastes:
* Partially Done Work
* Extra Features
* Relearning
* Handoffs
* Delays
* Task Switching
* Defects
Does it all boil down to "Think Globally, Act Locally"?