Software project management is not for the weak or timid and it is not a walk in the park. I learned this the hard way many years ago on a software implementation project for a large transit system. Most of my prior experience had been on building construction projects, so I found it to be quite a humbling experience. Software management can be a nasty affair which words cannot fully describe.
Here are some takeaways:
· Software development is not a linear process because you may think you have achieved a certain level of integrity in your code only to find out that there is a bug that is incredibly difficult to find.
· Your lead software developer is a very important asset. This person can spot problems ahead of time and is worth her weight in gold.
· If your Requirements Traceability Matrix (RTM) is not solid, your project will face severe problems.
· Any gaps in the RTM will potentially have significant cost and schedule impacts.
· Your team must have experienced engineers when interfacing with legacy systems or external infrastructure.
· You cannot capture all of the schedule risk in the CPM schedule. You need to rely on team experience and your own instincts as a project manager.
· Adding additional resources to a late software project will most likely cause additional delays. This is widely accepted as Brook's Law.
· A robust testing plan is one key to success.
· If your development team does not take the time to include clearly written comments when coding, this will likely cause severe problems during testing.
· Project managers who say that they have a firm handle on their Estimate-at-Completion (EAC) before the project is 75% complete are either lying, delusional or inexperienced.
· Estimating costs during the tender (or bid) phase of a software project should be done using varying methods: top-down (parametric), bottom-up using a WBS and final cost reports on similar projects.
The intent of this guide is not to frighten you as a project manager, but to inform you of the myriad pitfalls that inform our approach to managing software projects.