"At the software-architecture level, the complexity of a problem is reduced by dividing the system into subsystems."
"The goal of all software-design techniques is to break a complicated problem into simple pieces."
The steps in designing with objects are
- Identify the objects and their attributes (methods and data).
- Determine what can be done to each object.
- Determine what each object is allowed to do to other objects.
- Determine the parts of each object that will be visible to other objects - which parts will be public and which will be private.
- Define each object's public interface.
"When software-project surveys report causes of project failure, they rarely identify technical reasons as the primary causes of project failure."
"Projects fail most often because of poor requirements, poor planning, or poor management. But when projects do fail for reasons that are primarily technical, the reason is often uncontrolled complexity."