I've been asking that question for the past 20 years and nobody has ever come up with a good solution. There is no one method and some methods work better on some projects then others. First you have to decide what the program is going to do, be as detailed as possible. Write specific requirements out either on paper or in a word processor such as Notepad. If it is a Windows program then draw pictures of the windows and menus, then write out what each object in the window will do. Adding new requirements later is a major factor in failing to deliver software on time.
I'm sure there are a few books on the subject that you can get at your local library.
I myself also not too sure on how to develop a software effectively. Many usually says a good planning is important in developing a software effectively in time and within the cost. The requirements need to be specified clearly first and finalised properly with the ability to ensure that the requirements are able to fulfill during development. The important or main requirement must be done first and extra requirement can be add on later for advancement of the software developed.
Developers always emphasize on the theory of "Knowing what the user wants and the main requiremens needed to develop the software that suit the needs of the user".