[comp.software-eng] Programmer productivity

rfs@duke.cs.duke.edu (Robert F. Smith) (03/09/88)

I am interested in learning about research or tests of programmer's
productivity.  My search at the library was fruitless.  If you have
pointers/bibliographies/ideas on this, please e-mail to me.

Thanks,


Robert F. Smith                 CSNET: rfs@duke        
Dept.of Computer Science        ARPA:  rfs@cs.duke.edu
Duke University                 UUCP: {ihnp4!decvax}!duke!rfs
Durham NC 27706                 Phone (919)684-5110 Ext. 254

neff@Shasta.STANFORD.EDU (Randy Neff) (03/10/88)

Programmer Productivity References:

Measuring Programmer Productivity and Software Quality   by Arthur, Lowell Jay
	Wiley, 1985  (Cobol based)

Programmer Productivity   by Arthur, Lowell Jay
	Wiley, 1983   (Cobol based)

Programmer Productivity   by Parikh, Girish
	Reston Pub, 1984    (Cobol based)

Software Productivity     by Mills, Harlan
	Little, Brown  1983  (JCL, flow charts, mathematics)

Most standard Software Engineering books have a section or chapter on P.P.
Software Engineering,    Shooman, Martin
	McGraw-Hill, 1983

Software Engineering:  A Pratitioner's Approach   2nd edition
	McGraw-Hill,  1987

Unfortunately, the following book is still very true:
The Mythical Man Month     Brooks, Fred

I also strongly recommend the following book as an example of "how it could be"
Programmers at Work      Lammers, Susan
	Microsoft Press  1986

-----------------------------------------------------------------------------
Cynics' Law of Programming Productivity:
   A programmer's productivity is directly proportional to the size of his 
   or her stock option in the company.    

(think about it!)

emuleomo@paul.rutgers.edu (Emuleomo) (11/19/89)

I heard that the average programmer produces 3-4 lines of *finished* 
code a day!
This sounds ridiculously low.  Does anybody out there know what the real
figure is?  Or is it misleading to try and gauge productivity this way?
If it is, what are the recommended ways to measure programmer productivity
using some sort of metrics!
Any hints will be appreciated via email or otherwise.
Thanx

--Emuleomo O.O. (emuleomo@yes.rutgers.edu)
-- 
** The ONLY thing we learn from history is that we don't learn from history!

sccowan@watmsg.waterloo.edu (S. Crispin Cowan) (11/20/89)

In article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu> emuleomo@paul.rutgers.edu (Emuleomo) writes:
>I heard that the average programmer produces 3-4 lines of *finished* 
>code a day!
>This sounds ridiculously low.  Does anybody out there know what the real
>figure is?

The key words here are _average_ and _finished_.  Yes, a good
programmer can barf out 1000 lines of code in a day, if it's simple,
but it isn't always simple.  The claim is that for _average_ problems
and _average_ programmers, it will then take 250 days to fully debug
and document that code.  Also keep in mind that average includes a LOT
of DP programmers/problems, which means that those 1000 lines of code
have to interface to 1,000,000 lines of OTHER people's code, and get
it right.
>--Emuleomo O.O. (emuleomo@yes.rutgers.edu)

----------------------------------------------------------------------
Login name:	sccowan			In real life: S. Crispin Cowan
Office:		DC3548	x3934		Home phone: 570-2517
Post Awful:	60 Overlea Drive, Kitchener, N2M 1T1
UUCP:		watmath!watmsg!sccowan
Domain:		sccowan@watmsg.waterloo.edu

"We have to keep pushing the pendulum so that it doesn't get stuck in
the extremes--only the middle is worth having."
	Orwell, Videobanned
		-- Kim Kofmel

madd@world.std.com (jim frost) (11/21/89)

emuleomo@paul.rutgers.edu (Emuleomo) writes:
>I heard that the average programmer produces 3-4 lines of *finished* 
>code a day!
>This sounds ridiculously low.  Does anybody out there know what the real
>figure is?  Or is it misleading to try and gauge productivity this way?

I got the following information from Brooks' _Mythical Man Month_, pp.
90-94.  This table was originally from John Harr of Bell Telephone
Laboratories:

Task       | Prog Units | # prgmrs | Yrs | Man-yrs | Program Words | Words/yr
-----------+------------+----------+-----+---------+---------------+---------
Operational|     50     |    83    |  4  |   101   |     52,000    |   515
Maintenance|     36     |    60    |  4  |    81   |     51,000    |   630
Compiler   |     13     |     9    | 2.25|    17   |     38,000    |  2230
Translator |     15     |    13    | 2.5 |    11   |     25,000    |  2270

There are a couple of points which Brooks brings up with regards to
this (and some other) data.  First, programmer productivity drops
quickly as the number of people that a programmer must communicate
with increases.  This follows the above data exactly.  Second,
productivity depends on the complexity of the task.  The first two
tasks above are control programs, the last two are translators.  All
four are of similar size, yet control program productivity averaged
500-600 words/man-year, while translators where over 2,200.  Brooks
says "[several examples of productivity] data all confirm striking
differences in productivity related to the complexity and difficulty
of the task itself".  It is my belief that both points -- groups size
and code complexity -- are reflected in the above data, although
Brooks didn't look at this particular set of data that way.  It would
have been interesting to see what smaller groups could have done in
the control programming tasks.

Other data supplied by Brooks:

IBM OS/360 showed 600-800 debugged instructions per man-year in
control program groups, and 2000-3000 instructions per man-year in
translator groups.  These number are virtually identical to the above.

MULTICS had a mean of 1200 PL/I statements per man-year, which is
right about in the middle of both of the above data sets.

Somebody is likely to note that "program words" doesn't correspond too
well with "program lines".  Brooks says:

	"[The MULTICS] number is *lines* per man-year, not *words*!
	Each statement in [the MULTICS] system corresponds to about
	three to five words of handwritten code!  This suggests two
	important conclusions.

		o Productivity seems constant in terms of elementary
		  statements, a conclusion that is reasonable in
		  terms of the thought a statement requires and the
		  errors it may include.(1)
		o Programming productivity may be increased as much as
		  five times when a suitable high-level language is
		  used.(2)"

