Team Composition
Often, specific individuals have a significant impact on the successful delivery of a software solution. Unless the software is very simple, would be very difficult for even a new developer to make mistakes, and is to be delivered within an existing well-defined process, architecture, and deployment environment; then the specific people that are part of the process matter a lot. Developers with a lot of experience with the architecture and code and what is expected may be ten to twenty times more productive than developers lacking that experience. Developers that understand the product domain, that understand what the end users and customers want to achieve with the product, are more likely to develop the desired features most accurately. Experienced developers often need less well-defined processes and thus may be more productive with kanban, or no process; whereas junior developers are more likely to benefit from a well-defined process such as scrum. Knowing who to talk to in a company to get answers, and how to get along with others, and how to help others and share knowledge not only of coding, but of all elements of software development greatly impact the final solution. Of course, teams with developers that can identify and implement the best architecture, write quality maintainable code and understand what tools they need for such and how to use them are invaluable.