It would also be great to observe or join an existing project -- a project that has been around for some time but still maintains a strong momentum -- and learn from the way it works. That is, short cut some of the process by observing others that have overcome some of the challenges.
This should also teach you that there is so much still to learn about successful software projects that you'll be doing it your whole career :).