When performing decomposition, elements that are closely related to each other should be grouped together.

The relationships may be based on functional similarities, communication paths between elements, and/or interdependencies.

One test of cohesion is whether the function of a group can be easily described and understood, and whether the elements in that group can be seen to readily fit within that stated function.

Be careful, though, not to group elements together based on a shared or similar role, if each element is tasked to perform that role for different groups.

In other words, and in the case of development teams, you would not normally maximize cohesion by assigning each database analyst to a group of other database analysts, since the primary communication for each would be with the developers they are supporting, and not with other DBAs.

Instead, groups of individuals performing similar roles on different teams can best communicate with each other as members of a Community of Practice. Such a group may also be referred to as a guild.

Next: Loose Coupling