Lessons Learned: Keeping Software Development Projects on Track
In our Fractional CTO™ practice we often help distressed software development teams in the middle of a struggling project or right after one has failed. Regardless of the size of the organization or project, the failures are usually caused by tensions between the definition of the end result and the process by which the team attempts to accomplish it. Projects may fail to meet expectations in time, cost, features and quality.
In this third part of our four-part series, we analyze major organizational deficiencies that may be the root cause of derailment, negatively impacting productivity and results.
People: Hiring, Culture and Open Communication
Find the right fit and skills
Having the right people on the team is an important step in achieving success. Any time an organization has inappropriately qualified people doing a job there is inherent risk. If you are finding quality issues or missed estimates, assess employees to determine where there may be skill deficiencies.
While skill deficiency among staff may be a root cause of why a specific project is failing, it is often the case that behind it is poor hiring or an issue with the job/skill/culture matching process. The skills required to identify the key attributes of a team member that will thrive should not be underestimated. Most managers need to hire but not every manager knows how to do this effectively.
Using a recruiter? You still need to know what questions to ask, how to prioritize and communicate your needs effectively, and how to assess the results you are getting. Many recruiters are not up to the challenge in some areas of technology and science or complex business processes.
Bolster communication
Sometimes miscommunication can occur on both sides of the organization. The development team is operating under different assumptions than the management team and the goals often become divergent.
If misalignment of goals is causing missed expectations, communication is often the first issue to resolve. The root cause of communication problems is frequently top-down. If management is not providing clear goals and objectives and unambiguous (realistic) priorities, it will cause development dysfunction.
Likewise, if the development team is not communicating its goals, priorities, progress, and concerns then they are a part of the root issue. Enabling complete transparency and clarity of priorities is imperative. Take a hard look at the degree to which your organization practices open and honest communication.
Reward honesty
There are many ways that an organization can inadvertently send the message that honesty is not rewarded. Management can often minimize the efforts involved in areas they are not experts in, which can lead to unrealistic asks given constraints like time and resources. When unrealistic demands are placed on a development team it will often lead to problems like failure to commit, missed expectations, or poor quality. This is common in cultures that don’t reward or value push-back.
Process: Requirements, External Vendors & Agility
Respect the requirements process
If you were designing your house, how much time would you spend describing to the contractors what you wanted? Many product owners don’t treat the requirements for their software product with the same level of detail. The requirements seem rushed, general, unorganized, or they fail to capture the end users’ needs and assumptions. By not achieving clarity early on you may be severely impacting the development team’s ability to successfully plan and implement.
Developers often treat requirements like they were handed down to them on stone tablets. Requirements must be treated as an opportunity to discuss, explore and even challenge. Otherwise, we build what we think the customer wants instead of what they actually need. If you are communicating with development via methodologies like Voice of the Customer (VOC), help the team to share your vision and customer connection. They likely have new ideas and approaches to deliver the same result, better.
Tightly manage external vendors
Today’s software companies often rely on third parties to achieve project goals. This is one way to deal with skill and resource deficiencies. Outsourcing can be very productive, but it’s often difficult to manage due to communication difficulties or misalignment of goals. At NeuEon we spend a lot of time addressing vendor issues including vetting candidates for a good fit and identifying weaknesses in their processes that may impact our client. Companies should address vendor issues early and often.
Quickly respond to process breakdown
If your car has a flat tire you notice. You stop and change the flat or call an outside expert to help. You don’t keep driving. What happens when you hear a strange noise in your engine every now and then? Do you ignore it? Do you get used to it? Do you stop and assess it like you did the tire? Turns out that sound may be an indicator of something much more devastating than the tire.
Even organizations that have established software development processes are susceptible to process breakdown when there is pressure to rush and someone involved doesn’t recognize the value of the process and/or there is a change in the team composition. This can lead to all types of project failure scenarios and often leads to an increase in technical debt.
In organizations where communication is challenged or there isn’t a regular and open assessment of how a project is progressing, a process breakdown can become a serious long-term issue that leads to project failures.
Poor project management
It shouldn’t be surprising that projects fail if not managed well. Management doesn’t mean a boss telling people what to do. It means tracking progress and dependencies, keeping all obstacles and expectations visible and driving the communication through the organization. When good project management processes aren’t in place it is one of the first areas to address as it impacts most aspects of the project.
Build vs. support confusion
This is mostly a small company issue but it also affects companies that are not traditional software development companies. If product support staff and development staff are one and the same, schedule predictability can be challenged by unexpected support issues, which can lead to project failure. Software development, when done well, is proactive. It is steady, consistent, and as predictable as possible. Support is the opposite. Support is a reactive process that requires constant context switching. These two processes are often incompatible. However, some companies like having their developers support the product since it can make the developers focus more on building maintainable software that doesn’t have to be fixed later. A balance can be reached through a variety of planning strategies such as carving out dedicated time during the sprint to do support in a planned and scheduled manner.
Platform: Strategic Planning
Plan for the technology future
Technology is complex and constantly evolving. Architectural decisions can negatively impact your solution. Creating a culture that constantly seeks new technologies can pave the way to a better outcome. Consult with experts in any areas that are new to your team so you can gain their insights before committing too much energy. Training can help but experience will reduce your risk more quickly. Educating the team on new initiatives can lead to improved morale and more intelligent decision making. A technology leader in your company should be tasked with staying current and keeping the organization informed on relevant technology shifts and opportunities.
Every project has challenges, but high performing teams and organizations have strategies to address these obstacles so that they don’t create a cycle of failure.
This post covers some of the most common causes for organizational influences on project failure. There are many more. In Part 4 of our four-part series, we will provide some insight into effective strategies we have found for dealing with many of these issues (stay tuned!)
If you have any war stories and observations on this topic we would love to hear from you. What are the problems you have encountered and how have you successfully dealt with them? By sharing our experience we can all improve our process and deliver high-quality solutions.