Tuesday, April 15, 2008

Successful Software

The fancy programming language, feature-filled IDE and fastest hardware are not what makes a large software project succeed. Its success also does not depend on the perfect build process, in-depth design and accurate cost estimation. All of these are tools to improve the process of software development, but ultimately success depends not on the tools, but instead upon the individuals involved. A change in company policy that causes employee moral to plummet can be far more devastating than a bad design decision. Likewise, a motivated team of brilliant software engineers can consistently solve problems that arise in the development process far better than any tool or process.

A successful project begins with having the right people. What makes a person “right”? There is no perfect formula, but telling attributes include being teachable, friendly, positive, intelligent and willing to work. It is essential to find the right people, because one “wrong” person can greatly diminish the benefits of having several “right” people by draining the time, energy and emotional investment of a team. The wrong person, or even the right person on the wrong team, is a key ingredient in the recipe for disaster.

Once the right people have been found, a foundation of trust must be established between them. Developers need to trust that their managers will treat them fairly and establish reasonable requirements, goals and deadlines. Development managers need to trust that their developers will be honest about their progress, if they are to ever have any idea how well a project is coming along. They must trust that the decisions of upper management have been made after careful consideration and research. Upper management needs to trust the development managers enough to keep from micromanaging so that the work the work can move forward. When trust fails at any of these levels the system as a whole begins to operate at a rate that is less than optimal. An environment of trust is one where the entire focus and force can be place on helping the software project at hand succeed.

Heavy, extended overtime is one of the easiest ways to ruin trust and de-motivate employees. The majority of people are only able to work a certain amount before their productivity begins to slide. Thus the key is not to have employees work more unproductive hours, but rather to help employees be more productive in the hours that they do work. If management can effectively motivate development then more can be accomplished and the costly side effects of employee turnover avoided. This requires a manager who has a positive attitude which helps bring out the best in the team he manages. A team will be much more likely to work hard for a manager who is optimistic and listens to their input than one who only sees the negative and thinks he knows everything. To quote the Bible, “Where there is no vision, the people perish” (Proverbs 29:18).

Perhaps because software development revolves around computers, it may be easy to point the finger at the machine rather than the man when things go badly. But all too often it is the man, not the machine, that is to blame for a failed software project. More can often be done to build a working environment where the right people, built on a foundation of trust, working together can accomplish great things.