The skills a software developer needs to truly be excellent include both technical and behavioural practices. How can you work harmoniously with teammates, manage technical debt, keep code easy to change, reduce the number of defects produced, and reliably get work done?


In this highly interactive, online workshop, you will learn how to collaborate more effectively, work more safely, improve your craft and deliver valuable software sooner.

Based on a mix of tried-and-true practices from eXtreme Programming, Code Craft, Continuous Integration and Evolutionary Design, this workshop will help you rediscover the joy of software development and experience the peace that comes from working safely.


Learning Outcomes:

  • An attitude of professional craftsmanship.
  • How to tell the difference between good and bad code.
  • How to create write good code and transform bad code into good code.
  • How to create good names, good functions, good objects, and good classes.
  • How to format code for maximum readability.
  • Identify poorly designed code by using our elaborate code smell vocabulary.
  • Learn various automated refactoring techniques and strategies to carefully clean the identified code smells.
  • Practice key techniques to break coupling between classes and micro-test each component independently.
  • Incrementally transform complex and difficult classes into readable, well-structured, and well-designed code, while keeping them running at all times


This program is a two-day workshop. Each course day starts at 9am and ends at 6pm, and includes a 30-minute lunch break and an afternoon break.

The following topics will be discussed.


Delivery lifecycle in an Agile project

  • Clean Code 
    • There Will Be Code
    • Bad Code
    • The Total Cost of Owning a Mess
    • The Grand Redesign in the Sky
    • What is Clean Code?
    • The Boy Scout Rule
    • Kent’s 4 Rules for Simple Design
  • Why TDD?
    • The Three Laws of TDD.
    • Understanding the Costs and Benefits.
  • S.O.L.I.D The Principles of TEST design
    • How the principles of OO are used to design good tests


Test Driven Development

  • Introduction to TDD
  • Reasons to do TDD
  • Cost of doing it
  • Cost of not doing it 
  • Test First Vs Test Last
  • Importance of Automated tests
  • The two benefits of TDD—rapid feedback and design influence 
  • What’s really needed to be effective at TDD?
  • Clean Tests
    • Test Smells
    • Multiple Logical Asserts
    • Accidental Complexity
    • Too Slow
    • Scope Too Wide
    • Slang
    • Cleaning Tests
    • Composed Asserts
    • Composed Results
  • Exercises
    • Initial Setup
    • Coverage
    • Critiquing some good and bad tests
    • Cleaning Tests
  • Coding Dojo
    • Group Exercise

Executable Specification (ATDD/BDD)

  • What’s BDD?
  • Relationship between TDD and BDD 
  • Tools for BDD 
  • Demo of BDD frameworks (Cucumber, FitNesse, SpecFlow, Jasmine)
  • Exercises
    • Crafting acceptance criteria for user stories
    • Writing executable examples for each criterion


Course Prerequisites

  • Required: some understanding of OO concepts and an OO language
  • Highly Recommended: basic understanding of the life-cycle of software projects


Target Audience

  • Sr. Object-Oriented Programmers
  • Architects
  • Designers
  • Technical Managers
  • Testers
  • TypeWorkshop
  • Period 2 days
  • Maximum number of participants:20
  • Level:Awareness
  • Language:
  • Lunch included:No
  • Exam:No
  • Incompany:Yes
  • Payment methods:Invoice, iDEAL, CreditCard