Different designers will create designs that differ by at least a factor of 10 in the code volume produced. How do you invent simple, straightforward designs and avoid complex, error-prone designs? Understand the fundamental design principles that lead to high-quality designs requiring low implementation effort. Learn both Agile and traditional approaches to create great designs quickly and economically.

3-day seminar


"Most valuable: Architecture design discussions and basic design concepts. Several topics have me now seeking ways to apply in our smaller projects."  -- Chris Soriano, Shell

"Although I was already aware of most of the concepts, it helped me to put all into better perspective. Quality of material is very good."  -- Marco de Vroed, Shell

"Well done overall. I'm looking forward to applying the techniques in my daily work. Most valuable: the polymorphism and patterns sections."  -- Brian Drell, Bottle Rocket 

"I very much enjoyed this seminar! A lot of relevant material was presented!"  -- Roy Froid, @Road


What you'll learn: 

  • a thorough understanding of what design is and why it is so important to developing quality software on-time and on-budget
  • how to manage design complexity along with the fundamental design principles that lead to high-quality designs that have low implementation efforts
  • how to use multiple design paradigms to arrive at better designs
  • how to document designs using either traditional or agile approaches

Who Should Attend

Developers, Technical Leads, Designers, Architects

What is “Design”?

  • Design as an activity vs. a product
  • Design as a tool for communicating
  • Managing complexity with design
  • Characteristics of excellent designs

Fundamental Design Principles

  • Use abstraction
  • Encapsulate design decisions
  • Maximize cohesion; minimize coupling
  • Design to invariants
  • Avoid premature optimization
  • Beware of Fisher's Fundamental Theorem

Managing Design Complexity

  • Dimensions of design (interface, data, function)
  • Measures of design complexity in each dimension
  • Balancing local and global complexity

Design attributes: The “-ilities”

  • ISO/IEC 9126 Quality Model
  • Non-ISO/IEC 9126 “-ilities”
  • Managing conflicts among the “-ilities”

Architectural Design

  • Pipes & filters
  • Model-view-controller
  • Layered architectures
  • Service-oriented architectures
  • Blackboard

Design Paradigms

  • Aspect-oriented design
  • Object-oriented design
  • Structured design
  • Design patterns

Detailed Design

  • Refactoring
  • Semantics-preserving transformations
  • Program design languages
  • Error processing

Design Documentation

  • Desirable properties of design documentation
  • IEEE STD 1016-1998 Recommended Practice for Software Design Descriptions
  • Agile design documentation

Creativity in Design

  • Factors that contribute to excellent designs
  • Value of creativity
  • Research on software creativity
  • Fudd's Law
This seminar is offered publicly but is not scheduled at this time.

Steve Tockey

Steve Tockey is the Principal Consultant at Construx Software. During more than three and a half decades in the software industry, he has worked as a programmer, ...