1. Intellect – can understand the problem, translate and express ideas in clear and readable code, has analytical and logical mind.
2. Personality – has right mixture of personal traits like detail-oriented, creative, flexible, disciplined, sociable, independent etc.
3. Expertise – knowledge and experience for solving client’s problems in the specific context with chosen technologies.
4. Motivation – cares about work, shows enthusiasm, interest and love for programming.
5. Maturity – knows and uses sound software development principles, practices and approaches as agile, design and architecture patterns, domain-driven design, unit testing, refactoring.
6. Pragmatism – understands what is possible, loves simplicity and avoids over-engineering; understands business goals, keeps touch with reality and focus on what should be done.
7. Cooperation – listens, accepts that other people could have better ideas, supports team goals without hidden agenda, shares ideas and knowledge and coach others.
8. Communication – effectively communicates and exchanges ideas, supports knowledge and decisions about the system with clear explanations, justifications and answers.
9. Potential – has professional goals, good learning skills, curiosity, adaptability and performs constant self correction.
10. Vision - sees the big picture, understands context, trends and people, aligns actions with team and company implicit goals, contributes into building shared vision for the software system.