The footnotes are:

(1) W.M. Taliaffero also reports a constant productivity of 2400
statements/year in assembler, Fortran, and Cobol.  See "Modularity.
The key to system growth potential," _Software_, 1, 3 (July 1971) pp.
245-257.

(2) E.A. Nelson's System Development Corp. Report TM-3225, _Management
Handbook for the Estimation of Computer Programming Costs_, shows a
3-to-1 productivity improvement for high-level language (pp. 66-67),
although his standard deviations are wide.

>what are the recommended ways to measure programmer productivity
>using some sort of metrics!

I recommend measuring productivity by whether or not the product
works.  It's the only measure which is always correct.  Almost every
other measure is easy to fake or won't give you a good idea of how
much effort actually went into the result.

In conclusion, 3-4 lines per day sounds about right.  I suspect that
small groups of people, such as those found in small software
companies, do substantially better than that.  This could be the
result of paying much more attention to programmer ability than a
large company working on a large project could do.  In support of this
theory, a highly-skilled three-man team I was working with wrote
27,000 lines of code in ten months, which is roughly 2.5 man-years,
for an average of 10,800 lines per man-year or about 29 lines per
man-day of fairly complex code.  This code was not completely debugged
and I considered the programming rate to be exceptionally high (read:
we were killing ourselves to try to make a deadline).  Fully debugged
would likely have been closer to 15 lines per man-day.  I consider
these to be pretty much the highest numbers I'll ever see, the result
of a close-knit group of skilled people, something which rarely
happens in large industry.

Hope this is useful,

jim frost
software tool & die
madd@std.com

chrisp@regenmeister.uucp (Chris Prael) (11/21/89)

From article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu>, by emuleomo@paul.rutgers.edu (Emuleomo):
> I heard that the average programmer produces 3-4 lines of *finished* 
> code a day!
> This sounds ridiculously low.  Does anybody out there know what the real
> figure is?  Or is it misleading to try and gauge productivity this way?
> If it is, what are the recommended ways to measure programmer productivity
> using some sort of metrics!

Are there metrics to measure the productivity of electronic engineers?  
No?  Then how about measuring the productivity of mechanical engineers?  
Another blank? Perhaps they measure the productivity of civil engineers 
some way?  No again?  Perhaps a pattern can be seen here.

The real question here is: can you find a functional definition of
programmer productivity?  I submit that you cannot.  Certainly, lines of
finished code fails the test of being meaningful quite thoroughly!  What
is the point of trying to equate a programmer with a manufacturing robot?

> ** The ONLY thing we learn from history is that we don't learn from history!

Speak for your self!

Chris Prael

baalke@mars.jpl.nasa.gov (Ron Baalke) (11/21/89)

>From article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu>, by emuleomo@paul.rutgers.edu (Emuleomo):
>> I heard that the average programmer produces 3-4 lines of *finished* 
>> code a day!
>> This sounds ridiculously low.  Does anybody out there know what the real
>> figure is?  Or is it misleading to try and gauge productivity this way?
>> If it is, what are the recommended ways to measure programmer productivity
>> using some sort of metrics!
Well, it is low if you count only the coding phase of the software development.
The coding phase takes up only 10% of the entire software cycle. If you include
to time to write the requirements, design, code, parameter & assembly test,
integration and final testing, then the lines/day that a programmer produces
is not low.


 Ron Baalke                       |    baalke@mars.jpl.nasa.gov 
 Jet Propulsion Lab  M/S 301-355  |    baalke@jems.jpl.nasa.gov 
 4800 Oak Grove Dr.               |
 Pasadena, CA 91109               |

hollombe@ttidca.TTI.COM (The Polymath) (11/21/89)

In article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu> emuleomo@paul.rutgers.edu (Emuleomo) writes:
}I heard that the average programmer produces 3-4 lines of *finished* 
}code a day!
}This sounds ridiculously low.  Does anybody out there know what the real
}figure is?  Or is it misleading to try and gauge productivity this way?

It is a bit misleading unless you specify the language.  On the other
hand, the figure isn't unreasonable.  Sure, I can crank out a few hundred
lines on a good day with a lot of borrowing, BUT that isn't "finished"
code.  It still has to be debugged, tested, certified and documented.

And _that's_ assuming the code is for in-house or personal use.  If it's
for use by relatively naive customers I'll have to spend a lot of time
researching and designing the user interface before I even _begin_ to
write the code to run it -- not to mention all the time spent designing
the underlying data structures and algorithms.

Then there's the days when the system crashes or the test facilities
aren't available and I catch up on journals and net news. (-:

When you put it that way, 4 lines per day is pretty good "average" coding.

-- 
The Polymath (aka: Jerry Hollombe, hollombe@ttidca.tti.com)  Illegitimis non
Citicorp(+)TTI                                                 Carborundum
3100 Ocean Park Blvd.   (213) 452-9191, x2483
Santa Monica, CA  90405 {csun|philabs|psivax}!ttidca!hollombe

bryan@quame.UUCP (Bryan A. Woodruff) (11/21/89)

In article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu>, emuleomo@paul.rutgers.edu (Emuleomo) writes:
> I heard that the average programmer produces 3-4 lines of *finished* 
> code a day!
> This sounds ridiculously low.

We have found with our analysis:

Above average: 32 functions/week

Average:       18 functions/week

Below average: 8 functions/week

(Average LOC/function = 30)

SO... on the average -> 18 functions * 30 LOC/function * 5 days/week) ...

Well, you figure it out..

Bryan Woodruff

(...!uunet!quame!bryan) bryan@quame.uu.NET

