Successful Software Development

In a software development company or group, projects that succeed have common characteristics:

The leader (project manager, company president) has a vision that appeals to a well-defined market that will spend money on the product. The leader represents the project to the rest of the world, and represents the rest of the world to the group. His focus is outward.

The development manager represents the project to the development team. His focus is inward.

Work Environment

Plants and windows are important, waterfalls and nerf guns are a distraction.

Working from Home

Within limitations, this can be effective:

The employee has to be motivated and have a clear understanding of what is to be built before moving offsite.

As the product nears delivery, increasing time must be spent onsite to interact with QA and fine tune the details.


Compensation, Working Conditions and Morale

The point of a compensation strategy is to produce an eager, motivated workforce in which workers' interests are aligned with the interests of the company.
The tools available are salary, benefits, vacation time, praise, promotion, individual bonuses, team bonuses, stock options, actual stock in the company, and fovourable working conditions.
It's all about employees' perception that if they do good things for the company, they will be rewarded. A related problem is how to give employees' the freedom to innovate both within their assigned tasks and in other ways.
Management must never be seen to lie. If you promise people something, follow through on your promise, even if it's inconvenient.

Religion

A development group should use its members' human propensity to believe in what they are doing. Human beings present an API that can be used by any leader with a modicum of charisma.

Scale

There have been a number of slips in the release date for Microsoft's new operating system, Windows Vista. Microsoft was able to complete each previous version of Windows within a year or two of its original launch date. This begs the question, why is Longhorn / Vista taking so much longer than expected?

The biggest difference, as far as I can see, is in the number of interdependent parts. Even with some big features removed, Vista contains many new features, while retaining the ability to run most of the software written for previous Windows versions.

Even if each module depends on only 1% of the other modules in the system, and there are N modules, the total number of dependencies is N * N / 100. As the number of parts increases, the N^2 term means that dependency management must require an increasing amount of programmers' and managers' time. This is one of the main complaints voiced by people working on Vista.

How can one structure a large software project so as to remove or minimize that N^2 term? A central problem is the cross-cutting nature of security and backwards compatibility.