A lead programmer's exact responsibilites vary from company to company, but in general they are responsible for the underlying architecture for the software program and for overseeing the work being done by any other software engineers working on the project. It is also common for them to act as mentors for new or lower-level software engineers.
Although the responsibilities are primarily technical, lead programmers also generally serve as an interface between the programmers and management and have some management responsibilities in delegating work and ensuring that software projects come in on time and budget. Lead programmers also serve as technical advisors to management and provide programming perspective on requirements. Generally a lead programmer will oversee a development team of between two and ten programmers with three to five being generally considered the ideal size. Teams larger than ten programmers tend to become unmanagable without additional structure.
Lead programmers are generally trained in software programming although many do not have formal degrees in the subject, and learn management responsibilities either on the job or through short courses. Because their primary training is technical rather than managerial, lead programmers tend to be seen and to seen themselves as part of the technical staff of a company rather as part of management. This cultural identification is important since subordinate programmers will tend to not take direction from someone who they perceive to be lacking in technical skill.