msc {
    hscale="2.0";
    u [label="User"],
    m [label="Mesh config"],
    s [label="State owner"],
    l [label="Change listener"],
    b [label="Backend"];

    u => m [label="mesh_config_entry_set(ID, value=5)"];
    m => s [label="setter_callback(ID, value=5)"];
    m <- s [label="NRF_SUCCESS"];
    m => l [label="value_change(ID, value=5, change_reason=SET)"];
    b note b [label="Backend is busy"];
    m => b [label="save(ID, value=5)"];
    m <- s [label="NRF_ERROR_BUSY"];
    u <- m [label="NRF_SUCCESS"];
    ...;

    b note b [label="Backend becomes available"];
    m << b [label="READY"];
    m => s [label="getter_callback(ID)"];
    m <- s [label="value=5"];
    m => b [label="save(ID, value=5)"];
    m <- s [label="NRF_SUCCESS"];

    ...;
    m << b [label="save_complete(ID)"];
    u << m [label="NRF_MESH_EVT_CONFIG_STABLE"];
}