Design and implement large software system
1) research, see what features are required, any existing software/library that can speed up the development, what are the platforms to support, what tools should be used, etc
2) design and documentation, express your software system in clear text what it does, how it does it. Try to be as precise as possible.
3) unit testing of tools, 3rd party softwares, and libraries, this is often partially done in phase 1, but at this stage a through and in-depth unit testing framework should be employed.
4) I personally prefer developing software by component and writing unit test alone the way. Never underestimate the power of unit testing, even the simplest test can save you hours of headache.
5) packaging and integration. If design is sound and documentation is clear, software development is simply a matter of man-hour.
6) more testing.