10 classic mistakes that plague software development projects

Takeaway: When you combine project management pitfalls with software development challenges, you have a recipe for some big (but often preventable) problems.

Project management is never an exact science, but when you combine it with the vagaries of software development, you have a recipe for disaster. I have seen a fair number of common mistakes that project managers make when working with software development projects. Some of these mistakes are not exclusive to software development, but they are especially prevalent and damaging in that context.

1: The “pregnant woman” mistake

Fred Brooks illustrated a common project management mistake with his famous statement that just because one woman can have a baby in nine months does not mean that nine women can have a baby in one month. And we still see this come up time and time again — the idea that throwing more people at a problem can make it be fixed quicker. Sadly, this is just not true.

Every person you add to a project adds friction to the project as well –  things like the time needed to bring them up to speed or coordinate their work with other people. In fact, my experience has been that there is a tipping point where adding people actually slows the work down more than it speeds things up, especially for the first few months. And there are many tasks that just can’t be split up to be done by many people or teams at once. They simply have to be done “one foot in front of the other.”

2: The wrong metrics

Managers need metrics for variety of reasons: measuring “success” or status, performance reviews and analysis, and so on. The mistake I see too often is that the easier it is to collect a metric, the more likely that it’s not measuring anything useful. Of course, the easiest metrics to collect or understand are also the most likely to be used. Let’s take “bug tickets” as an example.

It is easy to count how many tickets get entered. But that is not a good measure of quality, because how many of those tickets are user error or truly “features”? So managers often look to the next level of metric: ticket resolution rate (tickets closed per day or week or iteration or whatever). If you have ever dealt with a help desk that constantly closes tickets for things that aren’t actually fixed, causing a proliferation of tickets, you know what it’s like dealing with an organization driven by this metric!

Instead of actually getting work done or helping the user (for example, leaving tickets open until the user accepts the resolution), the organization exists solely to open as many tickets as possible and then close them as quickly as possible, so it can get its resolution rate up. A better number would be the hardest to measure: ratio of true “bug tickets” created in relationship to features deployed, changes made, or something similar. Needless to say, that is not an easy number to understand or to collect and report on. The result is that organizations choose to make decisions based on the wrong metrics rather than the right ones, due to convenience.

3: Estimating times too far out

A common problem I see with certain project management methodologies is that they like to play “just so stories” with timelines and time estimates. Project manager who honestly think they know what pieces of functionality any given developer will be working on more than a month or two out (unless it is a very large, broad piece of functionality) are likely to be disappointed and mistaken. Software development is just too unpredictable. Even if you can prevent or account for all the usual things that alter timelines and priorities, there is still little guarantee that things will take the time you think they will.

4: Estimating times too broadly

Another typical issue with time estimates involves not breaking tasks down into small enough pieces. If I’m told that a piece of work will take one week, I’ll ask where exactly that number is coming from. Unless someone has analyzed all the minor pieces of work in the whole, a “one-week” time estimate is nothing but pure conjecture and should be disregarded.

5: Failing to account for tasks

How many times have you seen a deadline blown because it was established without accounting for a critical task like testing? That is another reason why you cannot and should not ever accept a task on a timeline that is not broken down into its component tasks. There is a chance that the estimate omits something important.

6: Poor communications

It is important to keep everyone in the loop on project status, but it is easy to forget to do it. This is where a lot of the mistrust between IT and the business team comes from: The business does not feel like it has a good handle on what’s happening with its projects. And the more it feels left in the dark, the more likely it is to start trying to micromanage or force things to happen the way it feels it should be done. You can mitigate this problem by letting people know where things stand, both on a regular basis and when milestones are accomplished or the status changes.

7: Disconnected business priorities

There is often a wide gap between the priorities of projects within the development organization, the priority of the project in the view of the overall business, and the priority of the project in the eyes of the requester. A common issue is that a “high priority” project for one department is not viewed as important by the business because it does not generate revenues, and so the developers also downgrade it. Everyone needs to be on the same page with priorities, and a large part of that is to ensure that business units are not evaluated on the basis of projects that the overall business considers lower priority.

8: Constructing a wall of process

