Creating visibility by replanning projects
There are many ways to regain control on projects that are going wrong. The classic way starts with investigation, usually in the form of a project audit. However, some mandates or company cultures call for a more direct and participative approach. In the later, the consultant has to perform investigation and implementation at the same time. This approach can also be more cost-effective than formal auditing if we suspect that the problems are not too complex (this is really a judgment call).
One of the typical symptoms of projects going wrong is that the team cannot deliver as planned with the desired quality, at least not without putting more effort (additional resources, overtime) than planned. Managers, clients, and team members blame processes, lack of skills, inaccurate requirements, unexpected changes... and each other. But in truth no one knows exactly why the projects are heading toward failure.
Replanning the projects can help pinpoint the problems. The consultant acts as a project manager facilitator to elicit real effort forecast directly from team members. Note that, in the first phase of replanning, we do not set any hard deadline for projects (this will be added later). Indeed one of the pitfalls of project planning is to plan according to a predetermined deadline instead of according to effort needed to complete the project.
Replanning requires one or more meetings with the whole project team (assuming the team size permits it) to redo the work breakdown structure (WBS) starting from requirements ("features" to be delivered, also called "user stories" in agile methods such as Scrum).
Second, the consultant together with the team estimates the team velocity, or production capacity. The velocity is calculated independently for each activity involved in the project, such as analysis, architecture, development, testing, deployment, and so on. The key here is to determine the real velocity, taking into account all kinds of interruptions, vacation, sick leave, emergencies, maintenance tasks, contribution to other projects, and so on. The result will likely be very different from the velocity used for the initial project plan (which is often 5 days per week per person, an absurdity knowing that focus on the project rarely exceeds 80% and is more likely around 70%).
Combining our new WBS with the newly calculated velocity, we can plan the project. The level of detail depends on the situation. The current iteration should be planned in detail (unit = one hour for example, WBS element is task), while the rest should be more coarse (unit = one day for example, WBS element is feature or scenario).
The third step consists in checking where the real deadline stands compared to the original (read: ideal) deadline. Often the original deadline is a hard deadline; it cannot be moved because it has been promised to the client. Therefore, the project manager has to negotiate with managers to allocate more resources to the project or negotiate an agreement with the client. Either way, it would be ridiculous to ignore that the real effort doesn't fit with the hard deadline. Poor project management implies "working the numbers" until it fits with the original deadline, making all kinds of unrealistically optimistic assumptions along the way (at some point the s**t will hit the fan).
Until now we have essentially worked to create visibility. We made stakeholders aware of the real effort to complete the projects, but we didn't solve any root problems. With our new numbers for WBS elements and velocity, we can derive some simple yet useful statistics: how is the effort distributed among WBS elements, roles, persons, iterations, and so on? These numbers will likely raise a few red flags that will help identify problems.
Numbers can be examined from multiple perspectives. For example, which activities consume an inordinate amount of effort, and why?
- Analysis: requirements are inaccurate.
- Architecture and design: there are serious technological risks such as new technologies, tools and frameworks.
- Development: same as architecture, plus lots of out-of-project interventions.
- Testing: fuzzy requirements or lack of unit testing during development tends to postpone problems until integration testing.
- Deployment: transition from development to test and from test to production environment is tedious and error-prone.
Consequently, in parallel to executing the project, we can also work on the root causes of our problems so that they do not plague future projects and later iterations.
For sure, this approach is not as systematic as an audit, but it offers a quick fix to simple problems that plague the projects, and provides a good starting point to improve more intricate parts of the software development process. It also has the great advantage of involving the team from day one in a coaching mode.