dopey%looney@Sun.COM (Can't ya tell by the name) (11/21/89)

From article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu>, by emuleomo@paul.rutgers.edu (Emuleomo):
> I heard that the average programmer produces 3-4 lines of *finished* 
> code a day!
> This sounds ridiculously low.  Does anybody out there know what the real
> figure is?  Or is it misleading to try and gauge productivity this way?
> If it is, what are the recommended ways to measure programmer productivity
> using some sort of metrics!

I cannot tell you what the average is but I can say that as you
measure the value grows.  Human nature as it is says to maximize
on that value that you are measured by. So if you want me to code
1000 lines of code a day I can (though it may be do nothing lines).
But if you want me to develop a well structured robust code it will
take longer AND BE FEWER LINES OF CODE. So how does measuring
lines of code relate to programmer productivity?

If I were measuring programmer productivity (of the top of my
head so don't get to excited if I miss something obvious) I
would set strict standards that deal with well written programs
(e.g. IMHO a. few if any globals, b. one routine per file, c. well
documented, etc.). Then I would use CodeCops or Graders or whatever
you want to call them to see that the standards were followed and
justify those times that they were not followed (there will ALWAYS
be some). These CodeCops can then measure how well they can read the
code, how many and the severity of the bug found in the code, how
well the code stands up to user abuse, etc. Just the type of things
that other engineers (mechanical, electrical etc.) are measured by.

This method is more time consuming but it "MAY" measure that which
you REALLY WANT to measure and not a programmers typing speed.


This is one mans opinion.

jim@mks.com (Jim Gardner) (11/21/89)

In article <1989Nov20.170957.19588@world.std.com> madd@world.std.com (jim frost) writes:
>
>I got the following information from Brooks' _Mythical Man Month_, pp.
>90-94.  This table was originally from John Harr of Bell Telephone
>Laboratories:

I don't want to disparage Mr. Frost or the eminent Mr. Brooks, but The
Mythical Man-Month is written about an entirely different age of
computing (pre-1975).  I recently read the book and was surprised at just
how much has changed.  For example, Mr. Brooks predicted that programmers
would some day move from developing under batch to working extensively
with time-sharing systems, and he thought this was a good idea.  On
the other hand, he deplored the fact that OS/360 wasted 26 whole
bytes just to handle leap years correctly; he said that sort of thing
could be better left up to the operator.

Times have changed, programming techniques have changed, and our
ideas of software quality have changed.  Many of Brooks' insights
remain valid, of course, but things like actual numbers have to be
regarded as outdated.  (It's possible that the numbers haven't
changed, even though the programming environment is utterly different.
However, we need more modern studies to see if that's true.)

		Jim Gardner, Mortice Kern Systems

ashepps@telesci.UUCP (Anton C Shepps) (11/22/89)

   emuleomo@paul.rutgers.edu (Emuleomo) writes:
>I heard that the average programmer produces 3-4 lines of *finished* 
>code a day!
>This sounds ridiculously low.

I used to work at Unisys formerly Sperry, on the quote kernel unquote
of the 1100 family operating system.  I estimate that I produced about
3500 lines of code in 4.5 years.  This works out to about 3 lines/day. 

I was kept pretty busy during that time.  I wrote about 300 pages of 
definition, design, and test documents.  I was on a few committees.  I
made a few trips.  I attended many classes.  There were many meetings, and
there were hundreds of design & code reviews.  Paid and unpaid overtime.

Sadder yet is the number of lines that actually made it into a released 
product.  I estimate that only 1500 of my lines of code actually made it to
customers.  

Now turn this around; figure (conservatively) that it cost Unisys $60,000/year
to keep me in salary, benefits, development systems and premium office space.  
At that rate, each line of code cost them about $77.  Each line of code that 
made it to customers cost them $180.  They wonder why the company's gone
down the tubes, and why small, mobile companies have been able to cut into
their market!

>  Or is it misleading to try and gauge productivity this way?

One night, while still working for Unisys, I sat down and wrote a 700-line
program in Turbo Pascal, just for personal use and edification.  I became
depressed when I realized that I had written more lines that night than I
had all year. 

Of course, Turbo Pascal lines are not equivalent to lines of OS kernel code;
but someone using lines of code as a metric would find me 300 times as
productive on that night than during the previous day.
-- 
- Anton Shepps - ashepps@telesci.uucp - "Get back to work, you!" -M.Groening -

crm@romeo.cs.duke.edu (Charlie Martin) (11/23/89)

In article <34796@regenmeister.uucp> chrisp@regenmeister.uucp (Chris Prael) writes:
>From article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu>, by emuleomo@paul.rutgers.edu (Emuleomo):
>> I heard that the average programmer produces 3-4 lines of *finished* 
>> code a day!
Most places now get closer to 10 SLOC a day.

>
>Are there metrics to measure the productivity of electronic engineers?  
>No?  

Sure there are.

>Then how about measuring the productivity of mechanical engineers?  
>Another blank? 

Nope.  Happens all the time.

>Another blank? Perhaps they measure the productivity of civil engineers 
>Perhaps they measure the productivity of civil engineers 
>some way?  No again?  

Sorry, but civil engineers as well.

>Perhaps a pattern can be seen here.

Yes, I do think you're right: there is a pattern.  It obviously isn't
the one that you expect.

I'm a little bit sorry to take this approach, but I think you'll find
that there is some kind of way to measure the productivity, and to
estimate based on that productivity, in every engineering field and
many other fields as well (for example, the common rule of thumb for
technical writing is one staff day per completed page of camera-ready
text.)

What's more, I'm only a little bit sorry because I think you have failed
the back of the envelope first-principles test, which is one that every
engineer ought to consider.  If there *were* no way to measure,
estimate, and predict the productivity of engineers, what would happen?
Therer would be, for example, no way to say "we'll start designing this
building on monday, and we'll expect to review the designs with the
customer in 16 weeks; if that goes okay, then we'll plan for final
review with the contractor in 30 weeks, and construction can start on
week 40." 

It *is* true that many other engineering areas have difficulty making
very precise estimates, or measuring progress precisely.  ("Good news,
dear!  Today my staff engineered 0.000301 percent of the new bridge.
That's up 0.000007 from yesterday!")  To that extent, there is some
justification in your statement, and your comparison.  What does it mean
to say that 90% of the system is done?  (Another 90% of the work left,
of course....)

But to claim that other engineering fields have no measures of
estimating techniques, and (by implication) that it is foolish for
software engineering to look for suitable ones, is probably suitable for
fertilizer after suitable composting.

>
>The real question here is: can you find a functional definition of
>programmer productivity?  I submit that you cannot.  

What is your claim here?  That programmers produce nothing, and
therefore it isn't measurable?  I can offer many functional definitions
under an appropriate definition of the word "functional":

	- number of lines of code
	- number of machine-level instructions
	- number of pages of finished product
	- total cost divided by number of staff days

and for maintenance,

	- number of problem reports solved per staff day
	- progress of quality measures toward a goal, per staff day of
	  effort

These measures have theoretical problems (what is a line of code?  a
page of product?) but they have all proven useful in practice, and all
have some predictive value.

>Certainly, lines of
>finished code fails the test of being meaningful quite thoroughly!  What
>is the point of trying to equate a programmer with a manufacturing robot?
>

What is the point of trying to measure the efforts at all?  What does
"meaningful" mean here?  Empirically, lines of code work reasonably well
in practice, although this usually requires a lot of tuning of the
weighting factors; lines of code estimates and measures also correlate
quite highly with other "better founded" measures, when those measures
correlate with observed performance.

Or is there so little of science in software engineering that it is
impossible to measure its effect at all?
Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) 

schultz@cell.mot.COM (Rob Schultz) (11/23/89)

emuleomo@paul.rutgers.edu (Emuleomo) writes:

>I heard that the average programmer produces 3-4 lines of *finished* 
>code a day!
>This sounds ridiculously low.  Does anybody out there know what the real
>figure is?  Or is it misleading to try and gauge productivity this way?
>If it is, what are the recommended ways to measure programmer productivity
>using some sort of metrics!
>Any hints will be appreciated via email or otherwise.
>Thanx

Our developers spend as much as 6 or 8 months working on functional specs, 
analysis specs, interface specs, and design specs (HLD and LLD). Then the
developer may spend 2 to 3 weeks coding, another week or 2 unit testing, 
and then spend more time in integration. During the actual coding phase, 
a developer may crank out 5 or 10 modules of perhaps 30 to 60 NCSL's per
day. But averaged over the entire development cycle, yeah, 3 - 4 lines of
finished code per day is not unreasonable.

Given this, LOC per day is not really a good metric to measure productivity
with. However, one could easily use it during the strict coding phase (taking
into consideration such things as quality of design, etc). During other phases
of development one would have to measure productivity in other ways. I don't
know how at this point :-) but then I haven't seen any research on that point.

Hope this helps . . .

-- 
Thanks -            Rob Schultz, Motorola General Systems Group
     rms          1501 W Shure Dr, Arlington Heights, IL  60004
708 / 632 - 2875   schultz@mot.cell.COM   !uunet!motcid!schultz
"There is no innocence - only pain."        (Usual disclaimers)

chrisp@regenmeister.uucp (Chris Prael) (11/23/89)

From article <16170@duke.cs.duke.edu>, by crm@romeo.cs.duke.edu (Charlie Martin):
> In article <34796@regenmeister.uucp> chrisp@regenmeister.uucp (Chris Prael) writes:
>>Are there metrics to measure the productivity of electronic engineers?  
>>No?  
> Sure there are.
>>Then how about measuring the productivity of mechanical engineers?  
>>Another blank? 
> Nope.  Happens all the time.
>>Perhaps they measure the productivity of civil engineers 
>>some way?  No again?  
> Sorry, but civil engineers as well.
>>Perhaps a pattern can be seen here.
> Yes, I do think you're right: there is a pattern.  It obviously isn't
> the one that you expect.

Perhaps I over simplified.  I was referring to objective measures
commonly used by competant professionals.  I was not referring to
hypotheses that have never managed to escape academia.  Sorry to have 
confused you.

The term metric is generally taken to mean a number arrived at by a
completely "objective" and simple algorithm.  I believe lines of
finished code per day were mentioned in the posting to which I
responded.

> I'm a little bit sorry to take this approach, but I think you'll find
> that there is some kind of way to measure the productivity, and to
> estimate based on that productivity, in every engineering field and
> many other fields as well

First, I did not say, nor imply, that there was no way to estimate a
project.  There is one and it is commonly used in each of the fields I
listed as well as in software engineering.  Estimation of engineering
projects is a complex process that is practiced effectively by only a 
small percentage of the more senior professionals in most engineering
fields.

> (for example, the common rule of thumb for
> technical writing is one staff day per completed page of camera-ready
> text.)

Simple tools for simple users, eh?

> But to claim that other engineering fields have no measures of
> estimating techniques, and (by implication) that it is foolish for
> software engineering to look for suitable ones, is probably suitable for
> fertilizer after suitable composting.

I claimed, and still do, that other fields of engineering do not attempt
to fool themselves with simple minded numbers.  Every project lead and
manager "measures" the productivity of the staff working with him/her.
That measure is one's self.  One estimates how long a task would have
taken one to do, adjusts for assumed relative competance, and compares
that to what has actually happened.
 
I gave some thought to responding to the rest of your posting.  I
finally remembered that one should not kick puppies or bash kids.  Get
out in the real world and get yourself some experience.  In five to ten
years, if you find a good mentor, are fairly bright, and work hard, you
will start to have some knowlege of what you are talking about.  

Good luck.

Chris Prael

crm@romeo.cs.duke.edu (Charlie Martin) (11/25/89)

In article <34819@regenmeister.uucp> chrisp@regenmeister.uucp (Chris Prael) writes:
>From article <16170@duke.cs.duke.edu>, by crm@romeo.cs.duke.edu (Charlie Martin):
>> In article <34796@regenmeister.uucp> chrisp@regenmeister.uucp (Chris Prael) writes:
>>>Are there metrics to measure the productivity of electronic engineers?  
>>>No?  
>> Sure there are.
>>>Then how about measuring the productivity of mechanical engineers?  
>>>Another blank? 
>> Nope.  Happens all the time.
>>>Perhaps they measure the productivity of civil engineers 
>>>some way?  No again?  
>> Sorry, but civil engineers as well.
>>>Perhaps a pattern can be seen here.
>> Yes, I do think you're right: there is a pattern.  It obviously isn't
>> the one that you expect.
>
>Perhaps I over simplified.  I was referring to objective measures
>commonly used by competant professionals.  I was not referring to
>hypotheses that have never managed to escape academia.  Sorry to have 
>confused you.
>

Chris, do you have any, like, *evidence* that what you are saying is
true?  Which civil engineers have you quizzed?  What books on management
of design have you read?  If there is some evidence to what you are
saying I'd like to hear it.

But empty assertions and sneers aren't argument, nor do I count your
assertions as being more meaningful than mine because you currently work
at a company while I currently attend college.

On the side, I'll bet 58 cents I was programming for a living before you
graduated from high school.  

>The term metric is generally taken to mean a number arrived at by a
>completely "objective" and simple algorithm.  I believe lines of
>finished code per day were mentioned in the posting to which I
>responded.

I can't *imagine* a more objective and simple algorithm than that used to
count lines of code in most places I've worked.  "Number of non-blank
lines" was common.  "Number of non-blank, non-comment lines" was also
common.

It fulfils all the mathematical definitions of a measure, I believe
(forgive me that I don't dig up Halmos's book to check.)

Yes, the algorithm can be circumvented: someone can write a C statement
in a form like
	x = \n 3 \n + \n 4 \n ;
and in theory get 5 lines credit of a simple statement.

But -- you work for Sun, you tell me -- would you get away with that
kind of crap in your code, independent of the question of productivity
measures?  I sure hope not.  When my friends who had single-digit badge
numbers at Sun worked there, you certainly could not.

The source line of code measure is used precisely BECAUSE it is simple
and objective (see e.g. _Software Engineering Metrics and Models_, Conte
et al., or _Software Engineering Econonics_, Boehm.)  One reason it is
objective is that it presumes that the source code being counted fits
other constraints on its form that constrain away pathological cases
like the above.  This is the same reason that the "unroll the loop"
argument won't work: if you unroll 'for(i=1;i<10000;1++)' into 10,000
separate statements, you are not going to make friends with your
manager.

>
>First, I did not say, nor imply, that there was no way to estimate a
>project.  There is one and it is commonly used in each of the fields I
>listed as well as in software engineering.  Estimation of engineering
>projects is a complex process that is practiced effectively by only a 
>small percentage of the more senior professionals in most engineering
>fields.
>

Sorry, but that appears to be exactly what you did imply.  Estimating a
project is not something that only a small percentage of most senior
professionals do; even a first-line manager or a senior programmer does
it in software engineering.  There is indeed a way to estimate a
project; in most fields including software engineering, it comes down to
something like "how many things (SLOC, drawings, components) will it
take to build one of these?  How long does it take us to do a thing?"

Thing counting and empirical models based on previous experience are
precisely the way other fields do it; it's the way it is done in
practice in software engineering.  Source lines of code has been a
useful measure BECAUSE within standards it works; empirical models based
on SLOC fit predictions nicely to production, AND turn out to correlate
strongly with every other model that is also predictive.  (This really
isn't much of a surprise if you think about it.)  These empirical models
of productivity seem to be what you claim is not well founded or does
not work.

Why then are they predictive?

>I claimed, and still do, that other fields of engineering do not attempt
>to fool themselves with simple minded numbers.  Every project lead and
>manager "measures" the productivity of the staff working with him/her.
>That measure is one's self.  One estimates how long a task would have
>taken one to do, adjusts for assumed relative competance, and compares
>that to what has actually happened.

And I clain, and still do, that only fools think that SLOC is a simple
minded number without empirical support.  Are you a competent software
engineer?  Do you know what the state of practice in software
engineering is?
Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) 

jmi@devsim.mdcbbs.com ((JM Ivler) MDC - Douglas Aircraft Co. Long Beach, CA.) (11/26/89)

In article <16186@duke.cs.duke.edu>, crm@romeo.cs.duke.edu (Charlie Martin) writes:
> 
> The source line of code measure is used precisely BECAUSE it is simple
> and objective (see e.g. _Software Engineering Metrics and Models_, Conte
> et al., or _Software Engineering Econonics_, Boehm.)  One reason it is
> objective is that it presumes that the source code being counted fits
> other constraints on its form that constrain away pathological cases
> like the above.

While I hate to rain on your parade, In 1984 Dr. H. Callisen and S. Colborne 
of Magnavox Advanced Products and System Company in Torrance Ca. puplished 
a paper in Europe (I have a copy of it somewhere... ) on 'S.A.F.E. Syntatical 
Analysis For Estimation'. I presented a paper that was related to it (I was 
also working on the project) in October 1984 to the International Society of 
Parametric Analysts called 'Designing and Creating an Expert Opinion Database 
Using Delphi Techniques'. 

In both of these papers the core of the presentation was that B. Boehm was on 
the right track, but he had chosen the wrong metrics. Using lines of code to 
determine the cost of creating a software application is about the same as 
having a contractor estimate the cost of your new home by computing the number 
of nails he will have to use to build it.

The basis of SAFE and the EODB is that any and every requirements document can 
be broken down into processes that act upon other processes and that these can 
be interlinked to create a heirarchical model (gee, structered analysis and 
design concepts use for defining software estimation metrics in 1984 :-) ). 
Then values can be associated to the various processes and the linkages between 
those processes act as mutipliers of complexity to the overall structure. 
Using this algorithm every branch of the tree will generate a numerical value 
for the total complexity for that branch, and that, in turn can be translated 
into the manmonths required to perform the creation of that branch. Once all 
branches have been computed the root will have an associated value and the 
estimation process will be completed.