When the development team feels overwhelmed, one of the natural reactions is to establish a lot of process to slow things down. I have worked at places where even the most simple of changes required a change request form to be filled out (on paper, of course), in triplicate, physically disseminated, agreed upon, cross-signed by managers, and after all of that, there was still a 45-day minimum time until the work was to be done! Needless to say, this organization was not seen as a “partner” or an “important lever for getting work done” in the business, they were seen as a cost center and treated as such. The wall of process is typically a stopgap measure to deal with deeper issues in the process or company’s culture, and while it is easier to put up the wall than to deal with those issues (and in some companies, the issues are irreconcilable), the wall of process is counterproductive and leads to a hostile environment.

9: The “hit-the-ground-running” myth

When adding people to a project, it is tempting to assume that they can hit the ground running. No one hits the ground running in the world of software development, and those who say they do are mistaken. Every project has an acclimation period, and the farther along the project is, the longer that acclimation period is — there is more and more code to understand and get a handle on. Failing to take this into account will get you into hot water. It may take only a few days or weeks for a developer to come into the project at the beginning, but it could take months for a developer to be fully productive when added to the project long after it has started

10: Multi-tasking

This is another “skill” (like “hitting the ground running”) that people think they have, but they really do not. The more you ask people to multi-task, the worse their work will be and the longer it will take. This applies to multi-tasking at the minute-to-minute level (juggling emails, phone calls, actual work, etc.) as well as the hour-to-hour or day-to-day level (handling multiple projects). The more you demand from people, the more the wheels fall off. To make it even worse, multi-tasking not only is likely to mangle the work, but it grinds people up and sends them looking for another job eventually… forcing you to bring in new people in the middle of a project and causing even more issues.

Other classic mistakes?

What other common issues have you seen derail software development projects? Share your thoughts

—————————————————————————————————————————————————-

——————————————————————————————————————————————————

Outlook Shortcut Keys

Command

Keystroke

Advanced Find Ctrl-Shift-F
Bold (Contacts notes section) Ctrl-B
Bold (RichText or HTML mail) Ctrl-B
Check for new mail F9 (Outlook 2003)
Check for new mail F5 (Outlook 2000,2002)
Close a window Alt-F4
Close a window Esc
Copy Ctrl-C
Create Appointment Ctrl-Shift-A
Create Contact Ctrl-Shift-C
Create Flag for follow-up Ctrl-Shift-G
Create Folder Ctrl-Shift-E
Create Meeting Request Ctrl-Shift-Q
Create Message Ctrl-Shift-M
Create Note Ctrl-Shift-N
Create Task Ctrl-Shift-K
Create Task Request Ctrl-Shift-U
Cut Ctrl-X
Delete opened item Ctrl-D
Folder List – Collapse selected folder - (Numeric keypad)
Folder List – Expand selected folder * (Numeric keypad)
Folder List – Open Ctrl-Y
Forward selected mail Ctrl-F
Go to Calendar Ctrl-2
Go to Contacts Ctrl-2
Go to Mail Ctrl-1
Italics (Contacts notes section) Ctrl-I
Italics (RichText or HTML mail) Ctrl-I
Mark item as read Ctrl-Q
Mark item as unread Ctrl-U
Move down one screen PgDn
Move to first item Home
Move to last item End
Move up one screen PgUp
Create new default item Ctrl-N
Open “Find a Contact” F11
Open “Look In” Alt-I
Open selected item Ctrl-O
Open selected item Enter
Paste Ctrl-V
Print Ctrl-P
Read next email Ctrl->
Read previous email Ctrl-<
Redo (within text field) Ctrl-Y
Remove last semi-colon from mail addressee Alt-K
Reply to selected message Ctrl-R
Save Ctrl-S
Select all items Ctrl-A
Select to first item Ctrl-Shift-Home
Select to last item Ctrl-Shift-End
Send email message Ctrl-Enter
Spell check open item F7
Switch to Inbox Ctrl-Shift-I
Switch to Outbox Ctrl-Shift-O
Underline (Contacts notes section) Ctrl-U
Underline (RichText or HTML mail) Ctrl-U
Undo Ctrl-Z

Planning – Most important step of project Management

Planning – Most important step of project Management

The key to a successful project is in the planning. So invest the time to put some thought behind building your project plan. A project plan is more than just a calendar and detailed schedule. It embodies the overall expectations, definition, schedule and risks of the project to the organization. It is the blueprint for activating the project, controlling it throughout its duration and seeing it through to conclusion.

