636375 1994-06-04  18:44  /256 rader/ Ulf Lagerstedt
Mottagare: Programmering (-) algoritmer (och) liknande <1513>
Mottagare: Programutvecklingsmetodik (diskussion & erfarenhetsutbyte) <12>
    Snt:     1994-06-09 02:26
    Snt av Fredrik Nyman  (statstjnstefnask)
Markerad av 17 personer.
rende: Hur man driver utvecklingsprojekt
------------------------------------------------------------

Denna artikel r frn Software Development International, vintern 1991. 
Ls den.



..Writing exceptional software

It may be surprising to most people that there is no great secret to
developing exceptional software. Exceptional software is almost always
developed quickly by small teams of developers. More than 80% of the
top-selling PC programs were developed by one or two people. 

The typical method of doing business works well for many products. It
includes extensive planning and a methodical, traditional management
style. But it's completely ineffective in a software development
environment. The following changes are necessary to encourage superior
software development.

Most importantly, individual developers need to be given total
responsibility and control for their parts of a program. Each
programmer should be responsible for designing, coding, and debugging
a specific part of a program, and be encouraged to use his or her own
judgment as to how each part should appear or function. 

When a developer working for me told me I was wrong about and approach
I had suggested, I would try to learn the reasons and work out a
compromise. However, if we could not reach an agreement, the developer
almost always had the final decision.

No programmer should be split between several projects. People will
work diligently and effectively to finish a single product. They will
not work nearly as well if they are being pulled in seven different
directions at once.

Each programmer should have a sense of ownership of their part of a
program. If a person owns something and has control over its success,
that person will work hard to make it as good as possible. This is a
big change. Working a certain number of hours to finish a certain task
is no longer a programmer's job. Instead, programmers develop a piece
of software for which they are solely responsible: from design and
coding to testing.

A programmer is told what and how to code. A developer determines what
to code and does it independently. Companies that hire programmers
write bad software. Companies that hire developers write superb
software. Quite simply, programmers must be turned into developers.
When this change occurs, the increases in productivity, innovation and
quality are incredible.

When I started one job as director of software development, the
company had a project involving six programmers, that had been in
development for over three years and was 25% completed. One person
specified a section. A second person designed it and broke it into
server, client and fourth generation language parts. These three parts
were given to three different programmers to develop independently.
Finally, another person would test the programs.

Not only was almost nothing getting done, but the programmers had
realized a year earlier that the fourth generation language would not
work in the final user environment. But they kept using it. These were
intelligent people who cared about finishing the project. However,
they were placed in a situation where they could not succeed. 

My first action as director was to have the group break the project
into six major pieces and assign each person one complete part. Each
developer was totally responsible for a piece of the project. One
quarter of the project was completed in four months.

Don't worry about consensus. Most software programs can be written in
three to six months. If you don't write it that quickly, someone else
will. If you take the time to study, arrive at a consensus, and
completely design a product, the people who just sat down and started
programming with only a general plan will probably have been selling
their product for several months by the time you get to market.

Time is the second greatest enemy of software development (bad
management being the first). If a new product beat its competitors to
market by six months, it will most likely dominate that market. Any
product more than 18 months old will start to lose large amounts of
market share if a good update does not come out quickly.

Developers must be free to try ideas that others don't like. When I
was developing a litigation-support system for attorneys, I developed
a menuing system that *everyone* disliked. However, I believed it was a
good interface and kept it in. When the product was finished, everyone
who used it (including earlier detractors) thought the menu interface
was the best they had ever used.

Group consensus generally does not contribute to good software design.
The specification for the Ada compiler was designed by the U.S.
government and a number of big companies. No one uses it unless
required to by government contract. On the other hand, C was designed
by two developers and is now used in more than 85% of the software
developed in the U.S. for PCs. 

Eliminate project design and review as an exhaustive and rigorous
process. A project proposal should be less than one page long and
preferably only a page or two. Anything longer mires the project in
bureaucracy before it starts. Most design should occur as the program
is written. 

Minimal, formal, ongoing reviews of a project should be conducted. At
four to six months, the basic program should be working. Look at it
then and determine if it makes sense to continue. At the end of an
additional four to six months, the project should be completed.
Monitor progress by talking to individual developers as the program is
being written. 

You must trust the developers on the project to create a good product.
If you review each step, developers no longer have control or
responsibility and become just programmers again. Also, developers
spend so much time in meetings that almost no time is left to program.

You will occasionally have failures using this method. However, the
successes will be so much greater and quicker that the net, positive
result will be worth it. "Fast failure" is expected to occur many
times. When it does, you find a new way to solve the problem. The
important thing is to fail quickly so you have time to find another
approach. 

Developers must also feel free to say what they think to their
supervisors. Constant feedback is essential for developers to be able
to test new ideas and for management to know what is happening.
Ideally a free market will exist: all ideas are brought forth and the
good ones survive.

