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 are many solutions and only one can be chosen. How can you make sure that the solution you chose is the best one?
Thirdly, when doing WBS and breaking the solution into tasks, some tasks might be omitted, or some of them might be wrong. The estimation on tasks might be wrong too.
Fourthly, the software will go wrong in coding. It might crash or deviate from the need of the user.
Why so many uncertainties in a 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 divide 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 divide 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 test cases 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 lot of Agile tools, such as Redmine and ZenTao
So this is software project management.