Real-World Scenario — When and Why You Actually Reach for an AEM Component
Where AEM components are actually used in real projects, the genuine problems they cause when built carelessly, and honest criteria for when a component is the right tool versus overkill, with a full working example.
Read article →
Real-World AEM Scenario — Where Servlets Actually Earn Their Place
A practical look at where Sling Servlets fit in real AEM implementations, when a servlet is the right request boundary, and when the requirement belongs in a Sling Model or OSGi service instead.
Read article →
Real-World Scenario — When an OSGi Service Is the Right Call (and When It's Just Ceremony)
Where OSGi services are genuinely the right tool in real AEM projects, the recurring reference and configuration problems they cause in production, and honest criteria for when a plain Java class beats a service, with a full working example.
Read article →
Real-World Scenario — When a Workflow Is Actually the Right Tool (and When a Job Would Do)
Where AEM workflows are genuinely the right tool in real DAM and content approval scenarios, the recurring stuck-instance and duplicate-trigger problems they cause in production, and honest criteria for when a plain Sling Job beats a workflow, with a full working example.
Read article →
Real-World Scenario — Scheduler vs. Job vs. Workflow: Picking the Right Background Tool
Where the Sling Scheduler and Jobs API are genuinely the right tool in real AEM projects, the recurring duplicate-execution and stuck-retry problems that show up in clustered environments, and honest criteria for choosing between a scheduled task, a job, and a full workflow.
Read article →
Real-World Scenario — When a Sling Model Earns Its Place (and When ValueMap Is Enough)
Where Sling Models are genuinely the right abstraction in real AEM components, the recurring null-adaptation and over-injection problems that show up once a project has dozens of them, and honest criteria for when raw resource/ValueMap access is simpler, with a full working example.
Read article →
Real-World Scenario — When a Content Fragment Beats a Page (and When It's Overkill)
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 article →
Real-World Scenario — Publishing a Page Shouldn't Leave Its Assets and Fragments Behind
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 article →
Real-World Scenario — A Scheduled Job That Nags the Right People When Approvals Stall
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 article →
Real-World Scenario — The Notification Email That Sometimes Went Out Without the One Detail That Mattered
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 article →
Real-World Scenario — The Nav Menu Item That Quietly Disappeared
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 article →
Real World Scenarios: The Optional Field That Wasn't Optional
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 article →
Real-World AEM Scenario — Cleaning Up Unwanted DAM and Experience Fragment Nodes
A production AEM cleanup scenario where a servlet was used to identify and remove unwanted nodes from DAM and Experience Fragment paths.
Read article →
Real-World Scenarios: Dead Hidden Fields After a Multifield Migration
A field an author fills in that visibly does nothing — tracing a dialog's hidden, dead flat fields back to a multifield migration that never cleaned up after itself, and a template-contract test that would have caught it.
Read article →
Real-World Scenarios: The Carousel With No Slides to Navigate
A hero carousel that renders navigation arrows and indicators but no slides — tracing it back to an inherited Core Component dialog tab that got hidden without anything replacing what it authored, and the contract test that would have caught it pre-launch.
Read article →
Real-World Scenarios: Flipping a Feature Toggle's Default Changed More Pages Than Expected
A one-line change to an inherited page property's default value quietly changed behavior on hundreds of pages that had never explicitly set it — how it was traced, and the audit query that should have run before the change shipped.
Read article →
Real-World Scenarios: A Shared Icon Picker's New Required Field Blocked Saves on Three Unrelated Components
A compliance-driven field added to one shared dialog subtree quietly became a required field on three components that reused it via node-level sling:resourceSuperType — tracing the save-blocking bug back to an invisible dialog dependency, and the CI check that finds every consumer before a change ships.
Read article →
Real-World Scenarios: An SEO Audit Found Every noindex Page Still Listed in the Sitemap
A quarterly SEO audit found that a noindex exclusion feature in a custom sitemap generator had never worked in production — traced to an untyped multi-value property read and a Java array's default toString(), plus two related fixes for vanity-path alternates and template-mismatched hreflang links.
Read article →
Real-World Scenarios: A Rebrand Silently Broke Every Experience Fragment Created Before It
A site-wide theme consolidation changed a handful of page properties and left dozens of previously-created Experience Fragments visually mismatched — with no errors anywhere, because a ResourceChangeListener had copied those properties at creation time instead of inheriting them live.
Read article →