Author of a paper and presentation titled "Misconceptions of the Agile Zealots", presented recently at the Atlanta SPIN (http://www.atlantaspin.org or http://www.cc.gatech.edu/SPIN/ver002/Archives/061703.html), Silicon Valley SPIN (http://www.gd-ais.com/sv-spin/Events/schedule.htm), and North Jersey SPIN (http://www.njspin.org/). See http://www.toa.com (The Object Agency) and in particular his articles page, http://www.toa.com/shnn?searticles. This specific paper can be downloaded from http://www.toa.com/pub/Misconceptions.zip. ----- In 2000 he posted this to news:comp.object. After you read several pages of misdirection and insinuation disguised as erudition, you will read 'I am not interested in any more "XP battles."' So he seems to have reversed his stance, with his recent "AgileZealots" career shift. '''Battles I Cannot Win''' "Those who cannot remember the past are condemned to repeat it." -- George Santayanna (1863-1952), from The Life of Reason [1905-1906], Volume 1, Reason In Common Sense Introduction Over the past couple of years, I have watched as interest in Extreme Programming (XP) gradually consumed comp.object. In addition to the informational and question-answering posts, there has been a flurry of zealotry. Zealotry takes many forms. Some posters felt it necessary to go far beyond merely advocating/prosoelytizing XP. They chose to directly confront not only existing object-oriented technology, but the established base of software engineering in general, human psychology, and management practices. The onslaught has had a very noticeable impact on the traffic in comp.object. People attempting to have discussions on non-XP traffic, for example, sometimes find their threads taken over by XP issues. Others simply refuse to post, lest they get caught up in the fanaitical vortex. (I have received several pieces of private e-mail on this topic.) There has always been fanaticism and zealotry in comp.object. Booch advocates slugging it out with Rumbaugh (OMT) advocates and Shlear-Mellor advocates, for example. Language wars were also common, e.g., Eiffel, C++, Smalltalk, Java, and Python. Of course, there were the nitty-gritty detailed threads on the real definitions/values of such things as covariance, polymorphism, and single versus multiple inheritance. The pre-XP mix of people in comp.object included good numbers of university professors, grad students, methodologists, and gurus of all denominations. People doing real object-oriented projects, who had an immediate need for information, made up a significant portion of the posters. To be fair, there are at least 2 other major factors that have colored what we see in comp.object: 1. The Internet itself. Until the early 1990s, the Internet was primarily the domain of people who understood technical matters, and who also had the resources to exploit it. These people included universities, people working on government contracts, large telecommunication companies, and technical consultants for hire, for example. Nowadays, in the "dot.com world," the Internet is a model of cultural diversity. This diversity is wildly amplified by all the new avenues (and cross avenues) for communication. One no longer has to understand the differences between newsgroups, mailing lists, bulletin boards, and chat rooms. You can tap into just about any on-going conversation, from just about anywhere. Our enriched discussions make it very clear that we "Internet old-timers" can no longer make the same assumptions about our fellow participants as we once did. 2. A branch of sociology called "diffusion research," investigates how a new idea (an innovation) moves through a society. Diffusion researchers study how new ideas are communicated, how they change the society, and how the diffusion (communication) changes the new idea itself. Diffusion researchers identify the phases of an idea's acceptance, and the types of people involved in those phases. For example, the first on the scene are referred to as "innovators," while the last on the scene (if they ever make it) are referred to as "laggards." You can get some idea of the phases of an innovation's acceptance by looking at the labels given to the people involved, e.g., innovators, early adopters, early majority, late majority, late adopters, and laggards. The innovators for object-oriented technology were involved prior to 1970. The early adopters showed up in the first half of the 1980s. The early majority started showing up in the second half of the 1980s. Somewhere towards the end of the 1990s, the late majority began arriving. Those people coming late to a technology have a distinctively different outlook than those arriving early. Different Playing Fields, Different Rules In the not-too-distant past, discussions in comp.object were governed by certain "rules" (conventions really). For example, it was perfectly permissible (and, in many cases, encouraged) to cite literature references to back up your point. This process was an interesting cross between the scientific method and legal arguments (i.e., using precedence to argue the meaning of a point). Real case studies, as well as data and stories from real projects, were especially prized. One of the more commonly-invoked rules was "some data is better than no data." This could be trumped using the "more data is better than less data rule." Of course, there were endless discussions involving statistical significance, the context of the data, and what one could and could not generalize from the information at hand. Another, very important, rule was that you had to work within the confines of nature as defined by other disciplines. For example, we have to accept the limitations of the human mind to learn new things. We have to understand that not everybody can do everything equally well. "Too many cooks" can spoil the "broth" regardless of the context. It is also important to realize the value of particular activities, tools, and concepts. E.W. Dijkstra and Harlan D. Mills both advised us that designing programs correctly was far better than testing and debugging a program into correctnes. This lead to another rule: don't be sloppy now hoping that your sloppiness will be caught later. Dilbert's boss ("Mr. Twin Peaks") gave us an "anti-rule" (a rule in reverse) when he said "Anything that I don't understand has to be easy." This told us again that we had to respect existing bodies of knowledge and experience. If we were not willing to investigate a methodology, or a discipline, for example, we should be very careful in our assumptions about that item. Sir Isaac Newton (1642-1727), in a letter to Robert Hooke, reminded us that "If I have seen further (than you and Descartes) it is by standing on the ShouldersOfGiants." This taught us to first investigate what is already known or in place, before setting out in a "new" direction. Doing this would either give us a "head start," or show us that we did not need to reinvent the wheel. The abundant diversity in the object-oriented world also made us aware that the "playing fields" were not all the same. For example, depending on who your were talking to, a "class" could be a simple template, a template plus a creation mechanism, or a set of items constructed using a particular template. Some people talked about "classes and inheritance," while others sought out "exemplars and delegation." Types and classes are the same thing for one group, while being fundamentally different for another. One of the more interesting and important playing field distinctions, with regard to object-oriented software engineering, is that among the artificial intelligence sector, the Smalltalk sector, and, for lack of a better label, the C++ sector. (Eiffel, Ada, Java, and other programming languages are all used by people who could be said to fall into this sector.) "Software Engineering" in its most exacting form lives in the C++ sector. The denizens of this sector typically value metrics, methodologies, engineering knowledge and disciplines, technical literature, and formalized approaches in general. They strongly tend to value science and engineering over "magic." For these people, it is not enough to do something well. You have to know that you did it well. Lord Kelvin (William Thomson), who lived from 1824 to 1907, speaks for the C++ sector when he says "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind: it may be the beginning of knowledge, but you have scarcely, in your thoughts, advanced to the stage of science." When he came up with FLEX, Alan Kay was looking for a computer for the rest of us, i.e., a computer for non-programmers. He carried this idea forward to Dynabook ("Dynamic Book"), and then to Smalltalk. Ideas like a simple language syntax and semantics, a graphical user interface, and the mouse could all be combined to bring the computer closer to the masses. It is no accident that many Smalltalk advocates see little value in formalized methodologies, metrics, and other artifacts of the C++ sector. Since it is so easy to quickly create and modify applications why would anyone bother with some rote process? As knowledge of object-oriented software engineering became more widespread, Smalltalkers were mercilessly harassed by people asking them "what methodology to you use?" When Rebecca Wirfs-Brock and her cohorts came up with "responsibility driven design" (RDD) in the late 1980s, she provided some relief. Now, when asked about one's choice of methodologies, Smalltalkers could (and did) say "Wirfs-Brock." Kent Beck, Ward Cunningham, and others contributed items such as class-responsibility-collaboration cards to the Smalltalk arsenal. To be sure, those in the Smalltalk sector can become very nitty-gritty technical when discussing such things as typing, the mathematics of inheritance, and reflective systems. The terminology, concepts, and approaches found in the artificially intelligence sector differ significantly from those in the other two sectors. The Common Lisp Object System (CLOS) boasts full-blown metaclasses (classes whose instances themselves are classes), for example. The word "class" also takes on a different connotation, meaning the set of all instances of a pattern. The artificial intelligence sector is more free-form than the Smalltalk sector. Progress is usually made in a heuristic (experimentation, evaluation, or trial-and-error) manner. Methodologies and metrics are remotely important, if at all. The Arrival of the XP Contingent Extreme Programming came from the Smalltalk sector. Like RDD ten years earlier, it is an approach that comes from the programming language level upwards -- as opposed to many methodologies that arise in the C++ sector which, almost exclusively, work from high-level concepts downward. XP is unapologetically code-centric. Rather than evolving it from a more complex methodology (e.g., the Rational Unified Process), Kent Beck took what he knew from his decades of software development experience and crafted an approach that would greatly amplify what he considered good programming practices. If you understand the Smalltalk sector of the object-oriented community, many facets of XP will look and sound familiar. Kent is very concerned with the human element in software development. So, there is a huge dollop of people-related issues in XP. Some of these people issues are fairly tame. For example, XP advocates keeping the number of hours worked to a reasonable level, e.g., 40 hours per week. Some of the XP people issues do not initially make much sense to people in from the C++ sector. Specialization of skills to the point of creating a new job category is not allowed. There is also a lot of talk about intelligence and job descriptions. About the only way I can begin to describe these (to me) very strange ideas is this. Somewhere in the past, somebody came by and disparaged coders, i.e., people whose primary job function was writing code. In a reaction to this abuse, several things happened: * Non-coding activities became trivialized, and were considered less important than coding. So, for example, analysis and design activities that had non-code components pretty much disappeared. The products of these processes were mocked as "pretty pictures." Software testing was something that anyone could learn, and anyone could do well. * Horror stories, not always untrue, of documentation for documentation's sake became almost a mantra. Another commonly- recited point was that non-code documentation always gets out of date, so there is no sense in producing it (or more than a very small amount of it) at all. (Apparently, one is not supposed to point out the differences between a bad idea and a bad implementation of a good idea.) * Many (most?) aspects of one's job description became intelligence issues. Attempting to take away any activity from a programmer was viewed as saying the programmer was not intelligent enough to perform the activity. Issues such as having too many different things to do, lack of demonstrated talent or desire, or mindset conflicts were all ignored. * Classic software project management became daemonized. Self management (or emergent management) was the new norm. You could say that very few, if any, restrictions were placed upon programmers. Another confusing (to me) situation involves XP advocates using terms found in the C++ sector, but with different definitions, and without any metrics. For example, there is a lot of talk about "quality." However, when asked for definitions or metrics to support the quality claims, XP advocates are not very forthcoming. There are other points of contention that I have with XP. However, in my discussions, I have become acutely aware that we are playing by two very different sets of rules, on two very different playing fields. It is not that my values and my perspectives are right, and XP's are wrong. It is just that we are so far apart on the issues that it would take forever to get anywhere close, and that is assuming that that is a desirable goal. Adopting XP in its current form, goes against most of my training, research, and experience. It also conflicts violently with my training as a scientist. Further, XP can evolve and improve on its own without any "assistance" from Ed Berard. Thank you. People like Topmind and Elliot see themselves as crusaders, fighting for a cause. While I do crusade, I have no vested interest in, nor desire to see, XP go away. In addition, commenting (positively or negatively) on XP does not further my career, nor does it put any money in my pocket. Kent Beck is very right. We are talking across a paradigm gulf. I am not interested in any more "XP battles." If you want to say that XP is righteous has defeated the evil Ed, be my guest. Now, and in the future, I will make every attempt to duck XP questions and any references to XP technology. I will be glad to discuss my views on software engineering in general, and on object-oriented software engineering in particular. Let the celebration begin! -- Ed ---- ''In 2000 he posted this to news:comp.object.'' ''After you read several pages of misdirection and insinuation disguised as erudition, you will read 'I am not interested in any more "XP battles"'.'' ''So he seems to have reversed his stance, with his recent "AgileZealots" career shift.'' That's interesting background on him, thanks. If I'm not mistaken, he started news:comp.object (?). I don't monitor it ... has XP continued to dominate over the past 3 years, and has Ed resumed commenting on XP there? For those who haven't yet read the paper, it covers misconceptions '''about''' agile advocates ("anti-agile misconceptions") as well as misconceptions '''by''' agile advocates ("agile zealot misconceptions"). The stated goal of the paper is "not to discredit agile methods, or their advocates. Rather, the goal is to recalibrate the on-going exchange of technical ideas." I read his paper in that light, all 110 pages, and found it thought-provoking. (About half of the paper is references.) YMMV. ''Kent Beck is very right. We are talking across a paradigm gulf.'' In the past year, I have found a lot of presentations and papers by people (even from the SoftwareEngineeringInstitute) looking harder for compatibility than for incompatibility. I don't consider myself an expert on the same level as KentBeck or EdwardBerard; I'll readily admit that I still have a lot to learn and experience, and I definitely expect my opinions on these matters to evolve over time as a result. Right now I'm personally not convinced that the paradigm gulf between agile and everything else is so large as to be unspannable. I visualize the bridge as a spectrum, shades of gray as opposed to black & white. (Or rainbow, like the CrystalMethodologies?) I'd love to hear others' thoughts on this. There's probably a more appropriate [existing?] Wiki page than this for a general discussion of the ParadigmGulf [ComparingParadigms, ExtremeParadigmShift, MixingParadigms, ParadigmShift, SoftwareDevelopmentImprovementParadigmShift, TimeForaParadigmShift ?]. Anyone have a recommendation, and/or care to refactor? -- KarenSmiley, Sept. 19, 2003 ----