Software engineering is about solving problems. You get hired, and solve problems. Time passes and you get better at solving these problems, so they give you harder problems in the same domain space. Eventually you get so good at solving these problems in this domain space that you become The Guy. "Oh you have a question about the FooWidget manager tool? Ask Joe, he's the FooWidget guy." By definition, being The Guy has mean you've reached a local maxima of productivity in the company.
It also means you're bored. It's not a case of possibly being bored, or eventually becoming bored. Once you are are no longer a problem solver, that means you're bored.
I've been a lead engineer at two different companies thus far in my career, and every time I end up wailing the same things to management. "You have to let me get Joe off FooWidgets. He's been working on it for nearly years and all you make him do are stupid enhancements nobody actually uses." But then who will maintain FooWidgets? "Hire someone. You could hire a college kid for the level enhancements you guys want. Or let me assign it to someone else on my team. But do something, because he is going to get bored and quit and we'll have to do this anyway, only Joe won't even be here to help transition." Will we be able to make enhancements to FooWidgets as fast if someone else works on it? "Not at first, but within a month--" Bzzt, wrong answer, Joe's still on FooWidgets. And sure enough, within six months, Joe takes another position and we're hosed.
So while Rands had some good heuristics for detecting boredom, you typically don't even need to ask them directly or look for behavior changes. Are they solving problems? If not, they're bored, and you have a ticking clock to do something about that engineer before he leaves.