Software Craftsmanship

TDD Agile Arkitektur & Design

A great deal of the enthusiasm for agile development initially emerged and spread from software developers, however much of the current focus in agile circles has moved from the development side to the project management and organisational aspects side focusing product management, team structure and soft skills side.

Craftsmanship, which is closely related to the agile principles, has long been a quality and a metaphor applied to software development. More recently software craftsmanship has emerged as a more explicit movement and branding focused on reclaiming and re-emphasising the importance of the detail, of how to code and how to do it well.

What you will learn:

  • The details matter
  • The benefits of writing quality code
  • Test-driven development and writing good unit tests
  • Improving practices
  • Addressing technical debt and legacy code

This practical workshop involves discussion, examples, and hands-on sessions, following a coding dojo format with a focus on pair programming and test-driven development.


This course is aimed at software developers who would like to improve their coding skills. The hands-on sessions will involve pairing at a laptop and learning practical skills to help you write better code and act on emerging trends in your code.


This course has no set prerequisites and will benefit developers of all experience levels.


Software Qualities

Accidental versus essential complexity in software

The qualities of good code

The economic consequences of poor code

UX, PX and habitability

Code reviews as conversation and communication

Software Development as Learning

Knowledge work versus production work

Agile development without the hype

Empirical processes


Dreyfus model of skills acquisition

The IT alignment trap

Skill, immersion and deliberate practice

Coding katas

Good Unit Tests

Working software

Qualities of good unit tests

Metrics and Goodhart's law

Tests as communication and explanation


Other testing approaches

Test cohesion and coupling

Feedback from tests

Reasoning, Experimentation and Knowability

Patterns thinking

The rule of three

Five orders of ignorance

Risk versus business value

The limits of estimation

Collective wisdom versus group think

Teams, mobs and pairs

Design Practices

Coupling and cohesion

Roles and responsibilities

When is SOLID not SOLID?

When should DRY be WET?


The synchronisation quadrant

Worse Is Better

Coding Style

From naming to indentation

The effects of style

Style as a service

Coding guideline dos and don'ts

Technical Debt

Code smells

The technical debt quadrant

Managing technical debt

Reasoning about trends in code

The meaning of legacy code



09:00 - 16:15


Software Qualities

Software Development as Learning

Good Unit Tests

Reasoning, Experimentation and Knowability

Design Practices

Coding Style

Technical Debt