Note: as one progresses along a career path, one should possess and show all qualities of levels below.
Years of Experience: 5+
- Understands the broad architecture of the entire system
- Designs and implements subsystems of the software architecture that can scale and be reliable with minimal technical oversight
- Has knowledge of best practices: coding standards, architecture, testing, validation, data recovery; sets the standard for quality, scalability, and maintainability
- Understands/Can setup, manage and monitor application and infrastructure/build (i.e., deployment pipeline, logging, application monitoring and alerts, rollbacks, code quality checks)
- Able to help others in their debugging / problem solving, or debug complex problems on own
- Familiar/Comfortable with more than one area of the codebase
- Has a track record of improving stability, performance, monitoring, and scalability across services
- Has mastered several technologies which allows for evaluation/selection from new and known approaches to successfully implement projects of moderate complexity
- Understands the tradeoffs between technical, analytical, and product needs and leads in solutions that take all of these needs into account. Uses this knowledge to influence task prioritization
- Possesses empathy with the user of the software they are producing and uses that empathy to guide decision making
- Shows initiative by identifying and suggesting areas of future work for themselves and their team. Seeks evidence to support ideas and builds cases for these ideas, coordinating with others on cross-cutting technical issues
- Scopes and stages work into well-defined milestones to avoid a monolithic deliverable and regularly delivers software on time
- Identifies and proactively tackles technical debt before it grows into debt that requires significant up-front work to resolve
- Handles open-ended problems & ambiguity well
- Provides technical advice and weighs in on technical decisions that impact other teams or the company at large
- Consistently reduces the complexity of projects, services, and processes in order to get more done with less work
- Tailors communications to audience and can comfortably explain our technology in layman’s terms
- Clearly communicates timeline, scope and technical concerns
- Serves as proactive and efficient conduit for knowledge sharing across Product & Engineering
- Makes others better through code reviews, documentation, technical guidance, and mentoring
- Regular consults with other developers on architecture, best practices, and documentation
- Proactively identifies problems with requirements (lack of clarity, inconsistencies, technical limitations) for their own and adjacent work, and communicates these issues early to help course-correct
- Solicits feedback from others and is eager to find ways to improve. This includes seeking out opposing opinions to one's own, and regularly challenging what one knows and understands
- Regularly contributes to DoSomething's presence in the technology community, through speaking engagements, blogging or industry meetups
- Has a mentor relationship with other engineers. This is broadly defined as serving as an effective listener, giving constructive criticism often, and acting as a champion for others in order to facilitate growth. Knowledge sharing happens often via pairing, design review, code reviews, and presentations
- Comfortable doing R&D in new technologies & techniques
- Builds relationships with people both inside and outside of the organization
- Contributes to a framework or development practice. Has enough experience here to have a point of view, can argue for systemic improvements, and influences how we work and what we work on
- Drives decisions in meetings and situations where opinions may differ
- Self-aware of strengths and weaknesses; Intentional about career and growth