Course Description
Have you ever experienced that moment where your heart sinks at the words “We just want you to make this one, small and trivial change…”.
If you build software, change is an inevitable force in your life and your ability to react to change can be the difference between a killer product and a last-to-the-post flop.
Given that change and speed of software evolution is so critical, why is it that so much software becomes a millstone around yourself and your team’s next, leading to you dreading the next inevitable change that’s needed? For over 10 years, focus has been consistently applied to helping us work in a more agile and adaptable fashion, with far less focus on how to create software that thrives in an agile environment.
This hands-on, extremely practical course teaches you the latest techniques you can apply today to your architecture, design and code to build software that doesn’t fear change. This course will teach you how to build software that adapts as fast as your business and requirements do.
Course Objectives
In this course you will learn to:
<ul
</ul
Who Should Attend?
Any developer with some experience of networking, and wants to build software that adapts as fast as their business does.
Course Content
DAY 1 – ARCHITECTURE & DESIGN FOR SIMPLICITY AND ANTIFRAGILITY:
<ul
</ul
DAY 2 – IMPLEMENTING ANTIFRAGILE SOFTWARE WITH SIMPLE COMPONENTS, EVENTS & MICROSERVICES
<ul
</ul
DAY 3 – DEPLOYING, RUNNING, TESTING & MANAGING ANTIFRAGILE SOFTWARE WITH MICROSERVICES
<ul
<liBuilding, Deploying and Managing Effective Unix-style Microservice</li
<liPipelines</li
</ul
TOPICS
Understanding Change
o Pushing the Elephant
o Real Agility requires Agile Software too.
o Maximising Human Comprehension
o Principle of Least Surprise
o Overproduction
Understanding Complexity
o A continuum
o Organise, Reduce, Encapsulate
o Doing the Simplest Thing
Adaptable Architecture
o Organising for Clarity and Change
o Clean Architecture
o The Hexagonal View of your Application
o The Life Preserver Pattern and Tool
Adaptable Design
o Designing Simple Components
o Reducing to the functionality that matters
o Organising, Reducing and Hiding Side-Effects
o Designing system, module and component APIs that embrace change
o Types of Coupling
o How and When to Overcome Coupling
o Interactions and Composition over Inheritance
o Polymorphism a la carte
o Characteristics of Supple Design
o Pipes, Filters and Events patterns
Adaptable Code – Functional Programming A La Carte, for Humans
o Components as Functions
o Maximising Unit Testing by Extracting Side Effects
o Reducing Ordering Complexity
o De-coupling through Events and CQRS
o Inspect what’s happening at runtime with Complex Event Processing
o Implicit and Explicit data schema
o When and How to implement Postel’s Law
o Why and How Monads help
o Working with data documents (Maps/Lists) with Combinator Functions
o Options and Protocols
o Factories and Avoiding Coupling through Construction and Configuration
o How to choose between implementation approaches: Libraries, Frameworks, Languages