When interviewing potential software engineers, most people care for technical competence, for some degree (as a proof of the ability to finish a project), and for a social fit with the current team. Further aspects worth looking for include:
- amount and kind of project experience;
- experience in different roles and project phases;
- ability and will to learn.
The initiation and the finalization of a project are more tightly linked than you can possibly learn in class. It is extremely helpful to have project team members who can sense the outcome of certain early decisions. There seems to be no more significant factor to project success than the presence of programmers who have previously worked on successful projects. Project success is created in each single phase of the project, and in each participating role. Seasoned project engineers not only know what to do about the project, they also know how their behaviour and decisions influences other people. Knowing a role also from the outside helps to fill it more successfully and sustainable.
There is a second aspect to this experience: learning about your skills and desires. Before you have not been involved in testing, or project management, it is hard to tell whether this is something you like doing and whether you are good at it. When you have the opportunity, participate in each phase of some project, from early conception to the last episode of maintenance. The role you like best and the one you are best at are likely the same – but if not there are good reasons to choose one you are good at. The project benefits from that decision, you likely are more successful and quicker at work, and you have the opportunity to grow beyond your role.
The ability to determine a project is doomed while it is still in acquisition or in definition can be extremely helpful. But this is only the start. More helpful is the ability to make a project fail early. Even more valuable is to know what you can do about indications of doom, and how to turn it into success. Furthermore, before the software is ready, the project is not finished. Again, it is easy to know that a project may fail almost touching the finishing line. The hard part is knowing the difference between the finishing line, and almost the finishing line. And what to do to bridge this gap.
So here is the career-making advice: attend successful projects. Attend lots of projects, and learn.
Join projects in whatever phase, and strive to make them successful. Take care that while you see more projects, that you actively join each phase at least once. If you happen to join a team or company that fails to complete projects: see what you can learn, gather experience, and leave. There is a lot of learning in failure – but you need your opportunity to join a successful project, and to join each phase of a successful project.