One of the biggest challenges when creating frameworks is to drive a convention that can be easily used by those who will use it. AEM is not exception, being Java based its open for interpretation and development in many ways that fit the bill, which is the beauty of software development. This does make creating frameworks a challenge as you are constantly need to evaluate and refactor any deviation to your conventions.
When it comes to it refactoring of codebase comes in flavours of accepting the change and rejecting the change. Interestingly any choice you make has impacts that are hard to understand at the time and usually manifest in the long term.
- Rejecting changes means that you stand a good chance of no one using your conventions.
- Accepting any changes without consideration will result in a spaghetti monster.
There is no one answer to make it all work like as its complicated to solve and predict. But it does mean that conventions should be created and followed and improved over time. Having people on your project that understand conventions and have experience doing this does help, but this is possible by every one who strives towards it. Less experience leads to con
Having generalised conventions that apply across technology changes should be your aim. In practice these should be derived over time by evaluating the implemented technologies and conventions that they bring. Throughout refactoring efforts the conventions and patters will eagerly present themselves. Once a pattern appears repeatable it should be generalised so that its better understood.
Having a pattern or a set of patterns that apply in general across your project bring number of benefits:
- it allow everyone on the team to achieve common understanding, having all team members speak the same language is essential
- its easier to identify deviation from conventions that prompt change, without conventions comparing patterns will be a challenge
- it enables a consistent experience for developers, ability to transition between projects without learning from scratch
- it provides a simplified on-boarding process for new team members, it usually takes a while to on-board to a new project and it becomes harder if the project is a spaghetti monster
Over time reusable patterns on projects should be leveraged on new project to test their strength. Doing this allow you to evaluate and test your pattens in a new environment, new people and new set of requirements. This is a great method for improving your conventions and patterns. Most importantly by doing this it enables you to test if your pattern works.
Creating patterns should be about converting great ideas into simple pattern everyone can understand and easily follow without needing lessons in history.