The material below is adapted from the guidelines for annual performance reviews at a well-known software development company. It's an accurate depiction of what companies care about, and can be used as a starting point for self-evaluation or peer evaluation in a project course.
Includes technical design; architecture; coding; debugging; testing; performance optimization; release; and maintenance.
- Records technical requirements, architectural decisions, and other relevant information.
- Does "just enough" design to answer all stakeholders' questions; analyzes and reviews peers' designs; takes resource usage into account during design; no "hidden features"; takes security needs into account.
- Plans for evolution and maintenance.
- Avoids excessive dependencies; allows for future maintenance; accounts for deployment issues, particularly upgrades.
- Uses configuration management system effectively.
- All project-related material is versioned; never breaks the build; all changes are connected to issues in an auditable way.
- Uses issue tracking system effectively.
- All questions, tasks, and bugs are issues; all work is associated with issues; issues are kept up to date to serve as a basis for auditable status reports; avoids creating redundant/duplicate issues.
- Manages schedule.
- Provides time estimates on work items, and updates completion estimates as work progresses; proactively reports delays and other scheduling-related issues to affected stakeholders; proactively searches for ways to reduce the project's critical path.
- Conforms to company coding guidelines.
- Code always passes format checks; documentation of all inter-module and externally-visible APIs is always up to date on main branch; developer-oriented documentation phrased in terms of recognized design patterns where relevant.
Includes verbal communication; written reports; presentations; email; wikis; blogs; active listening skills; feedback and critiques.
- Effectively communicates with peers and stakeholders in a
- Regular and timely fashion. collaborates regularly with colleagues from other divisions; updates manager and team regularly and accurately on status.
- Asks for assistance when needed.
- Seeks answers before asking for assistance, but escalates problems when blocked; when asking for help, clearly and accurately explains what has been tried, and why it didn't work.
- Provides helpful feedback to peers.
- Takes active role in design meetings, code reviews, etc.; provides specific examples and suggestions for improvement when critiquing colleagues' work.
- Improves efficiency.
- Automates repetitive tasks through scripts, macros, etc.; proactively does in-phase work that will reduce time and overhead in subsequent work phases.
- Proactively expands network of personal contacts.
- Participates in relevant internal discussion groups; takes initiative to establish contacts with colleagues in upstream and downstream groups.
Includes sharing knowledge; innovating; continued development of personal skills.
- Proactively shares knowledge with peers.
- Mentoring; blogging tips and tricks; updating project wiki; provides training.
- Looks for opportunities to innovate.
- Willing to import relevant knowledge from other groups/projects/companies; stays current with relevant literature; proposes and pursues patents.
- Actively improves expertise.
- Attends training courses; seeks to understand goals and techniques of upstream and downstream groups; proactively adopts good practices used by peers.
Includes communicating vision to peers and subordinates; fostering a supportive environment; taking a "big picture" view of product development.
- Takes part in team-building activities.
- Interviews potential hires; helps orient new hires; communicates consistently with subordinates regarding their status and performance; takes part in out-of-hours social events.
- Solves problems proactively and methodically.
- Identifies risks; prioritizes outstanding issues; looks for low-cost/low-risk ways to solve or avoid problems; prefers "win-win" solutions to "zero-sum" solutions.
- Uses metrics for process improvement.
- Measures and records development times, memory/CPU loads, etc.; translates this data into recommendations for process and/or product improvement.
- Contributes to project planning.
- Participates in postmortems; evaluates feasibility of design and feature proposals; explains technical issues/opportunities to upstream and downstream colleagues.