Skip to content

Solution Architecture Decision Guides

Visual decision flowcharts for the most common solution architecture choices a CTA faces. These diagrams are designed to be used during scenario analysis and can be referenced during the Review Board presentation to demonstrate systematic decision-making.

Flow vs Apex Decision

Use this when determining whether a given automation requirement should be implemented declaratively (Flow) or programmatically (Apex).

flowchart TD
    Start([New Automation<br/>Requirement]) --> Q1{Only modifying the<br/>triggering record?}
    Q1 -->|Yes| Q1a{Simple field<br/>updates/formulas?}
    Q1a -->|Yes| R1[Before-Save Flow]
    Q1a -->|No| Q1b{Complex calculation<br/>with external data?}
    Q1b -->|Yes| R2[Apex + Invocable Action]
    Q1b -->|No| R1

    Q1 -->|No| Q2{Involves related<br/>records?}
    Q2 -->|Yes| Q3{More than 50K<br/>records?}
    Q3 -->|Yes| R3[Batch Apex]
    Q3 -->|No| Q4{Complex multi-object<br/>transaction logic?}
    Q4 -->|Yes| R4[Apex Trigger]
    Q4 -->|No| R5[After-Save Flow]

    Q2 -->|No| Q5{External system<br/>callout?}
    Q5 -->|Yes| Q6{Simple REST<br/>with OpenAPI spec?}
    Q6 -->|Yes| R6[External Services + Flow]
    Q6 -->|No| R7[Apex Callout]

    Q5 -->|No| Q7{User interaction<br/>needed?}
    Q7 -->|Yes| Q8{Complex UI beyond<br/>standard components?}
    Q8 -->|Yes| R8[Screen Flow + Custom LWC]
    Q8 -->|No| R9[Screen Flow]
    Q7 -->|No| Q9{Scheduled/<br/>recurring?}
    Q9 -->|Yes| Q10{Simple query +<br/>update pattern?}
    Q10 -->|Yes| R10[Scheduled Flow]
    Q10 -->|No| R11[Schedulable + Batch Apex]
    Q9 -->|No| R5

    style R1 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R5 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R6 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R9 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R10 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R2 fill:#f4a261,stroke:#d4823e,color:#000
    style R8 fill:#f4a261,stroke:#d4823e,color:#000
    style R3 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R4 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R7 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R11 fill:#e76f51,stroke:#c45a3f,color:#fff

Legend: Green = Declarative (admin-maintainable) | Orange = Hybrid | Red = Programmatic (developer-required)


Build vs Buy Decision

Use this when evaluating whether to build a capability custom, use an AppExchange package, or leverage an external product.

