Building Software Together

Appendix J: Personal Evaluation

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.

Software Engineering

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.

Domain expertise

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.