If you have some choice of staff, the factors that may influence your decision are listed below. The most important factors vary depending on the application domain, the type of project and the skills of other members of the project team.
- Application domain experience For a project to develop a successful system, the developers must understand the application domain. It is essential that some members of a development team have some domain experience.
- Platform experience This may be significant if low-level programming is involved. Otherwise, this is not usually a critical attribute.
- Programming language experience This is normally only significant for short-duration projects where there is not enough time to learn a new language. While learning a language itself is not difficult, it takes several months to become proficient in using the associated libraries and components.
- Problem solving ability This is very important for software engineers who constantly have to solve technical problems. However, it is almost impossible to judge without knowing the work of the potential team member.
- Educational background This may provide an indicator of what the candidate knows and his or her ability to learn. This factor becomes increasingly irrelevant as engineers gain experience across a range of projects.
- Communication ability Project staff must be able to communicate orally and in writing with other engineers, managers and customers.
- Adaptability Adaptability may be judged by looking at the experience that candidates have had. This is an important attribute, as it indicates an ability to learn. Attitude Project staff should have a positive attitude toward their work and should be willing to learn new skills. This is an important attribute but often very difficult to assess.
- Personality This is an important attribute but difficult to assess. Candidates must be reasonably compatible with other team members. No particular type of personality is more or less suited to software engineering.
As a project manager, you may be faced with problems finding people with appropriate skills and experience. You may have to build your team using relatively inexperienced engineers. This may lead to problems because the team members don’t understand the application domain or the technology. However, in a long-term project, understanding of concepts and the application domain is more important than specific knowledge, particularly of programming languages and methods. Therefore, unless you need specific knowledge of a programming language for a short-term assignment, it is best to select staff who have problem-solving or domain experience. It is relatively easy to learn a new language but much more difficult to develop deeper conceptual knowledge required for complex problem solving.
Some companies test candidate team members. These include programming aptitude tests and psychometric tests that rely on candidates completing a number of small exercises in a relatively short time. Psychometric tests are intended to produce a psychological profile of the candidate indicating attitude and suitability for certain types of task. Some managers consider these tests to be useless; others think they provide helpful information for staff selection. I doubt whether aptitude tests provide useful information about problem solving ability. Solving complex software problems is a long-term, iterative process. I don’t believe that the skills needed for complex problem solving are comparable to the skills needed to complete simple aptitude test puzzles.
A lack of experienced technical people may be a result of organisational policy where technically skilled staff quickly reach a career plateau. To progress further, they have to become managers and this promotion inevitably means that useful technical skills are lost. To avoid this skill leakage, some large companies have developed parallel technical and managerial career structures of equal worth. Experienced technical people are rewarded at the same level as managers. As an individual’s career develops, he or she may specialise in either technical or managerial activities and move between them without losing status or salary.