The success of a project will depend critically upon the effort, care and skill you apply in its initial planning. This article looks at the creative aspects of this planning.

What is Project Plan?

I can define a project plan as “as a scheduled list of interrelated Stages, Products, Activities, Milestones, Tasks, etc. along with assigned resources, estimated effort, planned calendar time with proper dependencies defined and risks identified”

In terms of Project Planning, they famous saying is perfectly true. “Failing to plan is planning to fail”.

Inputs for project Plan

The requirement specification OR the project definition OR the project charter:

This initial should contain

  • Statement of the scope, Requirements etc
  • Reasons for undertaking the project
  • Objectives and constraints of the project
  • Directions concerning the solution
  • Identities of the main stakeholders
  • Participants in a project etc.

 Who should be involved?

For a plan to be accepted and agreed to by the Project Team, the customers and all other stakeholders on the project, they must be part of the production of the Plan itself. One of the worse things that a Project Manager can do is create the Project Plan without the assistance of those involved affected by the plan and then expect them to be committed to it. It just won’t work.

 Planning Process

1.      Identify Project Parameters

  1. Stakeholders: Stakeholder is anybody who is directly or indirectly impacted by project. Examples of stakeholders are – The project sponsor, The customer who receives the deliverables, The users of the project outputs, The project manager and project team.
  2.  Project Goals: Talk to all stakeholders and establish their needs. Prioritize them, from prioritized list, create set of goals that should be easily measured.  Please make sure you clearly define what a Project “IS” and “IS NOT”

 2.      Identify Project Deliverables

  1. Using the goals you have defined in step 1, create a list of things the project needs to deliver in order to meet those goals. Specify when and how each item must be delivered.
  2. Add the deliverables to the project plan with an estimated delivery date. More accurate delivery dates will be established during the scheduling phase, which is next.
  3. Prioritize the  deliverables as “MUST” , “DESIRED” and “OPTIONAL”
  4. Identify the acceptance criterion for these deliverables.

3.      Create Work Breakdown Structure (WBS)

  1. Break the deliverables into major tasks, and then sub tasks. (if possible divide further to more detailed and small tasks. Though this can be done at later stage of project).
  2. Set project milestones. They are important check points to calculate project progress.
  3. Put effort estimates for the each and every task. Do not forget to consider overhead time like management, unit testing, documentation etc.
  4. Establish dependencies between the tasks

 4.  Assign Resources

  1. Assign resources to each task depending on availability of the resource and his skills.
  2. The resource calendar should have already be prepared considering his available time, leave plan, time spent on other non project tasks etc.

5.      Create a Schedule

  1. Once the WBS is done with proper estimations, and resources are allocated to tasks, now decide the start date for the project.
  2. Depending on resource calendar, his availability for the project and tasks dependencies convert the effort time calendar duration, start date and finish date.

6. Review

  1. A common problem discovered at this point is when a project has an imposed delivery deadline from the sponsor that is not realistic based on your estimates. If you discover that this is the case you must contact the sponsor immediately. The options you have in this situation are:     
  • Renegotiate the deadline (project delay)\
  • Employ additional resources (increased cost)
  • Reduce the scope of the project (less delivered)

       2. Use the project schedule to justify pursuing one of these options.

Some other supporting plans

  1. Quality Plan
  2. Risk Plan
  3. Acceptance Plan
  4. Communication Plan
  5. Review Plan

How to write User Stories

Definition of User Story

“User Story is a description of a requirement and its business benefit, and a set of criteria by which we all agree that it is ‘done’ “

So, User stories are statements to capture the requirements of the product/project as told by end user. The whole project is basically defined as a set of stories. Some time the stories are so big, we need to break them in smaller stories. The a big stories which can further be broken are known as “epic”

Characteristic of User Stories

1. Make them customer-focused: Stories should be user or customer focused, not the developer focused. They should be valuable to user of the solution. Written in user’s language. They should be features not tasks.

2. Make them elevator-friendly: A good story should be something you could explain on an elevator in 30 seconds or so to a team member. Don’t write novel.

