According to softwaremag.com, only 34% of software projects end up on time, 15% fail all-together, and 51% of projects are over budget and often lack critical features. As these statistics point out, it is vitally important that a project is set up so as to efficiently handle problems as they arise and ensure success of the project.
7 Tips for Success
I come from an engineering background and know that even within tech companies, there are a lot of screwed up projects run by managers who don't fully understand the intricacies of software development. Based on these experiences, I've come up with a list of things one should understand before agreeing to go ahead with a software project.
1. Hire a Competent Software Project Manager or Consulting Firm
The way to find a good firm or manager is to take a hard look at their previous track record and ask questions that carefully assess their approach. Try to get someone who has successfully managed projects that have been on time and resulted in a quality product being produced - with a stronger focus on the latter point. Contact individuals who were on those projects and ask them for an honest assessment of the candidate's abilities to deliver a maintainable product.
Ask candidates a lot of questions, specifically questions that cover some of the more nebulous areas brought up in tips 2-7. This is a good way to determine if the candidate really understands software project management or if they view the role as simply attending meetings and maintaining checklists.
If they tell you running a software project is the same as running other types of projects, especially those which have a high predictability rate, take this as a red flag. There can be a lot of complexity on software projects, and a lack of appreciation for that complexity can lead to over-commitments and slipping schedules.
Remember: Hiring the wrong person is worse than passing up a good candidate, so if in doubt about a candidate, keep looking.
2. Hire Quality Developer/Testers/etc.
Ensure you or the project manager knows how to hire quality people. Remember the priority from the business perspective is to get a quality product out the door on schedule and on budget. This goal simply cannot be met if you don't have great people working on the project.
The best people a project can have on it are people who:
- Know their stuff technically and are eager to learn
- Know how to work in a team - this doesn't mean they can't be counted on to be self-sufficient, it just means they exhibit a positive attitude and are willing to fill in the gaps in the team when they appear.
The very best people I have seen are both incredibly technically competent and also more than willing to help others. These people are worth 10x their salary simply because they dramatically increase the effectiveness of those around them, thus they greatly increase the chance of project success. For details on technical team hiring, see my Hiring People that will Help your Business article.
3. Adopt an Iterative Development Process
Ensure development is done with some sort of iterative approach. An iterative software process is one that slices the total work needed in the project 'vertically', meaning one constructs the product in a piecemeal fashion, but at the completion of every piece, you have a working product. You take a piece of product functionality, design it, implement it, fold it in the rest of the system then system test (these steps were simplified). Of course, until the last piece is developed and folded in, you won't have a complete system, but the system that is present is functioning correctly and as expected.
The huge advantage of the iterative approach is that you minimize risk which is absolutely critical for project success. As the project develops, the customer and upper management will be able to see exactly how the system is progressing. Because it is being done iteratively, all stakeholders will be able to instantly determine if the pieces of the system in place are coming together as had been envisioned.
The exact type of iterative approach can vary dramatically, depending on the scope of the project and comfort level the project team has with different approaches. Detailing the individual processes is a bit beyond the scope of this article, but in short, I recommend one of the Agile Methods would be a good fit (Extreme Programming, Test Driven Development, Scrum and others discussed by the Agile Alliance).
4. Good Communication Needs to be Built into the Process and Culture
Of critical importance to project success is good communication. This sounds obvious but it's amazing to see how many poor communicators there are on a typical project. You need to ensure good, honest communication takes place at all levels of the project: the customer to the project manager (PM), the PM to the technical and test teams, the technical teams to the test teams and even the customer to the technical leads.
Good communication is critical because it ensures the system is running in a closed loop - meaning when a problem arises, it will be communicated with those concerned quickly (and thus the problem can get resolved in the shortest time possible). The iterative approach mentioned in tip 3 requires efficient lines of communication to work effectively. The customer must be in communication with the technical leads and project manager on a regular basis to ensure the project is developing in the ways that he envisioned. Note: This doesn't mean that the customer is to change requirements regularly or micro-manage, but it is a known fact that the product developers and the customer often are not on the same wavelength when it comes their understanding of what the product 'should' be, and it's only at implementation time that the two sides fully ensure they have the same solution in mind.
5. Organize the Project Around Small, Semi-Autonomous Teams
For medium to large sized projects, it's essential that the project is broken down into small teams that are somewhat autonomous. Projects larger than a handful of people can get out of hand quickly because the complexities of managing can grow exponentially as team size increases. Teams should be made up of a team lead, one or more test team members, one or more tech team members and one or more representatives from other project groups.
6. Ensure there is Accountability at All Levels
Accountability is critical to ensure project success. Too often on large projects, there are dozens of people on the project yet many tasks go undone simply because no one was accountable for them. I've seen the following happen more often than I care to remember: large meetings where people complain about all sorts of problems going on in the project, maybe even a few solutions being rattled off, and at the end of the meeting everyone leaves - not one person being assigned an action item (or certainly not enough action items being assigned). Then guess what happens? The next week we all get together, and talk about the same darn problems - this insanity repeats over and over. I did some rough calculations on how much the company was losing every week simply because of lack of accountability in meetings - just from my project, it came in at over $1000 lost every week for a simple one hour meeting!
Accountability isn't just important in meetings - it's important throughout the entire project. Is the project manager being held accountable for certain progress reports, etc. on a regular basis to the customer? Are the team leads being held to account by the project manager and ensuring that their teams are delivering quality software at regular intervals? Where does accountability come from? How can you make it pervade the project from the project manager all the way down to the summer intern? It starts from the top. You, as the customer, need to make clear your goals from the get go and make sure you hold those responsible to certain requirements. I've seen too many times where the client just lets the project keep going on and on, just trusting that the firm/project manager is doing the right thing, only to find out months down the line that the project is way behind schedule and not even what the customer wanted.
7. Periodically Review and Tweak the Process
Another issue that is very common in organizations is for a process to be put in place and then never adjusted for a changing environment. Maybe the process initially worked, but more times than not you can find inefficiencies in it or there are portions that just don't make sense anymore.
Periodically review the process, simplify some parts and enhance others. Take a minimalist approach whenever possible - if a portion of the process isn't needed or is in doubt, toss it. If later, you find that the process needs to expand again, address it at that time. Remember this is a balancing act. You don't want too little process because that leads to chaos and holes that are hard to dig out of, but too heavy a process leads to a swamp of inefficiency.
It is incredibly common for the process to become an entity unto itself with individuals completely losing site of why the process was put into place in the first place. Rather than improve the way a product is developed, the process simply becomes a set of rules needing to be upheld because ‘that’s the way we've always done it’. Avoid this mentality at all costs. Additionally, those in charge of the process often have a vested interest in ensuring that it remains as it is or constantly grows, constantly covering new areas of development. If you observe this going on in your company, do whatever you can to break this mentality by simplifying the process and ensuring that it is always aligned with company goals.
In the end, a process-above-product mindset will mean slipping schedules and individuals working on tasks that add no value to the company. Remember, this doesn't mean NO process, rather you should have a smart, flexible process that can adapt over time.
These tips will be a good start at maximizing the chances of project success. Additionally, stress levels should go down as information about the project flows more easily and employee confidence and pride in the product increases.