Back to training

Evolutionary Design Workshop

Secure your spot now

About

This 2-day workshop is aimed to improve the knowledge of experienced programmers on how to evolve a software system. It is a practical workshop, with hands-on coding exercises and discussions around design options.

Evolutionary Design is the practice of growing a system in a natural way, by adding the minimum amount of code to satisfy the business needs in an iterative and incremental approach. When done right, the code structure changes continuously to optimize for change, thus allowing a constant speed of development for longer periods of time.

Who should attend

  • Programmers with at least 3 years experience with Unit Testing and at least 1 year experience with Test Driven Development on a daily basis

Objectives

  • Use Patterns and Guidelines of system evolution in a natural way
  • Understand risks of taking smaller or bigger steps in the evolution of a system
  • Start a system for the current business needs while keeping in mind the possible future changes

Course Outline

  • Intro about Evolutionary Design
  • Roots of Design, Test Driven Development and Evolutionary Design
  • Design Focus: optimize for changeability
  • Schools of TDD: Classicist, Mockist. Is there a battle?
  • Exercise: Classicist TDD
  • Deductive vs Inductive Evolutionary Design
  • Exercise: Mockist TDD
  • Normalize, Optimize, Maximize Growth
  • Discussion: Patterns of evolving a software system
  • Taking Baby Steps – The Software Design Dimension
  • Exercise: Take only one design decision at a time
  • Entry point. From where to start evolving a system?
  • Exercise: choose several entry points and check the implementation difference
  • Four Elements of Simple Design
  • Exercise: Focus on refactoring
  • Feedback & Retrospective

Prerequisites

  • Very good knowledge of unit testing, refactoring
  • Experience with applying Software Design concepts, principles and guidelines
  • Practical knowledge of Test Driven Development
  • Laptop with installed Unit Testing Framework for your preferred language

Course Delivery

  • 40% hands-on coding
  • 30% discussing on code and understanding evolution options
  • 30% lectures
  • Continuous Feedback
  • Continuous Q&A

Practical details

  • Duration: 2 days
  • Training language: English / French / Romanian

 

Need a customized workshop? Contact us and we’ll adapt the content as required.