The EODB acts as a filter on the values that are associated to the individual 
process models, thereby allowing each process model to develop a more accurate 
weight value for that modules complexity based upon the prior estimated values 
that were set for that particular process model and the actuals recorded.

This entire process was to take place on-line, with the computer using state 
transition tables as it scanned the requirements document for process 
definitions and the associated linkages and broke these out into the 
heirarhical tree (a working prototype was developed before funding for the 
project ran out). 

If this seems rather sketchy, I apologize, but getting the concepts of a major 
published paper and a two hour talk into a few lines of bandwidth at 0200 in 
the morning isn't the easiest task in the world. If you are interested in 
obtaining a copy of the SAFE paper, send me Email and I will attempt to get the 
Library of Congress identifier to you (or at least the name of the Journal that 
it was published in). 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| J.M. Ivler at Douglas Aircraft in Long Beach, CA  - VOICE: (213) 496-8727 |
| INTERNET:  jmi@devsim.mdcbbs.com  | UUCP:  uunet!mdcbbs!devsim.mdcbbs!jmi |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

sccowan@watmsg.waterloo.edu (S. Crispin Cowan) (11/27/89)

In article <16186@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes:
>Why then are they predictive?
In the software engineering course that I took, I was given to
understand that:
	-SLOC is about as accurate as any other measure devised
	-SLOC is accurate to within a factor of 2 to 4 (depending on
	 the application domain).  Big deal, so is tummy rubbing (i.e.
	 expert opinion based on experience).

