"Don't let obsolescence sneak up on you like a pair of tight pants."
The purpose of this document is to identify the characteristics of a lynchpin software engineer. It serves as a template for self review to identify areas of personal strengths and weaknesses so that changes can be made to achieve personal goals in the industry.
This review should be conducted a few times each year to make sure progress is being made.
This document should be inspected for necessary changes with each review.
- Understands the computational problems faced by customers
- Translates ideas and solutions into clear, readable code
- Has logical and analytical approach to problem-solving
Range:
- (Worst) Creates code only from well-defined requests
- (Best) Conquers complex problems in elegant way with minimal production-level issues
- Has right mixture of personal traits for working with a team to solve complex problems
- Is friendly, approachable, and fun to work with
- Passes the Sunday Test
Range:
- (Worst) Total loner that can't work cohesively with others
- (Best) Often the first programmer others turn to for help and brings out the best in the team
- Is familiar with industry trends and can identify emerging/promising technologies before they are mainstream
- Has a keen sense for solving customer problems in the context of chosen technologies
- Can be described as extremely proficient in at least one language
- Is familiar with the full technology stack and can develope/deploy an application independently
Range:
- (Worst) Very specialized with a narrow skillset, often dependent on others for assistance
- (Best) Broad experience in different domains and platforms
- Cares about work
- Shows enthusiasm for the problems at hand
- Displays an interest and love for programming that extends outside the workplace
- Has a record of completing passion projects or contributing to those of others
Range:
- (Worst) Programs only for money
- (Best) Implements interesting ideas in spare time
– Knows and uses sound software development principles
- Approaches problems as Agile
- Employs design and architectural patterns where appropriate
- Employs test-driven design
- Refactors frequently, and constantly improves existing codebase
- Is aware of shortcomings as a programmer and displays humility
Range:
- (Worst) Total amateur
- (Best) Black Belt Guru fluent in all best practices
- Understands what is possible within the context of the chosen technology
- Appreciates simplicity and avoids over-engineering
- Shows a strong understanding of the customer or product's business goals
- Focuses efforts on understanding the fundamentals of a chosen technology
Range:
- (Worst) Spontaneous, pie-in-the-sky dreamer
- (Best) Self-driven pragmatic achiever
- Listens
- Accepts that other people could have better ideas
- Supports team goals without hidden agenda
- Shares ideas and knowledge with the team
- Shows strong willingness to mentor junior programmers and help them achieve their goals
Range:
- (Worst) Liability to the team
- (Best) Team coach
- Effectively communicates and exchanges ideas
- Supports knowledge and decisions about the system with clear explanations
- Is able to clearly justify design decisions
- Can provide clear, concise answers to technical questions and answers (
Range:
- (Worst) Cave-dwelling code monkey
- (Best) System expert that can quickly bring others up to speed
- Has professional goals
- Has good learning skills and an ability to pick up new technologies quickly
- Has curiosity for new languages, specifications, libraries, or frameworks
- Displays adaptability and performs constant self correction
Range:
- (Worst) Has reached his limits due to unwillingness to change
- (Best) On a trajectory to reach his goals as the next programming star with zero changes
- Sees the big picture for the product
- Has foresight for problems not yet encountered
- Understands the real world context of the product and the changing landscape
- Aligns actions with team goals
- Contributes to shared team vision of the product
Range:
- (Worst) Only interested in programming
- (Best) Team leader and product visionary
- Which characteristics are missing from this document? How would I be ranked?