A software project manager should be one of the program developers.
The majority of the manager's time should be spent designing and
writing part of the program. The remainder should be spent talking to
others on the project to make sure its going in the right direction.

The manager must be a very good programmer in his own right. A manager
who is less capable than the developers cannot possibly follow what is
happening. I do not know of a single successful software company where
the individual in charge of software development is not a superb
developer. 

Finally, no project should take more than six people or longer than
one year - no exceptions. Adding more people, especially late in the
game when the project has gone past schedule, just slows it down. It's
not just that the seventh person adds little productivity to the
group, but the seventh person reduces total group productivity. 

If Volkswagen needs to produce more cars, it doesn't put more people
on the assembly line; it builds another assembly line. An assembly
line with too many people will produce fewer cars because people will
get in each other's way.

Assigning too many people to a project essentially guarantees that you
will turn everyone into programmers and the project will take several
years. I do not know of a single project with more than 10 people on
it that was completed in under a year. I know of many comparable
projects completed in less than six months with one to three
programmers.
 

Compensation must be based on the developer's skills. Age, schooling,
and number of years with the company are irrelevant. You hire
developers because you want them to write superb code. If they can do
so, you should pay then a superb wage. One of the best developers I
know never went to college - it is not a factor in his salary.

Also, overtime should not be paid. Developers are paid to develop
software and their compensation should be based solely on how well
they develop it. If one person works twice as many hours as another
but both complete comparable projects in the same amount of time, they
should be paid the same. If someone is paid overtime for working long
hours, even if they get nothing done, then you are giving the message
that the appearance of work is more important than the actual work
produced. 

If someone who does and efficient job is paid the same (or even worse,
less) than someone doing a mediocre job, you are telling that person
that their development abilities are not important to you. In the
U.S., good programmers make more than $50,000 a year and excellent
programmers, more than $100,000 a year. Programming geniuses, and there
are a number of them, can make more than a million dollars a year.
These people are paid well and earn their money. They are the ones who
produce software that sells millions of copies and makes millions of 
dollars. 

A significant portion of each person's compensation should be made in
bonus or profit-sharing form, based on the merits of their projects.
This kind of renumeration gives developers extra incentive to complete
their projects quickly and deliver a superb product.

Remember that an employee's pay is the truest measure of the value a
company places on that employee. No matter what you tell employees,
they will not have much loyalty if they are poorly paid. In addition,
if a developer is good enough, some other company will make a
worthwhile offer. 

The most important part of the work environment is flexible time.
Developers should be able to work the hours they choose. If someone
worked late one night, it is counterproductive to demand that they
show up early the next morning, too tired to do any productive work. 
There is a saying that if a developer is at the office at 9:00 in the
morning, it is because he or she worked through the night. 

Developers reach a point where their brains stop working (about once a
month in an intense programming environment). They should be able to
take a day or two off with no loss of pay. Without this time off,
productivity is usually so low as to be almost worthless. 

When a project is completed, all of the developers on the project
should be given an extra week or two off immediately. Developing a
product is like running a marathon: you need to let your brain unwind
when you are done.

Each developer should have his or her own office. At worst, there
should only be two developers in an office (not a partition, but a
real office with walls to the ceiling and a door that can be closed).
Developers need to concentrate for extended periods of time and an
office gives them the privacy and quiet to do so. 

At my previous job, I moved the developers out of one large office
into two-person offices. Within a week, they all told me their
productivity had increased enormously. They were no longer being
constantly interrupted. 

Finally, eliminate the dress code. I have never met an adequate
programmer who wore a tie to work. I have met many very good
programmers who wore shorts and sandals to work. If you require
developers to wear ties, you are telling them that how they look is as
important as what they do. 

Can you imagine a book-publishing company working like a software
company? Imagine telling William Shakespeare that he had to design a
book with a committee of writers. Then he could write some of the
chapters, but others would write the rest of the book. Weekly meetings
would ensure that the chapters flowed together.

Software companies do this daily. When you think of writing software,
think of what you would do if a best-selling author said he or she
wanted to write a book for you. Software developers should be treated
the same way. In the industry, most companies figure that if you have
10 people who aren't very good, have them work together and they will
produce something better. It usually end up 10 times worse.

The original Lotus and dBASE where probably the two most successful
application programs ever written. Lotus was written by one person in
18 months. Also, the macro capability was added by the developer at
the end because he had some extra time - it wasn't even in the
informal spec. dBASE was written by one person over a two-year period
while he also held a full-time job. Brief (the text editor) was
written in six months by two developers who had just graduated from
college. The Zortech C++ compiler was written by one person in less
than one year. 

The list could go on and on. Are you ready to offer this type of
productive environment? It's difficult, but the benefits speak for
themselves. 


[Dave Thielen is senior software developer at Microsoft in Redmond, Wash.]
(636375) -----------------------------------
Kommentar i text 657533 av Henrik Grubbstrm (Lysator)