Yes, there is a lot of good work already done in software engineering,
and a lot of good work yet to be done.  We know lots of things, most
of them relating to how NOT to do it.  Software engineering research
has not yet suceeded in making programming an engineering field, it's
still an art.  We WANT it to be engineering, life would be easier if
it were engineering, but I don't believe that it's so, yet.

>Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) 

----------------------------------------------------------------------
Login name:	sccowan			In real life: S. Crispin Cowan
Office:		DC3548	x3934		Home phone: 570-2517
Post Awful:	60 Overlea Drive, Kitchener, N2M 1T1
UUCP:		watmath!watmsg!sccowan
Domain:		sccowan@watmsg.waterloo.edu

"We have to keep pushing the pendulum so that it doesn't get stuck in
the extremes--only the middle is worth having."
	Orwell, Videobanned
		-- Kim Kofmel

warren@psueea.uucp (Warren Harrison) (11/29/89)

>From article <Nov.18.22.47.26.1989.9685@paul.rutgers.edu>, by emuleomo@paul.rutgers.edu (Emuleomo):
>> I heard that the average programmer produces 3-4 lines of *finished* 
>> code a day!
>> This sounds ridiculously low.  Does anybody out there know what the real
>> figure is?  Or is it misleading to try and gauge productivity this way?
>> If it is, what are the recommended ways to measure programmer productivity
>> using some sort of metrics!
>
Typically, these figures are based on person-days of effort for the entire
project. So if you have a 1,000,000 line project and you spend 1,000 person
years on it you come up with about 3 lines per person day. However, those
1,000 person years usually include the effort to do requirements, specs,
design, testing, etc., as well as programming. I would personally suspect
anyone who claims to have detailed enough information on a large enough
sample of software to break down how much was spent "programming" (what
exactly *is* programming anyway? inspections? low-level design? thinking?
hmmm???) in a meaningful manner.

