I work with productivity. It's what most agile coaches do; we try to create an environment that empowers teams and makes them as productive as possible. To do this you have to think an awful lot about motivation and psychology. About why some people perform and others don't. About what you can do to improve the situation and what you can't change. This led to me writing a blog post about talent that unfortunately Google decided to lose in their crash. While not the same blog post (I was especially happy with the original post) this one will address the same issues...
One can, in the software development industry, often get the impression that there are two types of developers. One category, the average developers, do their jobs well-enough but they lack that extra drive and talent to make them truly great programmers. The other category read all the blogs and books they can, know several programming languages, and have a constant hobby project or two that fills their free time. Most people who have worked in the industry an length of time will tell you to hire all of the talented developers you can as they are much more productive than the average developers. This is based upon the assumption that talent is something innate and unchanging. Based on my experience I am beginning to doubt this.
Too many companies are too focussed on delivering upon given promisses, too many developers too focussed on avoiding blame or following a plan to think creatively. We live in a world of problem solving, this world is not deterministic and is seldom entirely predictable and creative thinking is the key to good problem solving and therefore the key to building great systems. If we would spend less time making plans and then sticking to them in all weathers, less time chasing our developers and interrogating them as to why they didn't deliver exactly within their estimate (how can you estimate how long it takes to solve a problem?). If we would give the teams the responsibility for the quality of the code that they produce, instead of pushing them to work harder faster longer, then we would create better systems with more maintainable code. We would have enthusiastic developers hungry to learn more. We would have created a culture of talent.
If we cultivate a culture of initiative, freedom and creativity, if managers invest in their developers instead of trying to manage and control them, if we create an environment with clear goals and expectations and the freedom and trust for our teams to reach those goals in their own way, then I am convinced that we can give the vast majority of developers the drive and the enthusiasm to become talented developers.
In summary, I believe that developers can move freely between the two categories given the right (or the wrong) work situation. I'm not saying it is easy to create a culture of talent - it requires investment by the company and commitment by the managers, but it is possible and it is worth it.