3. Make them the right size: Not too big, and not too small!! For me, the right size is usually under 40 ideal hours (1 ideal week) of estimated effort. Club the stories which are under 1 hour in a bigger story.

4. Make them estimatable: They need to provide enough information to estimate, without being too detailed.

5. Make them independent: it’s an important aspiration. User Stories should be as independent as possible.

6. Make them negotiable: User Stories are not a contract. They are not detailed specifications. They are reminders of features for the team to discuss and collaborate to clarify the details near the time of development

7. Make them testable: Very important!!, the story will not be completed unless it passes acceptance test. So User Stories need to be worded in a way that is testable, i.e. not too subjective and to provide clear details of how the User Story will be tested.

This is just scratching the surface of the topic, but I hope these tips give you a little direction when starting to write stories.

The structure of a user story

As a [user role], I want to [feature/goal] so that I can [reason]”

A User Story should focus on the who, what and why of a feature, not how.

For example, on a job site, two high-level User Stories might be:


    As a job seeker, I want to search for a job, so I can advance my career.
    As a recruiter, I want to post a job vacancy, so I can find a new team member.

Pretty easy right? However, in some instances I find that the “so that” suffix reads redundantly so go ahead and have that be optional if you wish.


    As an account owner, I can check my balance online.

Feel free to use slight deviations of this template using synonyms:
• As a [role], I want [feature] because [reason]
• As a [role], I can [feature]
• As a [role], I can [feature] so that [reason]

Acceptance Scenarios

This is not, in my opinion, where a store ends. To give some context and specification to the story, We should have defined acceptance criteria to know when the story can be deemed as “done”. The acceptance tests can be written using this template

Scenario 1: Title
Given [context]
And [some more context]…
When [event]
Then [outcome]
And [another outcome]…

For example

Scenario 1: Account balance is negative
Given the account’s balance is below 0
And their is not a scheduled direct deposit that day
When the account owner attempts to withdraw money
Then the bank will deny it
And send the account owner a nasty letter.

So Now….

At the start of a project, capture an initial list of User Stories up-front. Like I have said before, write out all the possible user stories you can currently think of. I guarantee that you will be missing some of the project scope; however with a little luck, you will be able to connect the dots and see the entire project picture.

In Scrum this would be the initial Product Backlog. This feature list is useful for estimating and planning. But defer capturing the details until the story is prioritized and due to be developed in the next Sprint or iteration.

So, together, the “As an user, I want to so I can ” story-definition pattern, a name for the story, and a context specification together create a backlog item that can be scheduled for an iteration.

Scrum – The Agile Method

In my last blog on Agile Project Management – Brief Introduction, I had explained about the agile way of project management. In this blog, I will pen down the details of “Scrum”- a project management technique based on the principles of agile development.

In Scrum work is delivered in “sprints”. Each sprint delivers a single, usable piece of work called the “product increment”. This product increment is immediately available for evaluation and use by the customer at the end of a sprint. Scrum requires that all feature requests be held by a single “product owner”. This person is responsible for maintaining the list of features requiring work. This list is called the “product backlog”

Scrum Roles – Pigs and Chickens:
A pig and a chicken are walking down a road. The chicken looks at the pig and says, “Hey, why don’t we open a restaurant?” The pig looks back at the chicken and says, “Good idea, what do you want to call it?” The chicken thinks about it and says, “Why don’t we call it ‘Ham and Eggs’?” “I don’t think so,” says the pig, “I’d be committed but you’d only be involved.“

“Ham and Eggs” – Are they committed or just involved? The role of management and team in the scrum is just like that, one is “committed” while other is “just involved”

Pigs – are the ones who are committed• Product Owner – voice of the customer
• Scrum Master – enforcer of Scrum process, facilitates (removing impediments) team to reach sprint goal
• Team – cross-functional (design, developer, test), usually 5-9 people who does the work
Chickens – are the ones who are just involved• Users
• Stakeholders (Customers, Vendors)
• Managers

Scrum Terminologies

