Entry ===== - 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 Mid/Jr ====== - 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 Senior ====== - 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