"Patterns provide software designers with a common vocabulary. As designers, we use patterns not only to help us leverage and duplicate successful designs, but also to help us convey ideas to developers using a common vocabulary and format."
Deepak Alur, Dan Malks, John Crupi, Core J2EE Patterns: Best Practices and Design Strategies , 2003


"Our primary tool for design is abstraction. It allows us to effectively use encapsulation, inheritance, collaboration, and other object-oriented techniques."
Rebecca Wirfs-Brock, Alan McKean, Object Design: Roles, Responsibilities, and Collaborations, 2002


"One thing expert designers know not to do is solve every problem from first principles. Rather, they reuse solutions that have worked for them in the past. When they find a good solution, they use it again and again. Such experience is what makes them experts. Consequently, you'll find recurring patterns of classes and communicating objects in many object-oriented systems."
Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides , Design Patterns, 1994


"... he [Ralph Johnson] brought out the point that architecture is a subjective thing. A shared understanding of a system's design by the expert developers on a project. Commonly this shared understanding is in the form of the major components of the system and how they interact. It's also about decisions,..."
Martin Fowler, Patterns of Enterprise Application Architecture, 2003


"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
Martin Fowler, Refactoring, 1999


"We all want our software systems to be fast, reliable, easy to use, readable, modular, structured and so on. But these adjectives describe two different sorts of qualities. On one side, we are considering such qualities as speed or ease of use, whose presence or absence in a software product may be detected by its users. These properties may be called external quality factors. É In the end, only the external factors matter. ... But the key to achieving these external factors is in the internal ones..."
Betrand Meyer, Object-Oriented Software Construction, 2000


"... the most significant complexity of many applications is not technical. It is in the domain itself, the activity or business of the user. When this domain is not handled in the design, it won't matter that the infrastructural technology is well conceived. A successful design must systematically deal with this central aspect of the software."
Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software, 2003


"Object modeling addresses the 'what' of the business; its concern is only with what is to be built, never why or how. Prior to the object modeling session, a good object architect inquires about the 'why' questions, and raises a red flag if no one at the client site knows the answers. Clients not clear on their strategy are not ready to discuss what they want to build."
Jill Nicola, Mark Mayfield, Mike Abney, Streamlined Object Modeling: Patterns, Rules, and Implementation, 2001


"Just as the transition from black-and-white photography to color is so profound, the transition from black-and-white modeling to color is an awesome one."
Coad, Lefebvre, De Luca, Java Modeling In Color With UML, 1999


place
Analysis and Design in Software Development
Notes about analysis and design patterns, strategies, and techniques for software development.

Good software design mercilessly strips away unnecessary complexity and hides necessary complexity behind simpler facades, encapsulating it within the most appropriate abstractions.

Critical to doing this is an intimate understanding of the domain you are working within, the inevitable trade-offs of the design options available, and a passionate intolerance of low quality work, regardless of whether we do all the analysis and design within dedicated phases of a traditional, waterfall-style process or iteratively as part of a modern agile approach.

Modeling in Colour
One of the very best techniques for initial analysis of the problem domain of an enterprise software system is Peter Coad's somewhat simplistically-named 'modeling in color'. The culmination of a number of years work by Peter Coad and colleagues, modeling in colour is a set of concepts, strategies and patterns for fast, pragmatic, problem domain analysis for both agile and traditional development teams. It helps pick better domain classes quicker and give your software a more resilient, extensible foundation; far less serious refactoring needed later.

All teams working in .Net, Java or Cocoa have some sort of object model at the heart of their software. Modeling in colour helps ensure it is a solid, flexible one from day one. Use it with Scrum to produce a better backlog earlier, or as an integral part of a more Feature-Driven Development (FDD)-style project.
Read more...

The Unified Modeling Language (UML)
For better or for worse, the Unified Modeling Language has become the de facto graphical notation for modeling and communicating software analysis and design. These notes on UML include a five-part introduction to UML for Java developers, some observations about UML 2.x, and some quick summaries of the notation.
Read more...

Java/J2EE Design
Notes on various aspects of designing applications, components or systems using the standard and enterprise editions of Java. Although details may differ, the design principles are often just as applicable for .Net languages such as C# and VB.Net and developing in Objective C and Cocoa.
Read more...

Miscellaneous Analysis and Design Topics
A set of introductory notes and notes on topics that do not fit naturally into any of the other categories above. Topics range from object modeling to list management and layered architectures
Read more...

Simple designs don't mean less work, they mean more thinking.
Jim Highsmith, InformIT Article, 2002

Four Logical Layers
One of the most common initial strategies for selecting the types of object needed in a software system, service or component is to define a set of logical layers into which we can place candidate classes. There are various layering schemes but they are generally variations of a similar theme.
Read the full article...

Object Modelling: Why would I waste time doing this?
All software teams writing in programming languages like Java and the .Net family of languages have an underlying object model represented by the classes of objects they define in their source code. Therefore, it is not a question of whether to build an object model or not...
Read the full article...

Object Modeling in Colour
Object-oriented analysis with class archetypes: 'Modeling in Color' is a set of patterns and strategies that can help produce better object-oriented analysis and design models.
Read the full article...

Model Archetypes
'Modeling in Color' is a set of patterns and strategies that can help produce better object-oriented analysis and design models...
Read the full article...