Student of Systems
@mathiasverraes@mastodon.social @mathiasverraes
EventSourcing Testing Patterns Article
From Music to Languages and Models (DevJourney Podcast) Podcast Interview by Tim Bourguignon on the Software Developers Journey Podcast
Parser Combinators (Full Stack Europe) Presentation Improvised presentation on building a parser using pure functional programming in PHP.
Bounded Contexts: Manage the Understandability of Your Systems (DDD Australia) Presentation Understandability boundaries are separations that look at how concepts in our system are understood together (or autonomously).
Software Design for Startups and Scaleups Podcast Interview by Tom Klaasen, Software Captains founder
Critically Engaging With Models (DDD Europe Keynote) Presentation Our worldviews are grown from other people’s models. How do we control what models we let in? — by Rebecca Wirfs-Brock and Mathias Verraes
Design and Reality (Leanpub Podcast) Podcast Interview by Len Epp, Leanpub co-founder
Critically Engaging With Models Article Our worldviews are grown from other people’s models. How do we control what models we let in? — by Rebecca Wirfs-Brock and Mathias Verraes
Conway’s Law Doesn’t Apply to Rigid Designs Article The impact of the Inverse Conway Manoeuvre is constrained by the flexibility of the system. A reorganisation can’t fix a broken design.
Domain-Driven Design Applied Podcast Podcast discussion with Alex Bolboacă
Eventsourcing Patterns: Multi-temporal Events Article Within a Domain Event, use separate timestamps to distinguish when the event occurred and when it was captured.
Loss Aversion Heuristics Podcast Acknowledge your loss aversion bias to identify solutions that incur a loss
Design & Reality (VirtualDDD presentation) Presentation Modelling as the opportunity to create novel concepts.
Models and Metaphors Article When a complex technical domain isn’t easily captured in a model, look for metaphors that bring clarity. — by Mathias Verraes and Rebecca Wirfs-Brock
Bounded Context Podcast Podcast Conversation with Ryan Shriver
What is Domain-Driven Design (DDD) Article A definition of DDD as a software design discipline
Design and Reality Article Reframing the problem through design. — by Mathias Verraes and Rebecca Wirfs-Brock
Splitting a Domain Across Multiple Bounded Contexts Article How designing for business opportunities and the rate of change may give you better contexts. — by Mathias Verraes and Rebecca Wirfs-Brock
The “It's Just Like...” Heuristic Article Why feeling that you understand a new idea, is a sign that you didn't.
Simple Models, Scaffolding, Enabling Constraints Article Simple models are more wrong than complex ones, but they can be useful to detect problems, and to kickstart more suitable models.
Tensions when Designing Evolvable Bounded Contexts Article Bounded Contexts and their interfaces are governed by fundamental tensions that affect our design
The Legacy Mirror Heuristic Article Evaluate a novel idea by swapping the old and the new idea in time.
The Wall of Technical Debt Article A method for making technical debt visible and negotiable.
Eventsourcing: State from Events or Events as State? Article Comparison of two common interpretations of eventsourcing; and proposing a definition.
Patterns Are Not Defined by Their Implementation Article Design Patterns express a problem in a context with a reusable solution.
Temporal Modelling Presentation How reasoning with time helps you model software better than structure.
Emergent Contexts through Refinement Article Refine a model and its language until opportunities for better Bounded Contexts emerge.
Messaging Patterns: Natural Language Message Names Article Embed more meaning in messages by using verbs.
Eventsourcing Patterns: Migration Events in a Ghost Context Article Explicitly conform to the legacy component's model in an eventsourcing migration.
Eventsourcing Patterns: Decision Tracking Article Store the outcome of a decision to guard against rule changes.
Messaging Patterns: Throttling Article Only keep one event per time unit from a high frequency stream.
Messaging Patterns: Ephemeral Events Article An event's lifetime lasts until the next event.
Messaging Patterns: Change Detection Events Article Listen to a stream of events and produce a new event when a value changes.
DDD and Messaging Architectures Article An overview of my different series on patterns in distributed systems.
Eventsourcing Patterns: Crypto-Shredding Article Encrypt sensitive information in an event and delete the key.
Eventsourcing Patterns: Forgettable Payloads Article Store the sensitive payload of an event in a separate store to control access and removal.
Patterns for Decoupling in Distributed Systems: Segregated Event Layers Article Explicitly segregate a Bounded Context's events in visibility layers, with their own language.
Patterns for Decoupling in Distributed Systems: Fat Event Article Add redundant information to a Domain Event to reduce complexity in the consumer.
Patterns for Decoupling in Distributed Systems: Explicit Public Events Article Mark a small subset of events as public, keep the rest private by default.
Patterns for Decoupling in Distributed Systems: Passage of Time Event Article Replace cron jobs and scheduled commands, with an agnostic event to indicate the passage of time.
Patterns for Decoupling in Distributed Systems: Summary Event Article Instead of emitting a stream of Domain Events, emit a single Summary.
Patterns for Decoupling in Distributed Systems: Domain Query Article Replace Free Queries with Domain Queries to decouple from knowledge of the server's internals.
Patterns for Decoupling in Distributed Systems: Completeness Guarantee Article Design the set of Domain Events from a producer so that they can be used to rebuild the producer's state.
Design Heuristics Presentation Distilling your design heuristics using practical examples.
Emergent Boundaries Presentation
Messages Over Structure Presentation
On Being Explicit Presentation Software design stories
Designed Stickiness Presentation How sticky metaphors can communicate better software models.
Lightning Talks Presentation Five minute lightning talks, to practice public speaking.
The Repair/Replace Heuristic for Legacy Software Article How understanding the history of systems aids strategic decisions
Property-based testing Presentation
Code Reviews and Blame Culture Article A common belief is that gated reviews lead to blaming individuals. The opposite can be true.
Type Safety and Money Article All good design is redesign.
Towards Modelling Processes Presentation A temporal view of business problems leads to deeper models.
Context Mapping: Life Expectancy Article When Context Mapping a complex environment, indicate the Life Expectancy of each Bounded Context, as well as its sponsors and other relevant metadata.
Event Storming, Storytelling, Visualisations Article About telling non-linear stories with stickies, and visualising complications in Event Stormed models.
Form, Command, and Model Validation Article Make a clear distinction between different layers of validation.
Messaging Flavours Article Differentiating between informational, interrogatory, and imperative messages, and keeping them nicely separated.
Economy of Tests Article Migrate test levels to improve the long term sustainability of your test suite. — by @mathiasverraes and @everzet
How Much Testing is Too Much? Article Run an experiment to learn how much unit tests you actually need.
Let It Crash Article The Erlang view of the world is that everything is a process and that processes can interact only by exchanging messages.
Higher Order Programming Article map(divide(__, 2), __) and other excursions into elegant functional programming in PHP
Modelling Heuristics Presentation Mental tools to help you discover model variations
Domain Events Article Domain Events allow you to segregate the models of different systems
Object Reorientation Presentation Introductory talk to programming with objects
“Software design is just theory” Article Is writing code all day all you need to do to become a better programmer?
Small Uncontrolled Experiments (revisited) Presentation How to improve when you don't know how to improve
Objects as Contracts for Behaviour Article Even in the real world, the potential behaviours of an object are essential to that object.
Decoupling the Model from the Framework Presentation Presentation on Domain-Driven Design, CRUD, Task-based UI's, Commands, Events, ...
Sterile Estimation Article The Anchoring Bias, well-known to psychologists, prevents you from making quality estimates.
Resolving Feature Envy in the Domain Article Expressing the Ubiquitous Language helps us to get rid of the Feature Envy code smell.
DRY is about Knowledge Article Code duplication is not the issue.
Event Storming: on Fake Domains and Happy Paths Article More Event Storming insights: picking good domains, modelling branches using duplication, and creative visualisation.
Managed Technical Debt (revisited) Presentation Are you sweeping technical debt under the rug?
Information Overload Article Learn by finding the differences, not the similarities.
The Cost of Estimation Article Asking for estimates can cost you more than you think. When you do estimate, take into account time, complexity, and risk.
When to Use Static Methods Article Static methods? Yes, when they are stateless.
Named Constructors in PHP Article Don't limit yourself by PHP's single constructor. Use static factory methods.
Why Domain-Driven Design Matters Presentation Thinking about Systems and Complexity.
A Functional Foundation for CQRS/ES Article A CQRS architecture can be seen as a set of referentially transparent functions that model decisions and interpretation.
Final Classes: Open for Extension, Closed for Inheritance Article Composition, strategies, callbacks, plugins, event listeners, ... are all valid ways to extend without inheritance.
Small Uncontrolled Experiments Article How we made continuous improvement truly continuous, using stickies, a timeline, and few minutes each day.
Practical Event Sourcing Presentation A step by step guide to building your very first Event Sourced Aggregate.
Religiously RESTful Article REST: The language of the future, or opium for the masses?
Buzzword-free Bounded Contexts Article My recent attempt at explaining Bounded Contexts at @DDDBE, was criticised for being too heavy on terminology. Rinse, adjust, repeat.
Domain-Driven Design: Bounded Contexts, Modelling Presentation Gentle introductions to DDD by the founders of DDD Belgium.
Bandwidth and Context Mapping Article Context Mapping is about the whitespace between systems, and the bandwidth of the communications.
Build for Failure Article Admit failure. Build for failure. Live failure.
The Henry Ford Fallacy Article
Domain-Driven Design is Linguistic Article Just because two behaviours lead to the same outcome, does not mean they are replaceable.
Fighting Bottlenecks with CQRS Presentation CQRS challenges the assumption that reading and writing are supposed to share the same abstractions.
Value Objects and User Interfaces Article Separate value objects in your model from concepts that serve the UI.
Pre-merge Code Reviews Article Rules, benefits, patterns, and anti-patterns for reviewing code before merging it.
Verbs in Class Names Article Use a verb to build a sentence. There will be no translation to code in your brain. The sentence _is_ the code.
Sensible Interfaces Article How did we get from 'Program to an interface, not to an implementation' to 'Just slap an interface on there, it's the fashionable thing to do'?
Extract Till You Drop Presentation If I'm not afraid to refactor messy code in front of a live audience, you shouldn't be afraid to do it in the comfort of your office.
The DDDBE Modellathon Presentation
Antifragile - Things That Gain from Disorder Article Robustness only goes so far. Embrace a system's natural antifragility.
Facilitating Event Storming Article Domain-Driven Design modelling for Agile teams, Brandolini-style.
Switch - How to Change Things When Change Is Hard Article Switch is a framework for change that aims to operate on the emotional side, the logical side, and the environment.
Systemantics - The Systems Bible Article The System Kicks Back, Gets In The Way and Opposes Its Own Proper Function. Your own perspective becomes distorted by being In The System.
Managed Technical Debt Article We should make a distinction between Managed and Unmanaged Technical Debt.
Unbreakable Domain Models Presentation
Decoupling (Symfony2) Forms from Entities Article Avoid tight coupling between your forms and your Entities by using the Command pattern as an intermediate.
CRUD is an antipattern Article CRUD doesn't express behaviour. Avoid setters, and use expressive, encapsulated operations instead.
Casting Value Objects to strings Article Cast Value Objects to strings that can be parsed back into the Value Object.
How to read more books Article An ever-growing list of tips that help me read more books.
Code Folder Structure Article
Coping with Change in Software Development Article Change is not your enemy, it's your job.
Lazy Loading in PHP with Closures Article
Ubiquitous Language Article
Beautiful code Article
Representing Money in PHP, Fowler-style Article
Random thoughts on using Git Article
Accessing private properties from other instances Article
Keep your controllers thin with Doctrine2 Article
Interface discovery with PHPUnit’s Mock objects Article