Automated - Efficiency
Learn more about Well-Architected Easy → Automated → Efficiency → KPIs
| Where to look? Product Area | Location | What does good look like? Pattern |
|---|---|
| Einstein | Business | ✅ KPIs for your specific use cases are identified before enabling a gen AI feature KPIs for your specific use cases are identified before enabling a gen AI feature |
| Platform | Dashboards | ✅ All metrics related to KPIs are included in at least one dashboard |
| Platform | Documentation | ✅ Outputs for every automation are measurable and timebound |
| Platform | Documentation | ✅ Accountable stakeholders are listed for each KPI |
Learn more about Well-Architected Easy → Automated → Efficiency → Operational Logic
| Where to look? Product Area | Location | What does good look like? Pattern |
|---|---|
| Data 360 | Business | ✅ Segmentation refresh needs are evaluated before implementing data federation Before federating data from external sources, ensure that the standard 12-hour or 24-hour schedule for segment refresh and activation from Data 360 to Marketing Cloud Engagement meets business needs. Rapid segmentation and activation are not currently supported when you use Bring Your Own Lake (BYOL) data federation |
| Data 360 | Documentation | ✅ Design for a 1:1 or 1 |
| Data 360 | Org | ✅ Optimize your segmentation schedules Set Publish Schedules only for the duration that the segment is needed for. Ad hoc or one time campaigns should use the "Don't refresh" Publish Schedule. Evergreen (aka "always on") campaigns should use a Publish Schedule of every 12 hours. For Evergreen campaigns, set the End Date only as far in the future as the campaign will be active for |
| Data 360 | Org | ✅ Optimize your calculated insight schedules If your Calculated Insight needs to run only once, use the "Not Scheduled" option and only manually publish once. If needed less frequently than every 24 hrs, consider other automation options like Flow |
| Data 360 | Org | ✅ Use Data Actions to create Platform Events for improved operational logic Using Data Actions to publish a platform event means you can decouple the data action coming from Data 360 (publishing an event) from the actions you need to happen in your org (invoking flows and apex triggers). This increases the scale of actions your org can react to from Data 360 and greater control over your operational logic. |
| Einstein | Agents | ✅ Define agent instructions as a part of the iterative build/test process Build out the required agent topic fields (name, description, scope) and add associated actions, then begin testing the topic. Incrementally add instructions to guide your agent to execute the topic and select actions in the desired manner in an iterative build/test loop |
| Einstein | Org | ✅ Your prompt templates specify persona and the persona's goal Your prompt templates contain contextual information such as the persona the LLM should assume, as well as that character's goal. For example, include language such as, “You are a marketing executive who wants to invite major customers to a live event.” |
| Einstein | Search Indexes | ✅ Omit fields with low entropy when creating Search Indexes for structured DMOs To improve relevancy, consider excluding data points with very low cardinality (the number of distinct elements in a list), or low entropy (list entries concentrated around a few values). In general, these fields provide little to no useful information for locating relevant data with vector search |
| Platform | Apex | ✅ SOQL statements are selective Comparison operators use positive logic (i.e. INCLUDES, IN) as primary or only logic in SOQL statements |
| Platform | Apex | ✅ SOQL statements are selective Usage of = NULL, != NULL is rare and/or always follows a positive comparison operator in SOQL statements |
| Platform | Apex | ✅ SOQL statements are selective No LIMIT 1 statements appear in SOQL |
| Platform | Apex | ✅ SOQL statements are selective No usage of ALL ROWS keyword appears in SOQL statements |
| Platform | Apex | ✅ No SOQL appears within a loop |
| Platform | Apex | ✅ All wildcard criteria appear in SOSL |
| Platform | Apex | ✅ SOQL statements are selective No SOQL statements use LIKE comparisons or partial text comparisons |
| Platform | Apex | ✅ SOQL is wrapped in try-catch |
| Platform | Apex | ✅ No variables refer to hard-coded values (for record types, users, etc. |
| Platform | Design Standards | ✅ The use cases for synchronous and asynchronous operations within automations are outlined clearly as part of design standards |
| Platform | Documentation | ✅ Planned and potential execution paths for automations are outlined clearly |
| Platform | Flow | ✅ No variables refer to hard-coded values (for record types, users, etc.) |
| Platform | Flow | ✅ Flows (including processes) hand logic off to Apex in large data volume contexts |
| Platform | Flow | ✅ Subflows are used for the sections of a processes that need to be reused across the business |
| Platform | Flow | ✅ All autolaunched flows and processes use decision and/or pause elements to evaluate entry criteria and prevent infinite loops or executions against large data volumes |
Learn more about Well-Architected Easy → Automated → Efficiency → Process Design
| Where to look? Product Area | Location | What does good look like? Pattern |
|---|---|
| Data 360 | Org | ✅ Optimize Total Rows Processed in Batch Transforms Within Data Transforms, use a filter activity on the canvas to isolate only rows that need to be processed for successful transformation |
| Data 360 | Org | ✅ Consolidate Dimensions Across Calculated Insights Instead of writing multiple Calculated Insights with one dimension each, consolidate both dimensions into one Calculated Insight where possible |
| Platform | Apex | ✅ Each class serves a single, specific purpose |
| Platform | Apex | ✅ Each method performs a specific, granular task |
| Platform | Apex | ✅ All input variables have a clear purpose within the class |
| Platform | Apex | ✅ Code execution requires a minimal number of resources |
| Platform | Flow | ✅ Users are only asked to provide data when existing system data can't be used |
| Platform | Flow | ✅ Flows are organized in a hierarchical structure consisting of a main flow and supporting subflows |
| Platform | Flow | ✅ All user inputs have a clear purpose within the flow |
| Platform | Flow | ✅ Each flow serves a single, specific purpose |
| Platform | Flow | ✅ Each step performs a specific, granular task |
Learn more about Well-Architected Easy → Automated → Efficiency → KPIs
| Where to look? Product Area | Location | What to avoid? Anti-Pattern |
|---|---|
| Platform | Dashboards | ⚠️ KPI reporting does not exist or dashboards are missing metrics related to some KPIs |
| Platform | Documentation | ⚠️ KPIs exist without accountable stakeholders |
| Platform | Documentation | ⚠️ KPIs do not exist for automations or have unclear time frames for measurements |
Learn more about Well-Architected Easy → Automated → Efficiency → Operational Logic
| Where to look? Product Area | Location | What to avoid? Anti-Pattern |
|---|---|
| Data 360 | Documentation | ⚠️ Design for a many:1 connection between Marketing and Data 360 Diagrams or solution design documents specify more than one Marketing Cloud instance connecting to a singular Data 360 instance via the Marketing Cloud Connector |
| Data 360 | Org | ⚠️ Data federation is implemented without evaluating segmentation refresh needs Data federation is leveraged for data sets which require rapid segmentation and activation (1-hour or 4-hour schedule to send activation data), vs the standard 12-hour or 24-hour schedule |
| Data 360 | Org | ⚠️ Data federation is implemented without evaluating data transform needs An external DLO contains data needed for streaming data transforms |
| Einstein | Agents | ⚠️ Define agent instructions at the beginning of the design process Instructions are added before testing the agent's ability to execute the topic and select appropriate actions |
| Platform | Apex | ⚠️ SOQL statements are non-selective Comparisons using NOT, NOT IN criteria are used as the primary or only comparison operator in SOQL statements |
| Platform | Apex | ⚠️ SOQL statements are non-selective ALL ROWS keyword is used in SOQL statements |
| Platform | Apex | ⚠️ SOQL statements are non-selective = NULL, != NULL criteria are used as the primary or only comparison operator in SOQL statements |
| Platform | Apex | ⚠️ Variables have hard-coded values |
| Platform | Apex | ⚠️ SOQL appears within loops |
| Platform | Apex | ⚠️ SOQL statements are non-selective LIKE and wildcard filter criteria appear frequently in SOQL statements in SOQL statements |
| Platform | Apex | ⚠️ SOQL is not wrapped in try-catch |
| Platform | Apex | ⚠️ SOQL statements are non-selective LIMIT 1 statements appear in SOQL |
| Platform | Apex | ⚠️ SOSL is rarely or not consistently used for wildcard selection criteria |
| Platform | Design Standards | ⚠️ Use cases for synchronous and asynchronous operations are not addressed |
| Platform | Documentation | ⚠️ Automation invocation is not documented |
| Platform | Flow | ⚠️ Variables have hard-coded values |
| Platform | Flow | ⚠️ Flows (including processes) must be manually deactivated prior to bulk data loads |
| Platform | Flow | ⚠️ Portions of a flow are repeated across flows rather than using subflows |
| Platform | Flow | ⚠️ Flows (including processes) trigger "unhandled exception" notices |
| Platform | Flow | ⚠️ Even simple flows regularly cause errors related to governor limits |
Learn more about Well-Architected Easy → Automated → Efficiency → Process Design
| Where to look? Product Area | Location | What to avoid? Anti-Pattern |
|---|---|
| Platform | Apex | ⚠️ Classes serve multiple purposes |
| Platform | Apex | ⚠️ Methods perform multiple tasks or methods perform tasks that don’t align to the stated purpose of the class they’re part of |
| Platform | Apex | ⚠️ Input variables aren’t actually used in methods |
| Platform | Apex | ⚠️ Methods unnecessarily retrieve data from the database or from external systems |
| Platform | Flow | ⚠️ Flows require additional inputs to provide context |
| Platform | Flow | ⚠️ Flows serve multiple purposes |
| Platform | Flow | ⚠️ Groups of related steps contain functionality that overlaps with groups of steps in other flows |
| Platform | Flow | ⚠️ Flows ask for user inputs when stored data can be used instead |
| Platform | Flow | ⚠️ Flows require inputs whose data is not used |