The biggest difference between software project management and project management in general is the uncertainty in the whole lifetime of the project.
First, the need of the customer is uncertain. The customer doesn’t know what s/he truly wants until you show him/her a software.
Second, the solution is uncertain. There’s many solutions and only one can be chosen. How can you make sure that the solution you chose is the best one?
Fourthly, the software will go wrong in coding. It might crash or deviate from the need of the user.
Why so many uncertainties in software project? The most likely and important reason is that software can only be coded by human beings. Therefore, developing software can’t be standardized.
How can we solve these problems? The answer is Agile.
We can shorten the release time, so we can get feedback as soon as possible, and then adjust the plan in time.
We can divided the whole software into stories and prioritize them. Then chose the most important features to develop and release them to users, and customers.
We can divided the team into small Agile teams and break every story into tasks and estimate its man hours every day to detect risks.
When coding, we can divide the software into API, modules, classes, methods and etc. Write testcases to make sure the software work in the right way. Also use pair programming, code review, CI and other methods to ensure the software works.
After releasing the software, demonstrate users and get feedback from them so to adjust the plan.
Use some open source tools to tracking the whole process of the project management, so it will be clear what’s going on. There are a lots of Agile tools, such as Redmine and ZenTao
So this is software project management.