The adapter is where ownership starts
When a form handler directly knows how to create a CRM record, send an email, and format every provider-specific payload, the application becomes harder to change and harder to recover when downstream behavior fails.
A clear adapter boundary makes the public contract stable while allowing Salesforce, email, or workflow providers to evolve independently.
Failure is part of the design
Downstream systems fail, reject payloads, rate limit requests, or change expected fields. Integration design should define what happens when that occurs: what is logged, what is persisted, what the user sees, and how an operator can replay or resolve the failure.
Validation belongs before side effects
Every external input should be shaped, trimmed, length-limited, and validated before it is trusted. Bot challenges should be verified server-side before durable writes or downstream calls happen.
