A persona captures assumptions around work styles and motivations. Not all programmers are motivated by the same things or have the same goals. A sales engineer might have a different set of problems to solve than a senior developer in R&D, and might be accustomed to working in quite a different way. Yet both may have to code against the same libraries using the same tools. Is it possible to satisfy both groups of programmer-users? Are there API-design or tool-design best practices that apply across the board regardless of persona type? What do we know about the things that work for one programmer persona but not another?
The formulation of persona types is obviously somewhat arbitrary, but it's interesting that Microsoft did go to the trouble to observe programmers working not only in usability labs but in their "natural habitats" over a period of 12 months in order to arrive at three main personas:
- THE SYSTEMATIC DEVELOPER: Writes code defensively. Does everything he or she can to protect code from unstable and untrustworthy processes running in parallel with their code. Develops a deep understanding of a technology before using it. Prides himself or herself on building elegant solutions.
- THE PRAGMATIC DEVELOPER: Writes code methodically. Develops sufficient understanding of a technology to enable competent use of it. Prides himself or herself on building robust applications.
- THE OPPORTUNISTIC DEVELOPER: Writes code in an exploratory fashion. Develops a sufficient understanding of a technology to understand how it can solve a business problem. Prides himself/herself on solving business problems.
For people in the tooling and API-design business, there's a lot to think about here. Ask yourself: Do you know what the personas of your users might be like? Are you taking that information into account in your API, SDK, and tool designs? Do you do serious usability testing of your APIs and development tools before putting them in the hands of customers? If not, why not?
Giving programmers usable tools, it seems to me, is the first step to making programmers more productive. And that benefits everyone.