Warren

Warren Harrison                CSNET: warren@cs.pdx.edu
Department of Computer Science UUCP:  {ucbvax,decvax}!tektronix!psueea!warren
Portland State University      Internet: warren%cs.pdx.edu@relay.cs.net
Portland, OR 97207-0751

crm@romeo.cs.duke.edu (Charlie Martin) (11/29/89)

In article <463.256f438b@devsim.mdcbbs.com> jmi@devsim.mdcbbs.com ((JM Ivler) MDC - Douglas Aircraft Co. Long Beach, CA.) writes:
>In article <16186@duke.cs.duke.edu>, crm@romeo.cs.duke.edu (Charlie Martin) writes:
>> 
>> The source line of code measure is used precisely BECAUSE it is simple
>> and objective (see e.g. _Software Engineering Metrics and Models_, Conte
>> et al., or _Software Engineering Econonics_, Boehm.)  One reason it is
>> objective is that it presumes that the source code being counted fits
>> other constraints on its form that constrain away pathological cases
>> like the above.
>
>While I hate to rain on your parade, In 1984 Dr. H. Callisen and S. Colborne 
>of Magnavox Advanced Products and System Company in Torrance Ca. puplished 
>a paper in Europe (I have a copy of it somewhere... ) on 'S.A.F.E. Syntatical 
>Analysis For Estimation'. I presented a paper that was related to it (I was 
>also working on the project) in October 1984 to the International Society of 
>Parametric Analysts called 'Designing and Creating an Expert Opinion Database 
>Using Delphi Techniques'. 
>

If the point of "don't want to rain on [my] parade" is that SLOC isn't
the best conceivable metric, or perhaps isn't the best one currently
available, hell, it don't hurt MY feelings none.  

But these are two seapate questions, I think.  One point had been that
SLOC was not a good metric, that the whole idea of measures of
productivity for software engineering (and all engineering, for that
matter) was ludicrous and unscientific, not to mention immoral and
fattening.  In fact (it was alleged) SLOC was not a metric at all in the
sense that it did not fulfill the mathematical definition of a metric.

Now, I think this are all incorrect notions, and so far I've not seen
much in the way of scientific support for them.  The peculiarity of SLOC
is that for all the paradoxes and pathological cases that can be
presented, they seem to be nearly as predictive as other metrics of
program size and are very cheap to compute.  (They also fit the
mathematical definition, if anyone really cares.)  The paper that I
recall showed that SLOC and other measures correlated to about the 0.9
level, not bad at all for something that seems to be in large part
psychological in nature.

The second point, which you appear to raise, is whether or not they are
a GOOD metric in the sense that they are more effective than other
metrics.  I don't doubt that they are not.

>.... Using lines of code to 
>determine the cost of creating a software application is about the same as 
>having a contractor estimate the cost of your new home by computing the number 
>of nails he will have to use to build it.

