Choosing your Subset

One of my occasional pleasures in helping people to do better modelling is to tell them the things they DON’T need to do. And what they need to do in order to avoid doing the things they don’t need to do.

Modelling Languages are BIG – which is good

When you adopt a new modelling language, whether that’s BPMN, SysML, Archimate or good old-fashioned UML, then you should expect to be buying some big, thick books. These languages are developed over many years by lots of smart people, and they need to make the language cope with everything which anyone might want to do with it. And that’s what makes them big and complicated.

But that doesn’t mean you need, or should even think about, using the whole language. Teams who tsubset 1ry to adopt all of a standard language tend to end up with complicated, fragmented models. This is because only a minority of the team will take the time – or have the interest – to learn all the language, and so their bits of the mode will be complicated, using all kinds of groovy modelling constructs. The rest will stick to the bits they understand, and will be baffled by the other bits.

So the model will be uneven in how it expresses ideas: sometimes complicated, sometimes simple. Not a model which will get re-used.

Picking a Subset

The part of the language-adoption journey which many teams seem to miss-out on, or come to very late after their model has become unevenly complicated, is to pick a subset of the language.
A good way to do this is in three steps. Well. four actually, but the last step gets a separate section.

  1. Agree on the very smallest set of ideas which everyone understands and absolutely MUST be in the teams working subset. This might be very small. Small enough to explain to your project manager over a coffee. Small enough so that there really is no argument about what each idea means and where/how it should be used. ( Modelling ‘idea’ for this purpose is a type of box, circle or line in a diagram, and the text which lies behind it.) The biggest mistake here is to make the initial set of ideas =  ‘everything’. This won’t work.
    As an example, the BPMN process modelling language defines about 60 different kinds of event. I teach BPMN, and I’d be hard pressed to identify all 60. So there’s no way a team should use them all. There are about 3 BPMN events which are undeniably useful  – Start, intermediate and end, and I’d even consider losing ‘intermediate’ until a team knows what they want it for.
    So the initial subset can and should be REALLY small.
  2. Grow your subset – carefully. This is the tricky part. As you model more things, you’ll be tempted to explore your chosen language and add more ideas to your subset. Have a stand-up meeting every week, or every day, to discuss new ideas. Make sure that everyone can agree on what any new ideas mean and where they will be used. Do this before they are made part of the subset. Also think about the re-work you’ll have to do to existing bits of the model, because you want your model to stay consistent. This last point might mean that whilst you may really WANT to add a new idea, the disruption caused by the re-work might be too great.
    And a word about bringing new ideas to this stand-up. It should not be a case of ‘hey, look how I’m using this groovy stuff I found at the back of the modelling book‘. It should be more like

    • “I’ve found this problem with our existing subset:
    • here’s what I want to say,
    • here’s what I can currently say, and how it’s not accurate/understandable
    • here’s my suggestion for an improvement – ‘how to’ examples and ‘how not to’ as well
    • …and here’s the re-work we’ll need to do if we adopt this new idea”
      Only when the team have thought about all of these should you adopt the new idea.
  3. Step outside the language – VERY carefully.
    If you look carefully at the very complicated Venn diagram above, you’ll notice that the subset isn’t really a strict subset.
    I said that the people who invented your chosen language were smart, and tried to encompass everything they could think of into the language. But they don’t work on your project, and they didn’t have to create the deliverable which you do. So it’s OK, sometimes, and with great care and thought, to step outside of the language, and create your own ideas.
    Well, you might think they are your own, but I 100% guarantee that someone, somewhere has already thought about them. So before you introduce your brand new, never-seen-in-a-project-before modelling idea, check

    • The modelling language, to make sure they don’t already have the idea, maybe with another name
    • Other people’s work on the interweb: they may have had time to explore the idea more than you have
    • Only then, add it to your subset.
    • Make sure to document why you made the change, exactly what it is, and provide lots of examples – good and bad – of how it should be used and not used

Communicate, communicate

And the final point, which I’ve seen lots of teams forget, is to communicate your decisions. You may have invented the greatest modelling idea since the sticky note, but if only a few people in your team know about it, then you probably made things worse.
So tell everyone.
If you can get your team round a table for a 1/2 hour daily stand-up, then this won’t be a problem. But if your team are scattered across the world in multiple time-zones, then it’s going to be harder, so you’re going to have to try that much harder when communicating. And this will take time and cost money, so someone needs to schedule and pay for that. And that person will expect to see the benefit of spending the time and the money in a more re-useful* *(sic), more valuable model.

Your communications should have lots of examples – how to use it, how not to use it – so that in 3 years time when someone tries to re-use your model, they have every chance of understanding what you created. And put those examples into the model, so they don’t get lost.

Because that’s what all this is about. Making models more useful.


**(re-useful is the property of a model, or some code, which makes it more likely to be re-used. To be amplified in a future post)