Project Management Institute

Course Outlines

Jump to your Course Outline

    Design Patterns Thinking

    Day 1:

    • Examination of typical causes of project failure
    • Example of a failed design
    • Qualities of changeable code
    • Testability as a Trim-Tab in development
    • The principles and practices of professional development: The Strategy Pattern
    • Wisdom from our field

    Day 2:

    • Commonality-Variability Analysis (CVA)
    • The Template Method as an example of CVA
    • Using CVA to derive the Bridge Pattern
    • Patterns in context: Adapter and Façade Patterns
    • Re-solving the problem from Day 1 in a new, better way: The Flyweight Pattern
    • Emergence through encapsulation and patterns: Refactoring to the Open-Closed
    • Group design exercise, Part 1

    Day 3:

    • Group design exercise, Part 2
    • Aspects of flexibility
    • The Analysis Matrix and the Abstract Factory
    • Separation of use and creation
    • Encapsulating construction
    • The Singleton Pattern
    • The Proxy Pattern
    • The Decorator Pattern
    • The Chain of Responsibility Pattern

    Advanced Software Design

    Day 1:

    • The nature of software development
    • Discovering the “patterns in the problem”
    • Discussion of qualities, practices and principles, patterns, and the design paradigm
    • Encapsulation of varying behavior
    • Encapsulation of entities
    • Encapsulation of structure
    • Revisiting the Dependency Inversion and Liskov Substitution design principles

    Day 2:

    • Encapsulation of construction
    • Encapsulation of sequence and cardinality
    • Encapsulation of responsibility
    • Meta Pattern: Hiding the Composite Pattern with Iterator and Value Object Patterns and Forces
    • Meta Pattern: Optimizing RAD tools using Mediator, Observer, and Command
    • Encapsulation of relationships
    • Conclusions and recommendations for further study and support options

    Sustainable Test-Driven Development

    Day 1:

    • A brief overview of the motivations behind agility, and TDD specifically
    • Understanding what passing and failing tests actually mean
    • Review code qualities, and how they relate to testing and testability
    • The definition of a “good” test in TDD
    • Demonstration code: what tests to write, and what tests not to write
    • A unit-testing/TDD exercise

    Day 2:

    • The unit-testing/TDD exercise continues
    • Controlling dependencies in TDD
    • TDD as Test-Driven Design
    • Mock Objects, with an exercise
    • Code Smells, and Refactoring introduction

    Day 3:

    • Legacy code refactoring exercise 
    • Refactoring to the open-closed, just in time design
    • Address test architecture through test refactoring
    • Putting it all together: a final project

    Acceptance Test-Driven Development

    Day 1: 

    • Motivation for acceptance test-driven development (ATDD)
    • Defining and expressing business value
    • Product focus: Identifying stakeholders, context, and business process
    • Requirements analysis
    • Specification of behavior, and acceptance testing

    Day 2:

    • Specification of behavior, and acceptance testing, continued
    • Scenario breakdown techniques
    • Domain-specific languages
    • Placing ATDD in context
    • Automating ATDD (overview only)

    scott bain instructor

    Your Instructor: Scott Bain

    Scott Bain is a 40+year veteran in computer technology, with a background in development, engineering, and design. He has also designed and delivered training programs for major development companies all around the world, both in traditional classrooms and via distance learning. Scott teaches these courses: Design Patterns Thinking, Advanced Software Design, Sustainable Test-Driven Development, and Acceptance-Test-Driven Development.

    Scott has been a sought-after speaker at developer conferences such as JavaOne, OOPSLA, and SDWest. He is the author of "Emergent Design: The Evolutionary Nature of Professional Software Development" which won a Jolt Productivity Award. He is also one of the co-authors of “Essential Skills for the Agile Developer.” Since joining PMI in 2019, Scott has published “The TDD Companion” and “The Design Patterns Companion”, available through PMI.