TIP: Click on subject to list as thread! ANSI
echo: c_echo
to: All
from: Bruce D. Wedding
date: 2004-04-27 21:09:16
subject: [C] Re: Extreme Programming

From: "Bruce D. Wedding" 

Kurt and Bob,

First off, it isn't a corporate or management strategy.  It was invented by
programmers for programmers.

KK> It all seems pretty solid, though I prefer to putter about on my own.

Me too.  My own preference is to take the good ideas from this and leave
what I think are the bad ideas.

> > 1.  Planning - Prioritize the next release by combining business
> > priorities with technical estimates.  Basically, perform the changes in
> > priority order.
>
> This restates the obvious.

Bob, I doubt you would be surprised if I told you that I seldom see this
happen in the real world.  Come to think of it, I've NEVER seen it happen
in the real world.  We develop a specification and begin coding and at that
point, everything is at the same priority.  Its in the spec so it MUST be
completed.

> > 3.  Testing - Continuous unit testing.  Tests are written as code is
> > written.  Customers write and run feature tests.  An integration test
> > must be run at each build.
>
> Again, this *should* be restating the obvious, but frequently it's not
> done.

And I've never seen it done to the extent that Extreme programming
suggests. When writing in C++, every class has test methods that test the
class functionality and must be updated anytime a method is added to the
class. All class tests are invoked by one call to a base test class. 
Examples are: http://www.xprogramming.com/testfram.htm

> > 4.  Refactoring - Continuous refactoring.  Simplify, remove duplication,
> > add flexibility.
>
> Improving algorithms is the most reliable way to enhance software quality.
> However, if there's more than one programmer working on it, coordination
> and communication become major issues.

"Improving algorithms" is a broad statement so I'm not exactly
sure what you mean.  Refactoring encompasses much more than what I think of
when I say improve algorithms.  There are over 70 refactorings listed in
"Refactoring: Improving the Design of Existing Code."  They fall
into several broad catego ries ie: simplifying code, reducing duplication,
consolidating methods or as simple as renaming a method or function.

As for coordination and communication, they are major issues either way, no?

> > 5.  Pair Programming
>
> Bull sh*t!!! I won't/can't work productively either with someone looking
> over my shoulder or holding someone else's hand. I've actually quit jobs
> rather than be stuck with this sort of arrangement.

LOL!  I don't like it either Bob.  Whether I'm in charge or not, it is no
fun and difficult to remain focuses if you don't have the keyboard.  I
actually get headaches from trying to follow code while some bozo is paging
up and down.  I hate it.

> Collective ownership = collective responsibility = no responsibility or
> accountability. This could only work if everyone had the same level of
> knowledge and experience. Otherwise, you will have well-meaning but
> clueless tyros "improving" critical code.

They will tell you that this will be caught by the pair programming.  I
also do not equate collective responsibility with no responsibility.  The
code has to pass the unit and integration tests before being accepted into
the master source.  If it doesn't, you know that you broke it and have to
fix it, hence learning the code.  If you have something
"critical" then certainly your tests will ensure that it operates
as it should, meeting schedules, calculating properly, etc.  If the tests
are properly written, then broken code can't be integrated.

> > 7.  Continuous Integrations- integrate and build many times a day.
> I'm sure this creates the illusion of productivity among those who can't
> tell the difference between movement and progress.

I think you miss the purpose.  The purpose is that you build after each and
every change so that it is patenly obvious through integration testing,
what is broken and what works.  The benefits are seen in decreased
debugging time.

> One thing none of your description addresses is how well the scheme
> supports CMM. Forget ISO-9000, CMM is the only valid metric for companies
> trying to insure software quality.

I don't see why is it the only valid metric?  We produce FDA approved
medical device software and I'm the only one there that even knows what the
CMM is.  The processes defined by CMM at various levels existed before the
CMM existed, it was defined by them, not the other way around.  In any
event, here is an article addressing the very issue if you care to read:
http://www.xprogramming.com/xpmag/xp_and_cmm.htm

> Any scheme which doesn't clearly
> address responsibility and accountability will have problems in a CMM
> enhancement environment. From my perspective, your description has lots of
> room for denied responsibility and finger pointing when things go wrong
> (and, sooner or later, things *will* go wrong!)

Bob, the goal is the creatiion of quality software.  There is only one
output, the software, and if it doesn't work, the TEAM is responsible and
accountable.  In my experience, finger pointers point fingers regardless. 
I remember the last time my boss pointed a finger at me with a CC to the
director and the VP in the email.  I did a reply to all and reminded her
that when you point a finger at someone, you have 3 pointing back at you. 
I pointed out about 7 of her bugs to each of mine and she quit that crap.

But, the real point is.  None of that gets you any closer to quality
software.  If the code is broken, it is irrelevent who broke it.  What is
relevent is the root cause and how do WE fix it?

> It might be OK in a typical desktop environment where everyone is using
> CASE or RAD tools. But when you get to a situation where real programmers
> are writing real programs rather than letting a machine patch together
> boiler plate, you need a responsible architect and a coherent design
> strategy.

Ignoring the obvious slight to application programmers,  I respectfully
disagree.  I've spent the last 5 years working on medical device software
that uses VxWorks RTOS and no CASE or RAD tools and I think some of these
concepts would have been of great benefit.  I will also note that none of
what I posted addressed the design which seems to be what you're taking
issue with, other that the part about prioritizing.  XP does address design
issues but I was focusing more on.  You seem to infer that a large
multi-programmer project starts with 12 guys at 6 computers with 6 blank
source files.  I doubt that is the intent.

> I've been there. The whole "pair programming" thing sounds like a
> corporate strategy to hire lots entry level programmers and force them to
> interact, hoping they'll make up in epiphanies what they lack in
experience
> and depth of knowledge.

Recalling that I'm generally opposed to pair programming, I believe the
intent is to disseminate information from the experienced to the less so as
well as spread the knowledge.  The obvious problem with your solution of
having the guru do all the "critical" code is that the guru
leaves one day and you're up a creek.  BTDT and had to pick up the pieces
after he left.

> Except for the restatements of the obvious ("breathing is good"), I'm
> generally underwhelmed. From what I've seen, most management fads have
> their basis in companies trying to minimize payroll costs without
> sacrificing quality or functionality. That's not necessarily a bad goal,
> but the fact that each year brings new fads tells us that each one has
> flaws. The obvious solution - to recruit the best staff possible, give
> them room to be creative, and retain them by treating them fairly - flies
> in the face of conventional business wisdom today.

I find our differing viewpoints quite interesting.  I didn't see this as a
management fad.  Perhaps I'm naive but I saw it as an attempt to improve
the pitiful software development situation present.  We've all seen the
numbers regarding the number of defects in released software, the
percentage of software projects that are late or never even finished.  I'm
not saying this is the solution to all of that, just an attempt.  I've
never practiced this stuff, just read a book or two.  I think there are
things to learn from it and things to leave behind.

--- BBBS/LiI v4.01 Flag-5
* Origin: Prism's_Point (1:261/38.1)
SEEN-BY: 633/267 270
@PATH: 261/38 123/500 106/2000 633/267

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.