One of the things I like least about most software engineering arguments
is that we so quickly forget about evidence and proof and devolve to
metaphor.  In this case, I'd just have to point out that number of nails
is likely to be predictive of the cost within, oh, 30% or so, so long
as the house is frame construction and the cost weighting factors takee
into account the cost of other houses built to code in that area in the
near past.  The reason is that, other things being equal, carpenters
TEND to use the same number of nails to build ten running feet of wall,
and that and other costs correlate well with square feet of floor
space.

But can't we SOMEHOW find a way to make software engineering more
scientific than that?

>
>The basis of SAFE and the EODB ...
>
>If this seems rather sketchy, I apologize, but getting the concepts of a major 
>published paper and a two hour talk into a few lines of bandwidth at 0200 in 
>the morning isn't the easiest task in the world. If you are interested in 
>obtaining a copy of the SAFE paper, send me Email and I will attempt to get the 
>Library of Congress identifier to you (or at least the name of the Journal that 
>it was published in). 
>

I would love to read the paper, and rather than EMAIL I'd suggest that
you go ahead and post; good work shouldn't be hidden.  It fits in rather
neatly with some notions I've had about using Kolmogarov complexity of
specifications....  Anyway, thanks for the info, and I'd very much like
the pub refernce.


Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) 

crm@romeo.cs.duke.edu (Charlie Martin) (11/29/89)

In article <31986@watmath.waterloo.edu> sccowan@watmsg.waterloo.edu (S. Crispin Cowan) writes:
>In article <16186@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes:
>>Why then are they predictive?
>In the software engineering course that I took, I was given to
>understand that:
>	-SLOC is about as accurate as any other measure devised
>	-SLOC is accurate to within a factor of 2 to 4 (depending on
>	 the application domain).  Big deal, so is tummy rubbing (i.e.
>	 expert opinion based on experience).

Good point: SLOC is about as good as anything, and SLOC isn't
particularly good.  My suspicion is that we haven't figured out
effectively enough how to standardize our measures for the psychological
side (understanding of and complexity of the specifications.)

I do think that most people who use an empirically-based weighted
model, e.g. COCOMO with weights derived statistically within the
organization, find far better accuracy that within a factor of 2 to 4.
My wife manages maintenance on about 1.2 megaSLOC and her model is
within about 15 percent.  But that's just been my experience; I don't
have a good study to quote to you.

>
>....  Software engineering research
>has not yet suceeded in making programming an engineering field, it's
>still an art.  We WANT it to be engineering, life would be easier if
>it were engineering, but I don't believe that it's so, yet.

I agree.  It's fortunate so, because otherwise I might not have a
research area :-)
Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) 

peterd@cs.washington.edu (Peter C. Damron) (11/30/89)

In article <16231@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes:
>In article <31986@watmath.waterloo.edu> sccowan@watmsg.waterloo.edu (S. Crispin Cowan) writes:
>>In article <16186@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes:
>>>Why then are they predictive?
>>In the software engineering course that I took, I was given to
>>understand that:
>>	-SLOC is about as accurate as any other measure devised
>>	-SLOC is accurate to within a factor of 2 to 4 (depending on
>>	 the application domain).  Big deal, so is tummy rubbing (i.e.
>>	 expert opinion based on experience).

>Good point: SLOC is about as good as anything, and SLOC isn't
>particularly good.  My suspicion is that we haven't figured out
>effectively enough how to standardize our measures for the psychological
>side (understanding of and complexity of the specifications.)

Excuse my ignorance, but how does one use source lines of code (SLOC)
in any predictive way?  Presumably, we are talking about estimating
how long a particular project will take.  I understand that once you
know how many SLOC it will take for the project then you can predict
how long the project will take.  But, how does one translate a
specification into some number of SLOC?  This seems difficult to me.

Just curious,
Peter.

---------------
Peter C. Damron
Dept. of Computer Science, FR-35
University of Washington
Seattle, WA  98195

peterd@cs.washington.edu
{ucbvax,decvax,etc.}!uw-beaver!uw-june!peterd

kww@cbnews.ATT.COM (Kevin W. Wall) (11/30/89)

In article <16186@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes:
>The source line of code measure is used precisely BECAUSE it is simple
>and objective (see e.g. _Software Engineering Metrics and Models_, Conte
>et al., or _Software Engineering Econonics_, Boehm.)  One reason it is
>objective is that it presumes that the source code being counted fits
>other constraints on its form that constrain away pathological cases
>like the above.  This is the same reason that the "unroll the loop"
>argument won't work: if you unroll 'for(i=1;i<10000;1++)' into 10,000
>separate statements, you are not going to make friends with your
>manager.

Counting SLOC is reasonably *simple*, yes.  But I'm not sure I understand
what you be by objective.  E.g., Programmers X & Y both are given the
same assignment.  Suppose that both write code of comparable quality
and take approximately 5 days to write it, but programmer X wrote 500 source
lines of code to do it in, and programmer Y does the same task in only
150 source lines of code.  So, programmer X wrote more code than programmer Y,
so what; big deal!  The question we have to answer is "what does this imply?"
That programmer X's code is somehow better? No.  That programmer X is somehow
more productive?  Well yes, sort of, in the literal sense.  Prog X's
productivity was 100 SLOC/day, whereas prog Y's is only 30 SLOC/day.  So
obviously prog X is the better programmer, right?  Again no.  Maybe prog X
is just a very inefficient coder.  Also, there is the whole is of maintenance
(often 50% or more of the entire life cycle).  Whose code is easier to
maintain?  SLOC gives no real indication of this, but all OTHER things being
equal, I'd have to say *I* would have to say regarding maintenance LESS SLOC is
(usually) favorable.  Unfortunately, using SLOC as a metric leads to all
sorts of (apparent) paradoxes such as these.  [See the book, "Programming
Productivity", by Capers Jones for an execellant discussion of these and
others.]

For these reasons, I have a hard time swallowing the SLOC as a metric is
"objective".  I'll accept it, but only after you define in what sense it
is objective.

