Key takeaway
Scope creep isn't caused by teams saying yes too often, it's caused by no record of what they said yes to.
Scope creep gets talked about like a willpower problem, as though the team just needs to get better at saying no. In practice, it is far more often a process gap: there was never a single place where a new request got written down, checked against the agreed scope, and explicitly accepted or declined. It arrived in an email, got a quick "sure, we can probably fit that in" reply, and was never logged as a change to the plan at all.
By the time enough of these accumulate to blow a deadline, nobody can point to the moment scope actually changed, because it never happened as one event. It happened as a dozen small, reasonable-sounding yeses, none of which were weighed against what they were adding up to.
Why "just say no more" doesn't fix it
Telling a team to hold the line on scope assumes the team can always tell, in the moment, whether a request is in scope or not. Often they genuinely cannot, because the original scope was itself a paragraph in a proposal document nobody has open while replying to a client's email. Without an easy way to check what was actually agreed, a reasonable person will default to being accommodating, and accommodating one small ask at a time is exactly how scope creeps.
What a real intake process looks like
It does not need to be heavyweight. It needs exactly two things: scope and out-of-scope written down somewhere anyone can check in seconds, and a habit of logging a new request as a request, even briefly, before agreeing to it, so it is visible rather than absorbed silently into the task list. That visibility is what turns scope creep from something a team gets blamed for after the fact into something a PM can actually manage while it is still small.