However, as more participants get involved, and payments are made from multiple inputs, it becomes much more difficult to determine who is paying whom.
Imagine instead that the inputs look like this:
(a) 0.15 BTC
(b) 0.15 BTC
(c) 0.15 BTC
(d) 0.15 BTC
(e) 0.15 BTC
(f) 0.15 BTC
(g) 0.15 BTC
(h) 0.15 BTC
(i) 0.15 BTC
(j) 0.15 BTC
(k) 0.15 BTC
(l) 0.15 BTC
(m) 0.15 BTC
(n) 0.15 BTC
(o) 0.15 BTC
(Total = 2.25 BTC)
And that the outputs look like this:
(P) 1.9999 BTC
(Q) 0.0099 BTC
(R) 0.1399 BTC
(S) 0.1 BTC
transaction fee = 0.0003 BTC
Now it becomes much more difficult to determine just how many people are paying, how many people are getting paid, how many "change outputs" there are, and who is paying whom.
great, but then all the outputs can easily be identified as a Coinjoin.
this is a better scheme (a more current method that defeats another form of analysis)
2 participants, A & B:A: 0.40
A: 0.20 \ ----= 0.60
\ /
-------
/ \
B: 0.30 / ----= 0.60
B: 0.30
(fees ignored to simplify, imagine they both paid 1000 satoshis and each received 0.59999 if it makes you happy
)
Now, with only 2 outputs, analysis cannot make a reliable suppostion that this was a Coinjoin, it might have been, but it's not beyond doubt. 1 person making a transaction typically only uses a payment output and a change output. You can say "oh some people are more sophisticated than that, simply having 29 outputs that are 1 BTC each doesn't mean it's a Coinjoin". And that's completely irrelevant; if some chain analytics outfit deems it a Coinjoin, it is a Coinjoin, and it's then not difficult to convince someone
unsophisticated (who might be playing some important role in relation to a particular transaction) that it's a Coinjoin either.
If you do a transaction like you suggest above (dozens of equal sized outputs), send it to some do-gooder merchant or an exchange, and they report you to the "Bitcoin Police" for being suspicious, what are you going to say then?