Sprint- It is a focused time boxed iteration of 2 to 4 week.
Story - one or two sentences in language of customer
Product Backlog- a constantly prioritized to-do list. This is managed by “product owner”. These are basically all the requirement translated into “story” with rough estimates, in priority order
Sprint Planning Meeting: Decide what stories can go in the sprint. Break the stories into tasks, do the detail planning of the tasks.
Sprint Backlog- a list of the highest prioritized items from the product backlog that are planned to target in the sprint. The tasks are not assigned but they are signed up. The estimates of the tasks are adjusted daily, i.e. update done efforts and remaining efforts daily.
Velocity: The number tasks that the team can complete in one sprint.
Burn-Down Charts – Number of tasks/stories remained in a sprint or project. These are used to track the progress of sprint or project.
Scrum Master- the coach for the product management team and works to ensure the realization of the goals of the sprint.
Product Owner- represents the customer and is responsible for prioritizing the backlog.
Scrum Team- a group of 5-9 people who self-organize and have joint responsibility for the completed tasks.
The Scrum Process
Now that basic vocabulary related to Scrum has been defined I will detail the Scrum process step-by-step.
1. Creating a backlog – in this step, the Product Owner and Scrum Team meet in order to discuss the priority and items on the Product Backlog. The Product Owner must be able to form the product vision. The Product Backlog then, is a prioritized list of what is required for the project and is ranked with regard to importance.
2. Once the product manager creates the backlog, then there will be a Sprint Planning Meeting. During the first phase of the meeting, the Product Manager describes to the team the goals of the project and explains the Product Backlog. During the second phase, the Scrum Team will select the items to be completed during the sprint from those with highest priority on the Product Backlog.
3. Once the items to be worked on have been selected, a potential Sprint schedule is constructed – taking into account the availability of the team members to devote their time to the project. The items in the Product Backlog are assigned and broken down into individual tasks. Once this occurs, this document is the Sprint Backlog.
4. The Sprint begins and lasts from 15-30 days. During the Sprint, no other tasks are added to the backlog.
5. Daily Scrum begins when the sprint begins. The Daily Scrum is a 15 minute stand-up meeting where each member of the team gives a very brief report to everyone else – what they accomplished since the last Daily Scrum, what they hope to accomplish, and issues that have come up. Here, the Scrum Master will make note of issues and attempt to resolve them – after the meeting.
6. Sprint Review – once the Sprint ends, everyone gets together in a meeting to share what he or she accomplished during the sprint.
7. The process begins again with a new list of prioritized tasks on the Product Backlog.

Agile Project Management – Brief Introduction

Agile means responding to change – both technological change and changes in requirements perhaps due to customer demand and market opportunities.

Definition: Agile is a conceptual framework generally centered on iterative and incremental delivery of working software, driven by the customer. The iterative part suggests that we are repeating, or iterating, a complete lifecycle of development over a short, fixed span of time. With each of these iterations, we ship some working subset, or increment, of features.

Traditional software project management techniques have tended to concentrate on “command and control” methods, where an elaborate plan is created and fixed during the inception of the project. In reality this elaborate plan won’t survive. A “command and control” approach makes the implicit assumption that the relationship between the inputs and outputs of a software development process are stable and predictable and that the schedule of outputs will still be relevant by the time they appear.

So the Agile software development is iterative software development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams.

Agile methods generally promote
• A disciplined project management process that encourages frequent inspection and adaptation,
• A leadership philosophy that encourages teamwork, Self-organization and accountability,
• A set of engineering best practices intended to allow for rapid delivery of high-quality software,
• A business approach that aligns development with customer needs and company goals.

Various Agile Methods• Extreme Programming (XP) : Emphasize the values of communication, simplicity, feedback, and courage; use specific technical and collaborative practices, including TDD, refactoring, pair programming, continuous integration, open workspace, and automated acceptance tests
• Scrum: Manage a prioritized list of requires on a product backlog, collaborate through daily standup meetings, exhibit the product upon iteration completion, use retrospectives to correct the process
• Crystal: Emphasize people, gather techniques from other methods, improve communications, adapt the process itself (shrink or grow to fit)
• Feature Driven Development: Center development around the feature, create a domain model with domain experts
• Lean Development: Move closer to customer, shorter cycles, eliminate waste, decide as late as possible, empower the team, build in integrity
• Dynamic Systems Development Methodology(DSDM): Empower the team to make decisions, emphasize frequent product delivery, integrate testing throughout, promote collaboration and cooperation between all stakeholders

In next Blog, I will go through Scrum ..