The other day an interviewer asked me to volunteer what I thought were the most important factors to successful software development.
That's a really good question.
I don't think you can have a definitive answer, but off the top of my head I thought of three things. These might not be the _most_ important, but they are certainly _very_ important.
1) Learning what is to be built. I say learning, not knowing, to emphasize that it is an ongoing process. At day one on the project, you know the least about the project and the needs of the users. By the end of the project, you will have learned the most about it. Learning continues throughout the project lifecycle, and reaches it's height closer to the end than the beginning. Therefore it makes sense to use an agile and iterative approach; to defer critical decision making until late in the project; and to fundamentally to realize that we will be constantly working with incomplete knowledge.
2) Correctly applying skill levels. There is a vast difference in performance between highly skilled developers and moderately skilled or novice developers. A project can produce more code, more quickly, with 2 or 3 highly skilled developers than it can with 20 of lesser skills. Teams of novices need to be treated as "farm teams" and developed within the organization to produce highly skilled developers for the demanding production-ready small teams. Developers need to be compensated according to the value they deliver to the organization; we're not interchangeable based on our stated "salary grade" or years of experience; these are unreliable measures.
3) Maintaining good hygiene. In most professions, there are standards and regulations to keep the workplace clean to prevent injury or product damage. We are no different: every project needs robust and reliable version control and backup strategies (including offsite backup and support for mobile-enabled version control). Every project needs developer-level unit tests in place for all submitted code, and all code should be examined by at least one other developer other than it's author, whether by formal or informal code reviews or continuous review as in pair-programming.
The most important things? Probably not. But it's a good start.
What do you think the most important thing is?