| I'll share my coaching criteria as a manager: an acceptable Junior Software Engineer...
uses tools to make properly formatted code produces readable code, mostly self-documenting becomes a 'goto person' on code after spending 2 total weeks in it. rarely goes 3 days without obvious progress or output to the sprint team is comfortable making estimates about new work is comfortable re-using existing patterns for new work, even in unfamiliar code can explain the 'why' of processes and rules, and be able to see situations where they may not apply understands agile development and participates effectively ---------------- a Senior Software Engineer...
is also a Software Engineer with everything that comes with it is a team representative of code, projects, and end-users has a running list of 5 things the team or the team's code is weak in, and could be doing better considers edge cases well, writes bulletproof code understands integration points with other teams and projects reliably resolves tickets in team's estimated timeframe. does code reviews and design reviews that are kind and instructive is able to refactor code to improve maintainability without being too aggressive and causing additional problems is able to help any other dev with problems in any of the team's code is capable of teaching a new employee about all of the team's code, projects, and end-users brings innovative ideas back to the team from reading, experimentation, and conversations in addition to normal work is a student of agile development and can effectively coach and mentor others in agile development maintains good relationships among cross-functional team members can boldly estimate very low or very high for new work, keen prediction for the very easy and very hard can sense CPU, memory, and computation time problems in code
invents new patterns and solutions rather than always using existing patterns sees the give and take in processes and rules, uses them as a tool for guidance not to be followed rigidly 100% if not best for the company understands feelings and history about codebases and projects, not just the immediately apparent facts is not just extremely knowledgeable, but also with passion and proper application and improvisation of concepts |