I’m not about to go and list all the thousand differences that will contribute to a slow and painful project death, but I will mention a few categories I always see.
Differences in property names
When you start to use build files and automated builds, you will end up with property files. Often each property will be named slightly differently, especially when used, and you need to constantly remember all the different things.
Differences in test styles
Some people will prefer to put test set up in the field of a class, others that aren’t.
Differences in path locations
In one module, you might have /src/java/com, in another you might have /executable/java/com.
Differences in configuration values
I remember one project where the team had over twenty different configuration values to allow them to put parts of the codebase wherever they liked. It was a nightmare when something would go wrong, trying to track down if the difference was environmental, or if it was a true mistake.
Differences in name
Ala ubiquitous language. The users know something by one name, the BAs call it by another, the developers by yet another one. Each time, compounding the already-difficult task of communication. Don’t you think meetings are long enough without having to continuously translate terms as well as make decisions?
Differences in code style
Everything included from curly brace placement, number of spaces to naming conventions of variables. Create a code standard for those things that really don’t make a significant difference so you can spend valuable thought cycles on other things.