Common information about all trainings
If haven’t done so yet, please read the Trainings page that contains general information about all of my trainings . It contains common background, core ideas the main concepts that I use throughout all of my trainings. They are presented very differently in each training but share common code quality principles.
Goal of training
Learn to tackle with emergent design from long term point of view. Make architectures more extendable and readable by applying design patterns. Attendees will gain technical skills based on self live coding but also learn how organization of work within the team / company influences on final quality. They will gain ideas to experiment with adjustments to the way work is organized that can improve outcome quality.
The attendees will experience how design patterns might simplify but also de-simplify the design. How patterns solve the problems at current state of design but without continuous refactoring introduce next issues if the design is followed with copy-paste thoughts only. They will experience a threshold of complexity behind which usage of design patterns pays off.
More about training - might be TLDR 🙂
Patterns are everywhere around us. They are things which proved to be good and common. Why? Because of their values like effectiveness, reusability and beauty.
In 2015 Ralph Johnson (one of the authors of “Design Patterns : Elements of Reusable Software Architecture” book) during his talk “21 years of design patterns” told us “We could have done better, but I think we’ve done pretty well”.
Fortunately and for the sake of avoiding over-design the need to make use of some patterns is not visible at the beginning of development. Later, once the codebase grows we begin to miss given design and think like “if I only had a strategy / factory / state patterns here instead of the net of if-else / switch statements…”. On the other side It is good because otherwise we would end up with over engineering from the beginning and refactoring comes to the rescue in such cases.
This workshop this is a continuation of Effective Refactoring training and is based on an assumption that attendees can perform some initial clean-up of codebase. Such a clean-up is a must-have step as otherwise you will not be able to notice emerging design patterns out of the mess of your legacy code.
Plan of training
Core ideas
  • practice of refactoring into some design patterns
  • understand relation between outcome quality and and setup of development process
Day 1
Keynote : 5 Dysfunctions of a Team that impede refactoring
Refactorings that end up with below design patterns
  • Interpreter
  • Chain of Responsibility
  • Composite
  • Factory Method
  • Abstract Factory
  • State
Day 2
Keynote : 6 Sources of Influence that enable / impede refactorings
Refactorings that end up with below design patterns
  • Fluent Builder
  • Proxy
  • Template
  • Bridge
  • Command
  • Adapter
This is a very extensive training. Based on the experience the proposed approach is make it is as 2 days of 7-8 hours.
Target audience
Regular and senior developers definitely, expected to make use of this knowledge and promote refactoring within their teams. The requirement is some fluency in software development and using your favourite IDE.