When I work on a developer team (3-10 people), I often notice that getting a precise and shared definition of each what each term in code means becomes an issue as the code base grows.
After a few monthes, two totally different concepts can use the same name and two same concepts can use synonyms. It hardens a lot the code reading and the integration of new developers.
I take the example of the coding of an email client.
Here are the most frequent issues after a few monthes:
- Business model vocabulary is mixed with UI and technical vocabulary (ie : The Text UI View of the email client and a Text attribute of an email model)
- Developers translate a same concept differently (ie. Email class in the detailled view becomes Message in the ListView - but it stills use the same attributes)
- Approximative and unshared translations of the model between developers - sometimes due to a lack of english vocabulary that leads to too frequently used terms (ie. Item, Text, Label, Button, Manager, Handler...). These terms sound good, but it is hard to get a precise shared definition of them without talking about it among the team.
- Misunderstanding of the business concepts - that leads to mixing business concepts in a unique class and to break Single Responsibility Principle.
Appart from documenting a lot before coding (which sometimes is not suited for Agile development) - are there any methods to share both business and technical vocabulary among a team during dev ? So that each person has an clear knowledge of what involves a word - not in general but in the project and code context.