There are a lot of software development approaches and methodologies out there.
What do they do? Which should you choose?
First of all, I think you need to know — and choose — what you are optimizing for.
Are you looking to develop software for the lowest possible price with a “minimally viable” product as the result?
Are you looking to develop software that is rarely updated (think embedded), but needs to function perfectly?
Are you looking for code that is easy to maintain over the long term?
Are you looking for the customers to tell you what to do or are you looking to drive innovation?
Are you creating something truly new or just doing a lower cost version of something someone else has done? etc…
These are just a few of things people could be optimizing for, and their relative priorities might differ.
Approaches like Scrum and Agile assume change is the most important thing to adapt to — and that delivering potentially shippable product each iteration is the most important thing to do.
If that fits your optimization levels, that might be one way to go;
However, potentially shippable code each iteration turns the project into a maintenance game early on — perhaps you might want to prototype first and create space for ideation and not just daily status reports.
The key here, as always, is judgement, experience, and talent.
No methodology will substitute for that.
You must have the judgement to know what to optimize for, the experience to lead you in the right direction, and the talent to save you from all else.
Make sure you have those 3 in place (or hire those that do), and your odds of success will be greatly improved; it is from this place, of experience and awareness, to choose a methodology or roll your own approach, not just pick a popular one and hope it fits with your needs.