Solution Architecture Trade-Offs
Architecture is the art of making trade-offs. Every decision involves giving up something to gain something else. The CTA review board specifically evaluates whether candidates can articulate trade-offs — not just what they chose, but what they gave up and why the trade-off was acceptable.
The Trade-Off Framework
For every architectural decision, articulate:
- What you chose — the recommended approach
- What you gave up — the benefits of the alternative
- Why the trade-off is acceptable — the specific context that makes your choice the right one
- When this trade-off would flip — what conditions would make the other choice better
flowchart TD
A[Architectural Decision] --> B[Identify Options]
B --> C[Option A]
B --> D[Option B]
C --> E[What you gain]
C --> F[What you sacrifice]
D --> G[What you gain]
D --> H[What you sacrifice]
E --> I{Scenario context<br/>favors which?}
F --> I
G --> I
H --> I
I --> J[Recommend with justification]
J --> K[State when trade-off flips]
J --> L[Define mitigation for sacrifice]
Declarative vs Programmatic
Choosing Declarative (Flow)
| You Gain | You Give Up |
|---|---|
| Admin maintainability | Fine-grained control over execution |
| Lower deployment risk | Automated testing capabilities |
| Faster initial development | Performance optimization options |
| Visual documentation (the Flow itself) | Debuggability with stack traces |
| No code review needed | Version control with meaningful diffs |
| Accessible to a larger team | Complex error handling patterns |
When this trade-off is right: The customer’s team is admin-heavy, the logic is straightforward, and long-term maintainability by non-developers is a priority.
When this trade-off flips: The logic involves complex data transformations, the volume exceeds Flow’s comfortable range (50K+ records), or the customer has a strong development team and CI/CD pipeline.
Choosing Programmatic (Apex)
| You Gain | You Give Up |
|---|---|
| Full control over execution | Admin accessibility |
| Automated, CI/CD-ready testing | Quick iteration by admins |
| Performance optimization | Visual representation of logic |
| Complex error handling | Low deployment risk |
| Meaningful version control diffs | Broader team participation |
| Debuggability with IDE tools | Speed of initial development |
When this trade-off is right: The logic is complex, the team is developer-centric, the CI/CD pipeline is mature, and the solution needs to handle high volumes or complex transactions.
When this trade-off flips: The customer lacks developers for ongoing maintenance, the logic is simple enough that Apex is over-engineering, or rapid iteration by business users is a priority.
Native vs AppExchange
Choosing Native (Custom Build)
| You Gain | You Give Up |
|---|---|
| Full control over functionality | Vendor-maintained updates and features |
| No per-user licensing costs | Out-of-box functionality from day one |
| No namespace/governor limit conflicts | Proven, market-tested solution |
| Complete ownership of IP | Community of users and documentation |
| Flexibility to change direction | Vendor support and SLAs |
When this trade-off is right: The capability is core to competitive advantage, the team has the skills to build and maintain it, and the requirements are unique enough that no package fits well.
When this trade-off flips: The capability is commoditized (e-signature, CPQ, document generation), the team lacks development capacity, or speed-to-market is critical.
Choosing AppExchange
| You Gain | You Give Up |
|---|---|
| Immediate functionality | Full control over the roadmap |
| Vendor-maintained upgrades | Customization flexibility |
| Proven at scale | Namespace and governor limit overhead |
| Support and documentation | Ownership of the solution |
| Security-reviewed code | Exit strategy complexity |
When this trade-off is right: The capability is non-differentiating, speed-to-market matters, and the vendor has a strong track record with a clear upgrade path.
When this trade-off flips: The package meets less than 80% of requirements, the vendor shows financial instability, or the governor limit impact is unacceptable.
Configuration vs Customization
Choosing Configuration
| You Gain | You Give Up |
|---|---|
| Upgrade-safe changes | Unlimited flexibility |
| Admin-deployable | Complex UI/UX patterns |
| Faster implementation | Performance tuning |
| Standard Salesforce patterns | Unique competitive features |
When this trade-off is right: The requirements align with standard Salesforce capabilities. The customer wants to stay close to the platform standard to minimize upgrade risk.
When this trade-off flips: The customer’s business process is truly unique and cannot be reasonably mapped to standard Salesforce workflows, or the UX requirements demand custom components.
Choosing Customization
| You Gain | You Give Up |
|---|---|
| Exact fit to requirements | Upgrade safety |
| Differentiated UX | Broad team maintainability |
| Performance optimization | Rapid deployment |
| Competitive advantage | Standard documentation |
When this trade-off is right: The feature directly impacts revenue or customer experience, the team can maintain it, and the investment is justified by the business value.
When this trade-off flips: The custom solution does the same thing standard Salesforce does, just differently. If you cannot articulate a clear business reason for the customization, it is over-engineering.
LWC vs Aura (Migration Decision)
Migrating to LWC
| You Gain | You Give Up |
|---|---|
| Modern web standards | Existing component stability |
| Better performance | Developer time for rewrite |
| Growing community/talent | Tested, production-proven code |
| Future platform alignment | Low-risk status quo |
Keeping Aura
| You Gain | You Give Up |
|---|---|
| Stability and proven behavior | Performance improvements |
| No migration risk | Modern development experience |
| Zero rewrite cost | Future platform alignment |
| Existing test coverage | Growing talent pool |
The Pragmatic CTA Answer
“Keep existing stable Aura, write all new components in LWC, migrate Aura to LWC opportunistically when you are modifying the component anyway.” This shows the review board that you understand both the value of modernization and the cost of unnecessary rewrites.
Cross-Cutting Trade-Off: Speed vs Quality
This trade-off appears in almost every CTA scenario. The customer wants to go fast. The architect knows shortcuts create debt.
| Factor | Optimize for Speed | Optimize for Quality |
|---|---|---|
| Testing | Manual testing, UAT only | Automated tests, CI/CD pipeline |
| Documentation | Minimal, code-is-documentation | Comprehensive ADRs, runbooks |
| Error handling | Basic fault paths | Full retry logic, dead-letter queues |
| Data model | Quick fields on existing objects | Proper object model with relationships |
| Integration | Point-to-point callouts | Middleware with monitoring |
The CTA answer: Phase the approach. Deliver an MVP with acceptable shortcuts (documented as technical debt), then harden in subsequent phases. This shows pragmatism without sacrificing architectural integrity.
How to Present Trade-Offs to the Review Board
Structure your trade-off discussion as:
- State the decision: “For document generation, I recommend Conga Composer over a custom solution.”
- State what you gain: “This gives us immediate functionality, vendor support, and proven templates.”
- State what you give up: “We give up full customization control and take on a per-user license cost.”
- State why the trade-off is acceptable: “Because document generation is not this company’s competitive advantage, and the TCO is favorable over 3 years.”
- State when this would change: “If their template requirements become highly dynamic or they scale beyond 10,000 documents per day, we would revisit with a custom solution.”
flowchart LR
subgraph Presentation["Trade-Off Presentation Flow"]
direction TB
S1["1. State the decision"] --> S2["2. What you gain"]
S2 --> S3["3. What you give up"]
S3 --> S4["4. Why trade-off is acceptable<br/>(scenario-specific reason)"]
S4 --> S5["5. When this would change"]
end
Related Topics
- Declarative vs Programmatic — Detailed Flow vs Apex analysis
- Build vs Buy — Full evaluation framework and TCO analysis
- Modern Platform Features — Technology options and their trade-offs
- Decision Guides — Visual decision flowcharts
- Best Practices — Patterns that help manage trade-offs
Sources
- Salesforce Architects: Well-Architected Framework
- Salesforce Architects: Architecture Trade-Off Analysis
- Martin Fowler: Design Stamina Hypothesis
- CTA Study Groups: Community frameworks for articulating trade-offs during the review board