Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modelling Heuristics

Modelling Heuristics


“How do you approach software modelling problems?”
When a client asked me about my mental process, I didn’t have a proper answer — yet. The question intrigued me. Do you need a propensity for modelling, or is it a learnable skill? I embarked on a mission to find modelling heuristics: the mental tools, that help us look at the problem from different angles; the little tricks to validate a model before we build it; the rules of thumb that lead us to iteratively refine our solutions. In this talk, I share some of the ideas I collected from books, from people I interviewed, and from my own experiences.


Mathias Verraes is a recovering music composer turned programmer, consultant, blogger, and speaker. He advises companies on how to build enterprise web applications for complex business domains. For some weird reason, he enjoys working on large legacy projects: the kind where there’s half a million lines of spaghetti code, and nobody knows how to get the codebase under control. He’s the founder of the Domain-Driven Design Belgium community. When he’s not working, he’s at home in Kortrijk, Belgium, helping his two sons build crazy Lego train tracks.

Mathias Verraes

November 20, 2014

More Decks by Mathias Verraes

Other Decks in Technology


  1. Upfront Model? 1 1 Scott W. Ambler, "Big Modeling Up

    Front (BMUF) Anti-Pattern", http://www.agilemodeling.com/ essays/bmuf.htm
  2. Analysis model 2 vs Domain model 2 Martin Fowler, 1996,

    "Analysis Patterns: Reusable Object Models"
  3. Linguistic Relativism Sapir-Whorf Hypothesis 3,4 4 Paul Graham, "Beating the

    Averages", http://www.paulgraham.com/avg.html 3 Steven Pinker, 1994, "The Language Instinct"
  4. [ { "licensePlate": "1-ABC-123", "brand": "BMW", "make": "X1", "color": "Aggregate

    Blue", ..., "location": "40.7127837,-74.0059413" }, ... ]
  5. Verb-based: f = chain( breakTextIntoWords() : [String] groupWordsIntoLines() : [[String]]

    joinWordsInBrokenLines() : [String] joinBrokenLines() : String ) f("A long paragraph") -> "A long\nparagraph"
  6. Noun-based: 7 f = chain( words() : [String] brokenLines() :

    [[String]] wordJoinedLines() : [String] joinedLines() : String ) f("A long paragraph") -> "A long\nparagraph" 7 Michael Feathers, "A Type Driven Approach to Functional Design", InfoQ
  7. Given I have a product When I look at the

    price of a product ... or Given I have a product When I lookup the product in the pricing table ... ?
  8. As a customer I want to ... Given there is

    a product When I look at the price of a product ... As a shop owner I want to ... Given I have a product When I lookup the product in the pricing table ...
  9. When I look at the price of a product ...

    When I lookup the product in the pricing table ...
  10. Heuristic Being Behaving Becoming Three B's 5 5 Gerald M.

    Weinberg, 1988, "Rethinking Systems Analysis and Design"
  11. Heuristic Collaborative Construction6 Execution Tracking aka Planning/Execution/Analysis 6 Cyrille Martraire,

    "Collaborative Construction by Alberto Brandolini", http:// cyrille.martraire.com/2012/09/collaborative-construction-by-alberto-brandolini/
  12. Heuristic Happy Path / Divergent Path9 9 Mathias Verraes, "Event

    Storming: on Fake Domains and Happy Paths", http://verraes.net/ 2014/07/event-storming-fake-domains-happy-paths/