The n habits of highly effective developers

There is a famous book “The Seven Habits of Highly Effective People” by Stephen R. Covey, I have been thinking about what are the n habits of a great developer. Below is my list, which has some clear parallels to the book. Suggestions? Missing items?

1. When fixing a defect a great developer searches for similar defects and fixes them. Frequently, a defect is caused by a mental lapse that is repeated throughout the code. A great developer searches for other defects caused by similar lapses. Since defects are expensive to find and fix this can make the developer much more productive.

2. A great developer removes systemic issues. Code patterns, like poorly factored APIs and duplicate code, can cause lost productivity. Great developers look for these issues and fix the ones that are more costly, over the long term, to leave in the code than to fix. This can mesh well with habit 1 if by, say, adding a static analysis test a developer not only finds all the existing similar defects but prevents them from reoccurring.

3. A great developer files defect reports and suggestions against other teams. This not only improves other people’s experience but also helps ensure the great developer will not see the issue in the future. Microsoft makes this easy to do through and the various “Send feedback to Microsoft” features of Microsoft’s products. As well, this can improve the great developer’s network by creating contacts with other great developers.

4. Great developers create a simple working system with unit tests early and then refine it. This approach drives confidence, makes it easier for testers and documenters but most importantly prevents over engineering. It is easy to create code that solves non-existent problems. By working this way, great developers only create the code they need to.

5. Great developers are intentional about their career and self-improvement. They put effort into honestly assessing their weaknesses and strengths then take steps to reinforce their strengths and eliminate their weaknesses. The easiest way to do this is to schedule half an hour every week and use the time to ask yourself what you did right and what you did wrong during the week and then take steps to improve—I have often seen this turn a mediocre developer into a star.

6. Great developers enable scenarios and experiences not features. By understanding customer’s needs, in an end-to-end fashion, great developers can create products that customers love and save effort building useless features. By thinking about the experience as a whole and not just their area, they improve the entire system not just their individual applications.