Learning path
Master Adobe Experience Manager with practical guides on implementation patterns, real-world problem solving, and best practices.
Where Content Fragments are genuinely the right content model in real AEM projects, the recurring model-migration and publication-dependency problems that show up once fragments are in production, and honest criteria for when a plain page or component dialog is simpler.
Read chapter →
A real requirement, worked end to end — authors kept publishing pages that looked broken on the live site because the images and Experience Fragments they referenced were never activated along with them. Full working workflow process step that walks page references, DAM assets, and nested Experience Fragments, batches activation, and protects against reference cycles.
Read chapter →
A real requirement, worked end to end — legal/compliance approvals were quietly sitting in reviewers' inboxes for weeks because nobody checked AEM's Inbox unless something else reminded them. Full working scheduled job that finds stalled workflow approvals, groups them by request reference, and sends one batched reminder email instead of one per page — plus the dual-trigger design that lets the same job run on a cron schedule or on demand with different parameters.
Read chapter →
A real production bug, worked end to end — an automated workflow step read dialog values (a tracking ID, a routing email) that a human review step had captured earlier in the same workflow, except those values sometimes weren't there anymore. Full working fix that hydrates workflow-level metadata from step history explicitly, instead of assuming a later step can see what an earlier step's dialog collected.
Read chapter →
A real production bug, worked end to end — a global header built from a Content Fragment referencing other Content Fragments went live missing an entire navigation item after an unrelated content move, with no error anywhere. Full working fix that tells "not configured" apart from "broken reference" and surfaces the difference to authors instead of swallowing it silently.
Read chapter →
A working reproduction of a real NullPointerException — a Sling Model's @PostConstruct only initializes a list when an @Optional injected field is present, but the getter assumes it always is. Includes the failing test that proves the crash and the null-safe fix.
Read chapter →