Great Software Engineers
Great software engineers...
Coding Skills and Code Base Ownership
- write efficient, minimal, consistently laid out code
- first write a suite of unit tests that validates that code to be written will work as intended (where unit tests are approriate, such as for core production logic)
- provide an appropriate level of non-mechanical comments and documentation, especially for API/public function headers, and for tricky parts of the code
- do not ever cut and paste code
- have a fanatical sense of ownership for the software code base, keep it clean, and aggressively refactor
- initiate discussion with others if they bring a different style to the code base
- can architect scalable, reliable, high-speed services spanning multiple machines
- design a clean, layered architecture of packages so that each package can be independently tested
- write efficient, correct multi-threaded code
- develop and express informed strong opinions about how to develop software
- read programming journals, programming Web sites, Computer Science books on their own
- continuously learn and try out new ways to build software, and bring that to bear on the company's software
- clearly and continuously communicate what they are working on
- volunteer honest completion estimates and always (roughly) meet them
- work with others in the sense that they are willing to give and take in a discussion about how to structure a piece of code, but then stick to the group decision like a lamb afterwards (without any whining or undercutting the group decision!)
- initiate meetings with customers and team members when appropriate
- seek others' help whenever they are "stuck" rather than staying in a stuck state until someone inquires
- communicate if the requirements or spec are unclear and propose the clarification
- show great enthusiasm and positive attitude about whatever project they are on, and evangelize about it to others in the company
- intensely finish (just) the current task (without over-engineering the solution) then come back and ask for a new one (or even better, propose it)
- really are completely done when they say they are, having changed all code affected and done an adequate amount of automated and maual testing (rather than leaving it to others to find bugs, remove commented-out code, etc. etc. later...)