In talking with fellow Adobe Experience Manager (AEM) users, a common refrain I hear is “how do we set up and maintain our AEM implementation to make sure everything runs smoothly and doesn’t go off the rails”. There are many foundational, critical decisions that are made at the start of your AEM project, as well as action steps that should be taken along the way to continually optimize your instance. A successful AEM implementation requires a combined effort between development teams and business practitioners. For both groups, this article offers tips and best practices to help ensure that your organization is able to run smoothly and successfully with AEM.
As enablers of functionality, developers should be joined at the hip with the business practitioners to help deliver the critical functionality that business practitioners need. However, developers can “make or break” an AEM implementation based on their actions alone. Development in AEM requires oversight and regular reviews to ensure that developers are following best practices. This section will delve into best practices that development teams should follow.
HTML Template Language (HTL) vs. Java Server Pages (JSP)
AEM provides a set of Core Components that are developed following AEM best practices and should be leveraged as a starting point when building new components. Specifically, those core components leverage HTL, a proprietary tagging syntax created by Adobe, rather than JSPs. Using HTL increases security, simplifies development, and improves team collaboration, resulting in reduced costs. HTL also separates the front-end logic from back-end logic, which allows those two types of developers to work concurrently and collaboratively.
Source Code Management
From an on-going development perspective, having solid source code management practices should be a high priority. Especially in organizations with multiple development teams working on multiple sites, ensure that your code repository is set up properly. In particular, follow a company/tenant model to organize collections of sites underneath their respective owners. This will be helpful when you have multiple teams collaborating, as well as contributions from partners and vendors. With this code repository structure in place, we recommend creating code branches at a discrete level corresponding with work being done. In an Agile environment, this would mean creating a code branch for each Agile user story. As you start to prepare for your code release, you can then include those branches that correspond with the user stories that have been accepted for that particular release.
Build and Release Automation
One area that can be time-consuming for development teams is managing the build and release process. If you rely on manual builds and deployments, you’re going to inevitably run into problems keeping your environments consistent. To save time and improve quality, automate those processes as much as possible. For on-premise implementations, this means leveraging tools such as Jenkins to perform automated build and deployments. In addition, once the code has been deployed, leverage automated testing scripts for regression testing.
For those AEM customers using Adobe Managed Services, you definitely want to use the new Cloud Manager product, which was created to empower customers to perform code deployments on their own while providing guardrails to minimize risk. When using Cloud Manager to perform a deployment, it will take a backup of your target environment, pull branched code from your Git repository, compile the code, deploy the code to your target environment, and then perform automated testing. The testing includes load testing, security testing, and a code quality review. If the testing is successful, you are then able to continue to the next environment in your pipeline. When deploying to production, you are able to target individual AEM instances so that you can perform a rolling deployment. For Managed Services customers accustomed to lengthy deployment calls with an engineer driving the release, this is a very welcomed improvement as it allows AEM customers to manage the frequency and timing of their deployments independently.
For all AEM implementations, continually review your implementation for opportunities for improvement. Specifically, review your production logs frequently to see what types of errors are being logged and how often those errors are occurring and correct them as soon as possible. If your code is making connections to external systems, make sure you include timeouts for those connections and close them when you’re done or you may run into threading issues. If your code is querying the Java Content Repository, leverage the AEM QueryBuilder to review the performance of your queries and be sure to create any necessary query indexes. Slow running queries can have a very negative impact on the performance of your site. Also, leverage the Developer page mode in AEM to see view the performance of components on a page and make sure they all are rendering quickly and address any that are loading too slowly. Finally, review the Operations Tools within AEM for a deeper dive into your instance, including Health Reports, Jobs, and Maintenance, for example.
At the beginning of a new AEM implementation, there are many critical business decisions that must be made and these can have a major impact on your site. Arguably, the most important step is defining your content structure and much thought and review should be given to your structure before you start to build out your site. If working on a multilingual site, this means creating locale-based directories under the root of your site, following the Multi Site Manager specifications. The next level of the directory structure is impacted by several factors. From a Search Engine Optimization (SEO) standpoint, structure your site so that pages are not nested too deeply since shorter URLs are advantageous for SEO rankings. However, you also want to keep the number of items in each folder at a manageable number in order to optimize AEM queries. Also, you’re going to want to grant authors permission to the site based on the folder structures so that authors only have access to sections that they contribute. Although you may end up with deeper content path nestings than desired, you should leverage AEM's Sling Mappings to remove extraneous paths from your public-facing URLs, such as the /content/ path. As a result of these factors, it’s best to model a full-blown site structure before creating any content within AEM.
A key role in any successful AEM operations team is the Template Author. This person defines the Editable Templates that authors can select when creating new pages, including the responsive grid structure and default components that will be included on all pages created with that template. The Template Author can also designate components as locked or unlocked, ensuring that critical sections are not removed while giving authors the flexibility to remove and add other content as needed. If the Template Author wants to alter those templates in the future, the Editable Template allows for those new changes to be automatically updated across all of the existing pages, which can be a huge time saver. Additionally, you should decide where each template is allowed to be created and configure your site accordingly. These key steps will ensure that the proper types of pages are created in the right location, with those pages being granted the desired level of constraint and flexibility.
The business should manage and govern the component library. Of course, AEM offers a growing set of Core Components that should be the starting point for all component development. A library, though, should be as limited in number as possible while still providing a full range of functionality. This can be achieved by leveraging Component Designs to allow authors to select different visual renderings from a single component as needed. Before any new components are added to the library, careful thought should be given to ensure that existing components can’t meet the requirements, and if they can’t, a governing committee should approve the new component. A best practice, of course, is to limit where components can be added on a page via the corresponding Paragraph Systems. This will help to maintain consistency of the pages in a given section of the site.
In order to fully leverage AEM, consider the type of author roles that are needed. You likely have a core group of web-savvy authors who will be involved in building and constructing pages, so you’ll want to make sure they can create pages and add/remove components on those pages as needed. You also will likely have agencies and content producers that are solely focused on digital assets, so limiting their access to the Asset Manager would be appropriate. If those users are using the Creative Cloud, even better, as they can seamlessly post their creative digital assets directly into the Asset Manager. Finally, you likely have others in your organization that simply want to manage raw content, regardless of where that content is rendered, so providing them with access to Content and Experience Fragments in the Asset Manager might be best. Setting up each type of author will the respective sections and functionality in AEM will help to ensure your success.
Finally, for business practitioners, review and ensure that the content created follows best practices. For AEM in particular, which makes heavy use of content tags, governance should be implemented to make sure the library of tags is thorough and leveraged as needed since tags can impact everything from content findability, search, personalization, and SEO. You can create custom workflows to help validate custom requirements and to make sure critical reviews are made before the content is published. Always set unpublish and archive dates to ensure that content doesn’t linger past its useful lifespan. Finally, leverage analytics to stay on top of broken links, using content redirects to make sure archived content has an appropriate replacement.
Hopefully, these tips will help you keep your AEM instances from running into trouble. Both developers and business practitioners play a critical role in keeping AEM optimized. If you have any other tips you would like to share, feel free to add those in the comments section below. Whether you are starting a new AEM implementation or optimizing your existing instance, B2evolve would love to be your trusted partner. Feel free to connect with me on LinkedIn, and for those in the Dallas/Ft. Worth area, we would love to have you join our Dallas AEM User Group on Meetup.