- use proper java packages / modules - program with interfaces - proper artefact naming - use semantic versioning semver.org