| Different content by segment | Yes — dynamic content blocks in Content Builder handle rule-based variation without a line of AMPscript. | The rule depends on a value that has to be calculated at send time, or on data that lives outside the sending data extension. |
|---|
| Personalized greeting and merge fields | Yes — personalization strings and attributes cover this natively. | You need fallback logic, formatting, or a conditional that the content editor cannot express. |
|---|
| A landing page tied to a campaign | Sometimes — a simple page can be built in CloudPages with no code. | The page reads or writes Marketing Cloud data, pre-fills from a link, or has to behave differently per visitor. |
|---|
| A preference center | A basic subscription center exists natively. | You need channel-level preferences, regional consent wording, your own brand experience, or write-back to more than one data extension — which is most real requirements. |
|---|
| Calling another system mid-journey | Sometimes — a native activity may already exist for it. | Your service has to be called, its response inspected, and the journey path decided on the result. That is a custom Journey Builder activity. |
|---|
| Complex audience logic | Usually — SQL in Automation Studio handles more than people expect. | The logic has to run at send time per recipient rather than at audience-build time. |
|---|
| Sending at a per-customer optimal time | Yes — Einstein Send Time Optimization does this natively, using engagement history. | Almost never. This is the clearest example of a requirement that gets custom-built by teams who did not know the feature existed. |
|---|