- Passion
- Wants to learn
- Eager to learn
- Aptitude
- Can learn a new language with little help
- Understands basics to a Language
- Language comprehension
- Understanding of programming languages and compilers
- Knows language syntax
- Competent in at least one language - able to complete a story
- Able to follow instructions without hand holding
- Conversant on basic software organization, algorithms, and data structures
- Can create an array
- Can create a string
- Can write working code
- Understands language constructs
- Can navigate tools
- Good problem solving
- Basic IDE understanding
- No need for tool specific knowledge
- Work independently
- Codes what is asked of them
- Able to lead a story to completion when pairing
- Competent in more than 1 language
- Shipped a project
- Able to follow along with a stronger developer
- Professionalism
- Can write a test
- Beginnings of design
- UML for white board discussions
- OO Design Patterns
- Fundamental understanding of principles of software design
- Understanding of design/architecture change impacts
- Drives local design
- Understands code idioms
- Understands SOLID design principles
- Problem Solvinng
- Thinks through complex problems
- Can work and solve problems with minimal direction
- Pair Leadership
- Mid-level pair leaders
- Continued Self Education
- Keeps up on Tech
- Familiar with several frameworks and technologies and can explain strengths and weaknesses
- Reads and follows external resources in the community
- Open to new methodologies
- Understands cost/benefit
- Can professionally push back on bad requirements and offer alternatives
- Tech Leadership
- Get a basic understanding of new technology as needed
- Mentoring
- Helps teach design and syntax to new developers
- Drives change
- Abstract Problem Solving
- Testing
- Can write tests with no guidance
- Understands different testing approaches
- Breadth of project types
- Design/Architecture
- Can recognize trade offs in design
- Helps discover what to build
- Understands proper pattern use
- Understands SOLID, YAGNI, Demeter, etc.
- Helps others discover architecture
- Drive choices to minimize futre pain in change
- Can view the system as a whole and know where lines can be separated
- Leadership
- Able to lead an entire software project life cycle
- Complete Systems
- Can write complex systems alone