We work the same way on client engagements as we do on our own estate: infrastructure described in a repository, changes applied through automation, and a written record of what changed and why. That is deliberately unglamorous. It is also the reason a migration can be reversed and an outage can be explained.
Engagements start with a scoping conversation and a written statement of what we will do, what it costs, and what we are explicitly not doing. If the honest answer is that you should stay where you are, or that an off-the-shelf product solves it for less than our time costs, that is what the scoping call will say.