flowchart TD
    Start([Capability<br/>Requirement]) --> Q1{Does Salesforce provide<br/>this natively?}
    Q1 -->|Yes| R1[Use Platform Native Feature]
    Q1 -->|No| Q2{Is this core to the<br/>company's competitive<br/>advantage?}
    Q2 -->|Yes| Q3{Does the team have<br/>the skills to build<br/>and maintain it?}
    Q3 -->|Yes| R2[Build Custom]
    Q3 -->|No| Q4{Can skills be<br/>acquired in time?}
    Q4 -->|Yes| R2
    Q4 -->|No| Q5{Is there a proven<br/>AppExchange solution?}
    Q5 -->|Yes| R3[Buy AppExchange + Customize]
    Q5 -->|No| R4[Build Custom + Plan Hiring]

    Q2 -->|No| Q6{Is there a mature<br/>AppExchange package?}
    Q6 -->|Yes| Q7{Does it meet 80%+<br/>of requirements?}
    Q7 -->|Yes| Q8{Is the TCO favorable<br/>over 3-5 years?}
    Q8 -->|Yes| R3
    Q8 -->|No| R2
    Q7 -->|No| Q9{Is the 20% gap<br/>acceptable or<br/>workable?}
    Q9 -->|Yes| R3
    Q9 -->|No| R2

    Q6 -->|No| Q10{Is there an established<br/>external product?}
    Q10 -->|Yes| R5[External Product + Integration]
    Q10 -->|No| R2

    style R1 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R2 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R3 fill:#4ecdc4,stroke:#3ab5ad,color:#000
    style R4 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R5 fill:#f4a261,stroke:#d4823e,color:#000

Legend: Green = Platform Native | Teal = AppExchange | Orange = External Product | Red = Custom Build


AppExchange Evaluation Decision

Use this when you have identified an AppExchange package and need to determine if it is the right choice.

flowchart TD
    Start([Evaluating AppExchange<br/>Package]) --> Q1{Passed Salesforce<br/>Security Review?}
    Q1 -->|No| STOP1[Do Not Proceed]
    Q1 -->|Yes| Q2{Active development<br/>and recent updates?}
    Q2 -->|No| Q2a{Is there an<br/>alternative package?}
    Q2a -->|Yes| START2([Evaluate<br/>Alternative])
    Q2a -->|No| WARN1[Proceed with Caution<br/>+ Exit Strategy Required]
    Q2 -->|Yes| Q3{Does it meet<br/>functional requirements?}
    Q3 -->|No| STOP2[Do Not Proceed]
    Q3 -->|Yes| Q4{Governor limit<br/>impact acceptable?}
    Q4 -->|No| Q4a{Can impact be<br/>mitigated with<br/>architecture?}
    Q4a -->|Yes| Q5{Data model<br/>impact acceptable?}
    Q4a -->|No| STOP3[Do Not Proceed]
    Q4 -->|Yes| Q5
    Q5 -->|No| STOP4[Do Not Proceed]
    Q5 -->|Yes| Q6{Upgrade path<br/>clear and safe?}
    Q6 -->|Yes| Q7{Vendor financially<br/>stable?}
    Q7 -->|Yes| R1[Recommend for Adoption]
    Q7 -->|No| WARN2[Recommend with<br/>Enhanced Exit Strategy]
    Q6 -->|No| WARN3[Recommend with<br/>Version Lock + Testing Plan]

    style R1 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style STOP1 fill:#9d0208,stroke:#6a040f,color:#fff
    style STOP2 fill:#9d0208,stroke:#6a040f,color:#fff
    style STOP3 fill:#9d0208,stroke:#6a040f,color:#fff
    style STOP4 fill:#9d0208,stroke:#6a040f,color:#fff
    style WARN1 fill:#f4a261,stroke:#d4823e,color:#000
    style WARN2 fill:#f4a261,stroke:#d4823e,color:#000
    style WARN3 fill:#f4a261,stroke:#d4823e,color:#000

LWC vs Aura vs Visualforce Decision

Use this when choosing a UI technology for a new component or evaluating a migration path for existing components.

flowchart TD
    Start([UI Component<br/>Requirement]) --> Q1{Is this a new<br/>component?}
    Q1 -->|Yes| R1[Build with LWC]
    Q1 -->|No| Q2{What exists today?}

    Q2 --> VF[Visualforce Page]
    Q2 --> AURA[Aura Component]

    VF --> Q3{Is the VF page<br/>working well?}
    Q3 -->|Yes| Q4{Is there business<br/>value in migrating?}
    Q4 -->|Yes| Q5{Complex VF with<br/>heavy Apex controller?}
    Q5 -->|Yes| R2[Phased Migration:<br/>Keep Apex backend,<br/>replace VF with LWC]
    Q5 -->|No| R3[Direct Rewrite to LWC]
    Q4 -->|No| R4[Keep Visualforce<br/>- Add to Tech Debt Backlog]
    Q3 -->|No| R3

    AURA --> Q6{Is the Aura component<br/>stable and working?}
    Q6 -->|Yes| R5[Keep Aura for Now<br/>- New Features in LWC]
    Q6 -->|No| R6[Rewrite in LWC]

    style R1 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R3 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R6 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R2 fill:#f4a261,stroke:#d4823e,color:#000
    style R5 fill:#f4a261,stroke:#d4823e,color:#000
    style R4 fill:#e76f51,stroke:#c45a3f,color:#fff

Key Principle

Never migrate for migration’s sake. The review board values pragmatic architecture. Migrating a stable Visualforce page that 5 users access monthly is a poor use of resources compared to building new capabilities in LWC.


OmniStudio vs Standard Flow Decision

Use this when determining whether OmniStudio components add sufficient value over standard Flow/LWC approaches.

flowchart TD
    Start([Guided Process<br/>Requirement]) --> Q1{Is this an industry-specific<br/>process?}
    Q1 -->|Yes| Q2{Does the customer have<br/>Industry Cloud licensing?}
    Q2 -->|Yes| Q3{Do industry-specific<br/>templates exist?}
    Q3 -->|Yes| R1[OmniStudio with<br/>Industry Templates]
    Q3 -->|No| Q4{Is the UI complexity<br/>beyond Screen Flow<br/>capabilities?}
    Q4 -->|Yes| R2[OmniStudio Custom Build]
    Q4 -->|No| R3[Screen Flow]

    Q2 -->|No| Q5{Is OmniStudio licensing<br/>justified by ROI?}
    Q5 -->|Yes| R2
    Q5 -->|No| R4[Screen Flow + Custom LWC]

    Q1 -->|No| Q6{Complex multi-step<br/>with heavy data<br/>transformation?}
    Q6 -->|Yes| Q7{Team has OmniStudio<br/>expertise?}
    Q7 -->|Yes| R2
    Q7 -->|No| R4
    Q6 -->|No| Q8{Simple guided<br/>process?}
    Q8 -->|Yes| R3
    Q8 -->|No| R4

    style R1 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R2 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R3 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R4 fill:#f4a261,stroke:#d4823e,color:#000

Legend: Dark Teal = OmniStudio | Green = Standard Flow | Orange = Hybrid (Flow + LWC)


Screen Flow vs Custom LWC Decision

Use this when determining whether a user-facing requirement should be built as a Screen Flow or a custom LWC application.

flowchart TD
    Start([User-Facing<br/>Requirement]) --> Q1{Admin-maintainable<br/>after go-live?}
    Q1 -->|Yes| Q2{Standard input<br/>components sufficient?}
    Q2 -->|Yes| R1[Screen Flow]
    Q2 -->|No| Q3{Custom component needed<br/>for one section only?}
    Q3 -->|Yes| R2[Screen Flow + Embedded LWC]
    Q3 -->|No| Q4{Will admins maintain<br/>the LWC portion?}
    Q4 -->|Yes| R2
    Q4 -->|No| R3[Custom LWC Application]

    Q1 -->|No| Q5{Real-time data<br/>interaction needed?}
    Q5 -->|Yes| Q6{Complex state<br/>management?}
    Q6 -->|Yes| R3
    Q6 -->|No| Q7{Multiple data sources<br/>or APIs?}
    Q7 -->|Yes| R3
    Q7 -->|No| R2

    Q5 -->|No| Q8{Simple wizard-style<br/>process?}
    Q8 -->|Yes| R1
    Q8 -->|No| R3

    style R1 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R2 fill:#f4a261,stroke:#d4823e,color:#000
    style R3 fill:#e76f51,stroke:#c45a3f,color:#fff

Legend: Green = Screen Flow (admin-maintainable) | Orange = Hybrid | Red = Custom LWC (developer-required)

Agentforce vs Traditional Automation Decision

Use this when determining whether an AI agent (Agentforce) is appropriate for a customer scenario, or whether traditional automation (Flow/Apex/Einstein Bots) is the better fit.

flowchart TD
    Start([Customer Interaction<br/>Automation Need]) --> Q1{Does it require<br/>natural language<br/>understanding?}
    Q1 -->|No| Q2{Simple rule-based<br/>routing or FAQ?}
    Q2 -->|Yes| R1[Einstein Bots<br/>or Flow]
    Q2 -->|No| R2[Flow/Apex<br/>Automation]

    Q1 -->|Yes| Q3{Multi-step reasoning<br/>needed?}
    Q3 -->|No| Q4{High volume with<br/>simple intent matching?}
    Q4 -->|Yes| R3[Einstein Bots]
    Q4 -->|No| R4[Agentforce<br/>Single Topic]

    Q3 -->|Yes| Q5{Does the customer<br/>have Data Cloud?}
    Q5 -->|No| Q6{Is Data Cloud<br/>investment justified<br/>by the use case?}
    Q6 -->|Yes| R5[Agentforce + Data Cloud<br/>Implementation]
    Q6 -->|No| R6[Flow + Apex +<br/>Custom LWC]

    Q5 -->|Yes| Q7{Are existing Flows/Apex<br/>available as actions?}
    Q7 -->|Yes| R7[Agentforce<br/>with Existing Actions]
    Q7 -->|No| Q8{Budget for action<br/>development?}
    Q8 -->|Yes| R5
    Q8 -->|No| R8[Phased: Build Actions First<br/>then Add Agentforce]

    style R1 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R2 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R3 fill:#4ecdc4,stroke:#3ab5ad,color:#000
    style R4 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R5 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R6 fill:#f4a261,stroke:#d4823e,color:#000
    style R7 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R8 fill:#f4a261,stroke:#d4823e,color:#000

Legend: Green = Traditional Automation | Teal = Einstein Bots | Dark Teal = Agentforce | Orange = Hybrid/Phased

Agentforce Readiness Check

Before recommending Agentforce in a CTA scenario, verify three prerequisites: (1) the customer has or will invest in Data Cloud for grounded retrieval, (2) existing Flows and Apex can be exposed as agent actions, and (3) the use case genuinely benefits from multi-step reasoning rather than simple rule-based automation. Recommending Agentforce for a use case that a Screen Flow could handle signals over-engineering.


Automation Tool Selection (Comprehensive)

Use this when the scenario involves choosing from the full range of Salesforce automation tools, including modern features.

flowchart TD
    Start([Automation<br/>Requirement]) --> Q1{Does it need<br/>AI reasoning or<br/>NLU?}
    Q1 -->|Yes| AI{Multi-step<br/>autonomous<br/>reasoning?}
    AI -->|Yes| R1[Agentforce]
    AI -->|No| R2[Einstein Bots]

    Q1 -->|No| Q2{Is it a record-<br/>triggered automation?}
    Q2 -->|Yes| Q3{Only modifying<br/>triggering record?}
    Q3 -->|Yes| R3[Before-Save Flow]
    Q3 -->|No| Q4{Complex multi-object<br/>with 50K+ records?}
    Q4 -->|Yes| R4[Batch Apex]
    Q4 -->|No| R5[After-Save Flow<br/>or Apex Trigger]

    Q2 -->|No| Q5{Is it a guided<br/>user experience?}
    Q5 -->|Yes| Q6{Industry-specific with<br/>OmniStudio licensing?}
    Q6 -->|Yes| R6[OmniScript]
    Q6 -->|No| Q7{Complex custom UI?}
    Q7 -->|Yes| R7[Screen Flow +<br/>Custom LWC]
    Q7 -->|No| R8[Screen Flow]

    Q5 -->|No| Q8{Is it a long-running<br/>multi-step process?}
    Q8 -->|Yes| R9[Flow Orchestration]
    Q8 -->|No| Q9{Is it scheduled<br/>or recurring?}
    Q9 -->|Yes| Q10{Simple pattern<br/>under 50K records?}
    Q10 -->|Yes| R10[Scheduled Flow]
    Q10 -->|No| R11[Schedulable +<br/>Batch Apex]
    Q9 -->|No| R12[Autolaunched Flow<br/>or Apex]

    style R1 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R2 fill:#4ecdc4,stroke:#3ab5ad,color:#000
    style R3 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R5 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R6 fill:#1a535c,stroke:#0d3b44,color:#fff
    style R7 fill:#f4a261,stroke:#d4823e,color:#000
    style R8 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R9 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R10 fill:#2d6a4f,stroke:#1b4332,color:#fff
    style R4 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R11 fill:#e76f51,stroke:#c45a3f,color:#fff
    style R12 fill:#f4a261,stroke:#d4823e,color:#000

Legend: Green = Declarative | Dark Teal = AI-Powered | Teal = Einstein Bots | Orange = Hybrid | Red = Programmatic


How to Use These Guides in a CTA Scenario

  1. Identify the decision point in the scenario requirements
  2. Walk through the relevant flowchart step by step
  3. Document your path through the flowchart in your presentation notes
  4. Present the decision to the review board by explaining which questions you asked and how the answers led to your recommendation
  5. Acknowledge the trade-offs of the path not taken

Review Board Strategy

Having a systematic decision framework demonstrates architectural maturity. When a judge asks “Why did you choose X over Y?”, you can walk them through the decision tree rather than giving an ad-hoc justification.

Sources