The role of a software coach
A software coach enhances the effectiveness of a software development team by bringing out the team's strengths and mitigating its weaknesses. Just as sports coaches do, software coaches examine the contributions made by individuals and the interplay between team members. But the software coach also often takes the role of facilitatator: moderating in awkward discussions, assisting with brainstorming, or helping the team to reach collective decisions. The coach usually teaches the team new skills as well - a coach will certainly spread the existing good practices that they uncover - and when a coach is used to introduce a new way of working they become the agent of change that makes the transition to the new process possible.
The difference between a software coach and the more traditional roles of lead programmer or project manager boils down to responsibility. A traditional project manager is responsible for delivering a software project, for example shifting obstacles to success or building strong relationships with the project's sponsors. A traditional lead programmer is responsible for delivering the working software that the project depends upon, and has explicit software writing or designing tasks. Whereas a coach is responsible for delivering the most effective team possible given the nature and duration of the project. (Which is not to say that the coach doesn't pitch in with the team to write software - it just isn't their primary activity.)
The role of the coach was first defined in Extreme Programming but really a coach adds value to any kind of agile software development team. (And business coaches are now proposed to improve the interaction between business customers and their software teams.) XP teams in particular require a coach because XP is a high discipline process, and the coach's feedback maintains the practices on which XP relies. For more information about XP coaching see the presentation I gave at the 2002 London XP Day.