>Thing counting and empirical models based on previous experience are
>precisely the way other fields do it; it's the way it is done in
>practice in software engineering.  Source lines of code has been a
>useful measure BECAUSE within standards it works; empirical models based
>on SLOC fit predictions nicely to production, AND turn out to correlate
>strongly with every other model that is also predictive.  (This really
>isn't much of a surprise if you think about it.)  These empirical models
>of productivity seem to be what you claim is not well founded or does
>not work.
>
Well that is ONE reason; however, I thing the main reason that is has been
useful is because, as we both agree, it is SIMPLE.  It involves almost no
effort to count SLOC.  (I'm not sure what you mean when you write "within
standards it works".  [See above.]  To what standards are you refering.
I need a little clarification here.  I personally have seen only poor
correlations when using SLOC to estimate remaining project effort.  This
is for 2 reasons: 1) poor initial estimates regarding the total # of SLOC
were way out of line, 2) the assumption that the last X lines of code is
just as easy to write as the first X lines of code were.  (I believe that
the assumption in 2) is false because a) the difficult code is often written
last, and b) there is a larger integration problem with the last X lines
of code than there is with the first X lines.)

>And I clain [sic], and still do, that only fools think that SLOC is a simple
>minded number without empirical support.

I don't know if I'd call SLOC a "simple minded number without empirical
support", but (for all the reasons stated above), I would say it is
virtually useless.  And in my book, that's about the same thing as calling
it the former.  I guess that makes me a fool then.  Oh well, I've been
called worse. :-)

-- 
In person: Kevin W. Wall			AT&T Bell Laboratories
Usenet/UUCP: {att!}cblpf!kww			6200 E. Broad St.
Internet: kww@cblpf.att.com			Columbus, Oh. 43213
		"Death is life's way of firing you!" -- Hack rumor

sullivan@aqdata.uucp (Michael T. Sullivan) (12/01/89)

I, too, don't count the number of lines in my software as I always
thought it was pretty silly.  During some job interviews I would
mention some systems I had worked on and was asked how many lines
of code they were.  The interviewer wasn't looking for a precise
count, he/she was merely trying to get a feel for how big the projects
were.  This way, 1000 and 2000 wouldn't have been too different.  However,
1000 and 10,000 would have been.  A light bulb went off in my head and
I realized that lines of code weren't so evil when used in this light.
-- 
Michael Sullivan          uunet!jarthur.uucp!aqdata!sullivan
aQdata, Inc.              aqdata!sullivan@jarthur.claremont.edu
San Dimas, CA

crm@romeo.cs.duke.edu (Charlie Martin) (12/01/89)

In article <9986@june.cs.washington.edu> peterd@june.cs.washington.edu (Peter C. Damron) writes:
>In article <16231@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes:
>
>Excuse my ignorance, but how does one use source lines of code (SLOC)
>in any predictive way?  Presumably, we are talking about estimating
>how long a particular project will take.  I understand that once you
>know how many SLOC it will take for the project then you can predict
>how long the project will take.  But, how does one translate a
>specification into some number of SLOC?  This seems difficult to me.
>

It *is* difficult.  The best semiformal way is to have a collection of
estimates and final SLOC results for a bunch of programs in the same
general domain (MIS, real-time hardware control, whatever).  These
provide a basis for building empiricals of SLOC from something that is
measurable or countable in the specification.

More often, the expert takes a wild-assed guess from the specification
and some analysis of it, which amounts to working with the same data
base of information on a less formal (and less accurate) level.

Even so, the guess of number of SLOC is often accurate within 10-20
percent in practice.

The whole point of SLOC as a predictive number is that SLOC is
measurable, and time spent coding is also measurable.  Other rules (how
long to do detailed design) derive from lifecycle models and previopus
experience.  None of these is very good, and all of the questions of how
do you estimate SLOC and how do they relate to results are good ones.


Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) 

crm@romeo.cs.duke.edu (Charlie Martin) (12/01/89)

I didn't include the article I'm replying to because I'm too lazy to do
a good job of cutting it.  I don't think I'm taking any liberties with
the reasoning, but if I did, just let me know.

I think there is a hangup between "is an objective metric" and "is a
GOOD objective metric."  I claim SLOC as an objective metric in the
sense (1) that it is objective because when I give an exact and
effective description of SLOC, I'll get the same count every try, and
anyone else who uses the exact an effective description to count with
will also get the same count every try, agreeing both with counts from
observation to observation and between observers; and (2) that it has
the properties we associate with a metric mathematically (essentially
that it is additive and obeys the triangle inequality).

I'm pretty well aware of the various paradoxes of SLOC; I used to argue
this from the other side before I changed my mind.  The reason I changed
my mind is that over a large number of observations and a long time,
the figure "5--10 source lines of code per staff day" has stood up
quite well.  Even stood up under the change between assembler and
HOL's.  

(One thing about this sort of figure is that it is natural to read this
as meaning "they only write 10 SLOC a day and that is it" when the
observation is instead 

	total source lines of code
	------------------------------  ~= 10
	total staff hours over project

Naturally one writes more that 10 SLOC a day; the remainder of the time
is spent writing all the other stuff, reviewing it and testing it.)

Given approriate weightings derived empirically, SLOC seems to
lead to a model that is predictive, with both testable time/cost
estimates and testable error margins (admittedly large) that can be
verified.  More oddly -- and I don't UNDERSTAND this, I've just
OBSERVED it -- things like Halstead and McCabe don't seem to do a lot
better job than SLOC based models do.  Halstead in particular seems
only to be predictive in the areas and under the conditions that SLOC
is predictive.  Many of the paradoxes of SLOC have analogous paradoxes
in other metrics (like the confounding examples for cyclomatic
complexity.)  Most of these things are anywhere beween harder and LOTS
harder to compute, but don't seem to model any more effectively.

For all of these reasons, SLOC (and the others) aren't very good
metrics.  I only use any of them because I know of nothing better, and
they allow me to estimate eith reasonable accuracy (including knowing
what the error margin may be, and when my modles are of no use.)
metrics.  

The original assertion wasn't that these are not good metrics -- all I
could say then is "have you got something better?  May I have it?"  It
was instead that it was meaningless to even assert that productivity
metrics could be defined or used.


Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)