- 1: Start Development with Software Requirements
- 2: Honor Your Users and Communicate with Them Often
- 3: Don't Allow Unwarranted Requirements Changes
- 4: Invest Up Front in Software Architecture
- 5: Don't Confuse Products with Standards
- 6: Recognize and Retain Your Top Talent
- 7: Understand Object-Oriented Technology
- 8: Design Web-Centric Applications and Reusable Components
- 9: Plan for Change
- 10: Implement and Always Adhere to a Production Acceptance Process
- Harris Kern's Enterprise Computing Institute
6: Recognize and Retain Your Top Talent
Too many software development books concentrate on technology or management practices. At the end of the day, a lot of your success in software development will come down to who you have working for you and how happy they are in their work. You can have the best technology and organize your team in the best way possible, but if you have the wrong team it won't do you much good. Another surprise, given the effort so many organizations put into recruiting talent, is their failure to recognize and retain that talent after they join the organization.
Organizations that are successful at retaining their top talent start by recognizing their top talent. Plenty of metrics can be gathered around a developer's productivity and quality. Don't forget, however, the more subjective criteria summarized in Table 3. Who are the developers who always show up at other code reviews and make constructive comments? Who is known as the "go to" person when you have a tough bug to find? Which developers really understand your business? Who has the best contacts with your customers? Be sure not to concentrate 100% on hard metrics and overlook factors such as these. Once you know which developer(s) you want to keep around, go about thinking of ways to make that happen.
Table 3 Traits of Successful Developers
Skill Dimension |
Trait |
Example(s) |
Technical |
Operating system knowledge |
Understands operating system (OS) principles and the impact of OS on code design choices |
Networking knowledge |
Understands networking infrastructure and matches application network demands to available infrastructure |
|
Data management |
Understands how and when to use databases, transaction monitors, and other middleware components |
|
Hardware |
Knows the limits of what can be accomplished by the software application on various hardware configurations |
|
Business |
Understands the business |
Differentiates between "nice to have" requirements and those that are essential to the function of the application |
Market knowledge |
Keeps up to date on developer's tools, frameworks, and hardware |
|
Professional |
Written and verbal communication |
Effective presenter at code reviews; documentation is easy to read and understand |
Teamwork |
Participates actively in other developers' code reviews |
|
Flexibility |
Can work well on a wide variety of coding assignments |
|
Reliability |
Completes assignments on time; strong work ethic |
|
Problem-solving skills |
Viewed as a "go to" person for help in solving difficult software bugs |
Throughout most of the 1990s, demand for skilled high-technology workers far exceeded the supply. It's easy to throw software developers into this general category and assume that good developers are no harder to find than other high-tech workers. Based on our experiences, however, we believe that good software developers are even more scarce than good IT personnel in general. Just consider some of the numbers. The Java language was introduced as a new programming language in 1995. The worldwide estimated demand Java programmers stands at over 1 million. While retaining existing developers to program in the Java language has filled much of this demand, it still represents a tremendous outstripping of the supply of knowledgeable Java programmers.
Developer skill, more than any other factor, is the largest single determinant to the outcome of successful software projects. This is reflected in software costing and scheduling models, most of which place higher weighing factors on developer skill than all other factors, including project complexity. In other words, skilled developers working on a complex software development project are more likely to produce a successful application than less-skilled developers working on a simpler project. Studies have shown that top developers can be 23 times more productive than average developers and up to 100 times more productive than poor developers. This wide range of productivity and its standard deviation is higher than for any other profession. Good developers not only produce more lines of codetheir code has fewer errors, and is of higher general quality (performs better, is more readable, is more maintainable, and exceeds in other subjective and objective factors) than code produced by average or poor developers.
One false belief we've heard from many software development managers, especially those without a development background, is the notion that as development tools become more advanced, they "level the playing field" between average and great developers. Anyone who has ever attended a software development-related convention has seen slick demonstrations showing how "nonprogrammers" can use a development tool to quickly build an application from scratch. Modern development tools, especially the integrated development environment (IDE) that addresses everything from requirements definition to testing, certainly help developer productivity. This is especially true in the area of graphical user interface (GUI) code. Even with the best of IDEs, however, there remains a highly intellectual component to software development. The best software requirements, the best software architectures, and the most error-free code continue to come from the best software developers and software architects.
Rather than leveling the playing field, our experiences have shown that good IDEs, used as part of the development process, increase rather than decrease the difference between average and great developers. There is often a compounding effect as an unskilled developer misuses a built-in function of the IDE, introducing bugs into the program, while never gaining the experience of thinking out the complete solution. Of course, we don't oppose the use of good IDEs or the concept of code reuse. It's just that neither of these is a substitute for developer skill.