This is what helped me to get started:
[1]
Start with a requirements document. Write from the customers point of view. Write everything down what the software should be able to do. Avoid giving solutions. Be explicit. If a functionality will receive input specify what exactly it can expect, how much it should expect and how it should act in error situations.
Don't forget to specify limits. Everything has a limit. If your solution is going to manage accounts how many should it be able to handle? 20 or 10 million?
Your requirements document should include functional requirements and not functional requirements. Not functional requirements are: performance, stability, resource usage, security and so on.
[2]
When you're done specifying requirements give every requirement a importance score: must have, important, optional.
[3]
Now write a document where you specify how every requirement will be implemented. Be careful with the detail. Don't go to deep. Go for the 20/80 rule. Specify 20% of the functionality in-depth which will affect 80% of the solution.
You will probably notice, that you cannot describe how every requirement will be implemented. It is ok to write "I don't have a clue how to implement this". But it is important that you write this down! The amount of "don't knows" will tell you how risky your project is.
[4]
The next step is to make a task list. You will need to know what actually you have to do. For every requirement you will have a couple of tasks to perform.
One of those tasks is to find out how to implement the "don't know" requirements. Don't try to clarify every "don't know". Go for the must-have and the important ones. Clarifying some of the "don't knows" may even be a mini sub project.
[5]
Once you have your tasks estimate the time you need to complete them. Don't be shy estimating. It is impossible to estimate accurately when you're at the beginning of the project. As the project moves on you will re-estimate the tasks and you estimates will get more accurate.
It was very helpful to me to make so called three point estimates. Estimate the time you will need if everything goes well. This is you optimistic time. Then estimate how long it will take if you encounter problems. This is your pessimistic time. Then estimate a realistic time. The span between optimistic and pessimistic time will tell you how uncertain you are about the implementation.
[6]
Now you will have to bring the tasks in the order they will be implemented. Some of the tasks will have dependencies which your order will has to reflect. There is a very good tool to help you visualize this order: your office wall. Write your tasks on post-its and put them on the wall. Seriously. It worked for me very well.
[7]
Now you're already in the middle of your project. The sum of your estimates will give you two release dates (the optimistic and the pessimistic). You can set mile stones. Update the estimates for your tasks periodically. The change of the calculated release date will tell you how you're performing.