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...