SOFTWARE DESIGN PRINCIPLES

2 days

Structure your code to make changing it to meet future requirements easier


Poorly designed software is a barrier to change, and therefore a blocker for agility.

On his course, you will learn to structure your code to make change easier, and get plenty of practice at refactoring bad code to make it simpler and more modular.

With an emphasis on the practical, this workshop is packed full of hands-on demonstrations (20%) and exercises (80%). Participants learn together with pair and mob programming.

Available Online & On-Site*

High-quality instructor-led training remotely for small teams and in-person for teams small and large

* Currently, all training is delivered remotely. Onsite training will resume in 2022

In This Workshop...

Learn to fix design problems without breaking the software

Learn the 4 principles of Simple Design, and when to trade off one principle against another:

* The code must work
* Code communicates intent
* Code is free of duplication (D.R.Y.)
* Code is as simple as we can make it (YAGNI)

Learn the 4 principles of Modular Design:

* Modules should do one job
* Modules should hide their inner workings
* Modules should have swappable dependencies
* Interfaces should be designed for clients

Learn how to measure modularity and make evidence-based design and refactoring decisions:

* Coupling & Cohesion
* Dependency Polymorphism

Learn how these 4 principles map to S.O.L.I.D. principles for object oriented design.

* Single Responsibility
* Open-Closed
* Liskov Substitution
* Interface Segregation
* Dependency Inversion

Learn the 2 fundamental design idioms that enable modular design:

* Dependency Injection
* Inversion of Control

...and how more modular code tends to be more testable and more portable

Learn how principles of Modular Design can be applied to component-based and service-oriented architectures, and how they map to the principles of Package Design:

* Release-Reuse Equivalency
* Common Closure
* Common Reuse
* Stable Dependencies
* Stable Abstractions

Learn how to measure modularity at multiple levels of code organisation and make evidence-based decisions on architecture and design:

* Package coupling & cohesion
* Martin Metrics for package dependency polymorphism

Learn how to analyse code and automatically detect design quality problems early, including:

* Complexity
* Code duplication
* Coupling
* Implementation dependencies

Learn how to reduce your code review ("pull request") bottleneck by automating code reviews, and incorporating them into your build pipeline.

Mobirise

Video Demo

Check out our free videos on software design principles

Languages

This course is available in C# and Java versions (JavaScript and Python coming soon)

Pricing

Prices are per person, and do not include travel expenses and VAT.

Pricing Band£
First 4-6 people (online)800
Next 7-12 people (online & onsite)550
Next 13-20 people (onsite only)300
Additional people on the day800

FAQ

This training workshop is aimed at C# and Java developers with at least one year's experience programming in their chosen language. It's often attended by technical leaders who wish to keep their code craft skills up-to-date, too.

You will need a suitable computer with your favourite C# or Java editor/IDE installed. On-site courses will require a room large enough to comfortably accomodate all participants, good, reliable Internet access (Wi-Fi), and a data projector or suitably large TV (with HDMI input) that will allow participants to read code from the back of the room. You will find a pen and paper handy.

Online training is available whereever you are, pretty much. (There are a few countries it's sadly not possible to do business with, of course.) Onsite training is available across the UK, Europe and many other regions. Ask us.

9/10 times, the trainer will be Codemanship founder and course author Jason Gorman. Jason has 38 years' programming experience and three decades of professional experience as a developer, technical lead and software architect. He's run hundreds of code craft training workshops over the last 20 years, and is a very experienced teacher and mentor. If, for any reason, Jason isn't available for your workshop, we'll inform you well in advance and offer you a trainer of similar industry seniority.

Yes. You will most definitely be writing code in this workshop. Business analysts, testers, project managers etc may find it useful to sit in and observe -at no charge - if they want to gain an understanding of Test-Driven Development and how it fits into the overall software development cycle, but this is 100% a hands-on workshop.

Since 2009, we've delivered training for developers working in C++, Swift, Go, Kotlin, Groovy, Ruby and many other languages. Ask us about customised courses.