Software process improvement - Department of Computer Engineering

advertisement
feature
software process improvement
Software Process
Improvement: Blueprints
versus Recipes
Ivan Aaen, Aalborg University
ver the past decade or so, organizations have spent vast resources
on software process improvement. Based on the software capability maturity model (CMM) and similar norms, SPI aims to
build an infrastructure and culture that support effective methods, practices, and procedures and integrate into the ongoing way of doing
business. This goal has proven difficult to reach, however, because SPI involves organizational change on a scale and of a complexity that requires
O
commitment, resources, and skills at all organizational levels, and it carries a large risk of
failure.
This article analyzes the roots of these difficulties and challenges the traditional SPI approach, here labeled Blueprint SPI. Plan-oriented
and mainly concerned with the static, this
method creates a blueprint of a future software
process. Its three primary aspects—externalizing process knowledge, separating process design from use, and structuration by melding
process parts into organized wholes—focus on
structure and the objects building it. Charts,
Viewing software processes as blueprints emphasizes formal models
at the expense of process users’ knowledge. Taking a recipe view
helps process users collectively design software processes through
facilitation, reflection, and improvisation.
86
IEEE SOFTWARE
functional elements, and the entities such elements produce or exchange typically describe a
process. A blueprint view provides concepts
and patterns for recognizing and communicating how we understand software processes.
Process designers are expected to provide
process knowledge to software developers, and
software developers are expected to provide
experiences and problems to process designers.
A blueprint view does not, however, reveal
how such structures emerge. Looking at SPI in
light of knowledge management and organizational design concepts helps us see that a
recipe can better elucidate structural dynamics. Recipes for software practices describe actions that generate the objects—such as established software practices—that blueprints
specify. Recipes model emergence and form a
basis for improvisation to suit a given situa-
Published by the IEEE Computer Society
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
0740-7459/03/$17.00 © 2003 IEEE
tion. Recipes are open-ended in that the resulting blueprint—the new software process—
emerges only after the fact. Where blueprints
define preplanned actions, recipes express values, principles, and goals for such actions. Understanding these gives us a better view of an
organization’s software development culture
and thus a better chance of understanding
how it may change.
Blueprint SPI
SPI targets software organizations in which
highly specialized people execute complex
tasks using various methods and tools. SPI experts typically interact with managers and
high-profile developers carefully selected for
their valuable process knowledge.
Watts Humphrey and his colleagues began
developing SPI in the 1980s, and these early
ideas became the foundation for the CMM.1
At the time, one major line of software engineering research focused on software factories
and infrastructures. Process modeling emerged
to assist the development of third-generation
CASE tools that would support method specification, adaptation, and extension. These
new tools would enable tailor-made software
processes defined in formal models.
The emphasis on formal models traces back
to a highly influential 1987 paper Leon Osterweil published around the time Watts
Humphrey developed the first CMM version.2
The earliest impetus for process programming
arose from Leon Osterweil’s meetings with
Watts Humphrey and his team at IBM in the
early 1980s.3 Osterweil suggests
that we describe software processes by “programming” them much as we “program” computer applications. We refer to the activity of
expressing software process descriptions with
the aid of programming techniques as process
programming, and suggest that this activity
ought to be at the center of what software engineering is all about.
Peter Feiler and Watts Humphrey adopt a similar view, arguing that software processes have
many artifacts in common and require similar
disciplines and methods.4 They suggest we
therefore think about SPI in software development terms.
Such an approach, however, separates software process design from use in time and space,
much as the classic linear sequential waterfall
paradigm does. Although Feiler and Humphrey
suggest using evolutionary (prototyping-like)
approaches to process development, the programming approach ultimately disconnects
process design from process use. The IDEAL
process improvement model,5 for example,
specifies discrete steps for software process assessment, diagnosis, analysis, and design followed by process rollout to process users. This
model, which structurally resembles the waterfall approach, is probably the most widely
known user’s guide to process improvement.
The programming approach also externalizes process knowledge by representing and
formalizing it outside process users’ heads.
Some key CMM concepts reveal how formalization pervades the CMM.6 For example, a
capability maturity model describes the stages
software organizations go through as they define, implement, measure, control, and improve their software processes. Software
process maturity characterizes how explicitly
a specific process is defined, managed, measured, controlled, and effective. Similarly, a
software process description operationally defines a major software process component
identified in the project’s defined process or
the organization’s standard process. It completely, precisely, and verifiably documents a
software process’ requirements, design, behavior, or other characteristics. Describing the
software process in such terms epitomizes
structuration—defining process parts to form
coherent systems.
Although we need explicit models of software processes or process parts to support
software developers with methods and tools, I
argue against using such models as the primary means to achieve SPI ends. Externalization, separation, and structuration might be
useful for mapping people’s present behavior,
but they’re dubious strategies for changing it.
SPI targets
software
organizations in
which highly
specialized
people execute
complex tasks
using various
methods and
tools.
Challenging Blueprint SPI
Concepts from knowledge management
and organizational design research illuminate
some of the problems that can follow from externalization, separation, and structuration.
One fundamental problem in SPI is ensuring
that software process users share a common
understanding of the process. SPI thus entails
changing and building process knowledge in
the individual as well as in the group and organization. In this sense, it is about knowledge
September/October 2003
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
IEEE SOFTWARE
87
Table 1
Blueprint SPI errors from a knowledge management perspective
Externalization of process knowledge
Separation of process knowledge from use
Confusing information with knowledge
Reifying process knowledge
Paying little heed to the role and importance of tacit knowledge
Substituting technological contact for human interface
Seeking to develop direct (perhaps misguided) knowledge measures
Gold-plating process models at the expense of knowledge flow
Lack of reflective dialogue between process users and designers
Process rollout by distributing process information
Process ossification—downplaying thinking and reasoning
Focusing on past and present, not the future
Standard processes leaving little room for experimentation
management. Liam Fahey and Laurence
Prusak7 identified 11 knowledge management
errors relating to what organizations know
and how they learn. This inspired the 11 corresponding Blueprint SPI errors listed in Table
1, which I will discuss in detail.
Externalization
When SPI efforts focus too much on documentation and too little on proficiency, organizations begin to care more about description
and prescription and less about competence and
behavior. Externalization confuses information
publication with knowledge building, sees
process models as ends rather than means, and
disregards the importance of tacit knowledge.
Confusing information with knowledge. Process
data and information aren’t the same as
process knowledge and competence. As Bo
Dahlbom and Lars Mathiassen put it, “information is something we provide and receive,
knowledge and competence are something we
have.”8 Failure to distinguish between these
concepts will lead to uncertainty regarding
what to improve in SPI efforts and how.
Reifying process knowledge. Process knowledge is only meaningful in conjunction with
“process knowers.” Organizations that view
process knowledge as an object in itself might
start to develop and maintain elaborate information structures with ever more complex
process descriptions and only limited relation
to practice. This could divert attention from
the practitioners who should be both the
sources and objects of process knowledge.
Paying little heed to the role and importance
of tacit knowledge. Externalization might
cause a confrontation between tacit and explicit process knowledge by promoting explicit
88
IEEE SOFTWARE
knowledge and limiting the use of tacit knowledge. In turn, practitioners might reject explicit
knowledge if it contradicts their tacit knowledge, and process designers might downplay or
ignore tacit knowledge.
Substituting technological contact for human
interface. Software organizations make process
descriptions, best practices, process templates,
and process data available on corporate intranets for good reasons but sometimes confuse
access to information and data with access to
organizational knowledge through face-to-face
dialogue. Externalizing process knowledge favors building repositories with process information and data and downplays the importance of
dialogue for process knowledge communication, interaction, exchange, and learning.
Seeking to develop direct knowledge measures.
How can organizations know if their SPI efforts have had the desired effect? Understandably, senior managers want to quantify SPI
payoffs and are tempted to focus on ways to
measure results. Such metrics could include
process description size, number of intranet
hits, hours spent on SPI, number of SPI initiatives in the corporation, amount of data collected, and so on. Externalization makes such
metrics meaningful, but they say little about
the stock or flow of process knowledge and its
effect on performance. This focus on direct
measures of knowledge puts the measurement
cart before the knowledge horse, according to
Liam Fahey and Laurence Prusak.7 It reinforces many other errors, maintains a view of
knowledge as being outside people’s heads,
and consigns process users to a secondary role.
Separation
When SPI efforts become too much the responsibility of process specialists and too little
h t t p : / / c o m p u t e r. o r g / s o f t w a r e
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
the responsibility of process users, defined
software processes take on a life of their own,
grow out of proportion, and have little interaction with actual software projects. When
users implement defined process parts, they
might do so as a tradition or mindless ritual.
Gold-plating process models at the expense of
knowledge flow. If SPI efforts don’t distinguish
process information from process knowledge,
organizations might view process knowledge
as an object to be captured, stored, retrieved,
and transmitted. Process knowledge “connects, binds, and involves individuals” and “is
inseparable from the individuals who develop,
transmit, and leverage it.”7 Trying to separate
this knowledge could result in gold-plating
process models and failure to achieve an effective process knowledge flow by settling for
process information transmission and capture.
Lack of reflective dialogue between process
users and designers. Given that practitioners
are both the source and object of process
knowledge, organizations must build and
maintain a shared context. This context should
explicate and align process knowledge among
practitioners and permit questioning such
shared contexts as part of experience building.
processes current. Separating process design
from use downplays such explanations and
disputes, leading to process ossification.
Focusing on the past and present, not the future.
Explicit consideration of the future rarely
drives software process design. By nature, a focus on best practices and process use examples
will be retrospective and selected with present
needs in mind. Given that the future and, consequently, future software process demands are
ambiguous, software organizations need alternative projections to consider options. Separating process design from process use will make
it more difficult to obtain such diverse projections because process designers will favor unambiguous and clear recommendations.
SPI efforts seek
to change how
people do things
through
software
process design.
In this respect,
we can also
view SPI as
organizational
design.
Standard processes leaving little room for experimentation. Improving and adapting software processes to better suit given conditions
requires experimentation. The IDEAL model
integrates pilots—initial implementations of
improvements, usually on a small, controlled
scale5—into the improvement effort. One implication of this approach is that experiments
become part of the process design but separate
from regular process use.
Structuration
Process rollout by distributing process information. Disentangling process knowledge
from use occurs when knowledge initiatives,
projects, and programs become ends in themselves. Traditional SPI separates process users
from designers, focuses on methods or quality
functions, and primarily publishes massive
amounts of process documentation on the corporate intranet. Many such efforts roll out
new processes through training and incentive
schemes that encourage process users to incorporate these SPI deliverables in their daily
practice, and such strategies often fail.
SPI efforts seek to change how people do
things through software process design. In this
respect, we can also view SPI as organizational
design.
Karl Weick describes traditional organizational design in terms of architecture focusing
on structures.9 Applied to SPI, this approach
outlines the assumptions on which structuration is based:
Process ossification—downplaying thinking and
reasoning. Software projects vary widely. For
this and other reasons, software processes develop over time through thinking and reasoning. Both tacit and explicit knowledge tend to
coagulate into ideology unless challenged by
discussions. Producing explanations about
why and how to do a particular task or arguing a software paradigm’s relevance to a new
project or customer helps keep software
■
■
■
A software process is constructed at a single point in time.
Software processes produce order through
intention.
A software process creates planned change.
The software process is designed at a fixed
point in time. The design activity is largely
about defining a set of process structures.
These structures should meet the software organization’s current needs, which are expected
to change only incrementally.
Structuration thus reflects a conservative,
rational view, where project conditions are relSeptember/October 2003
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
IEEE SOFTWARE
89
Using a recipe,
process users
collectively
design the
software
processes
through
facilitation,
reflection, and
improvisation.
atively stable and new projects tend to resemble previous projects. In this view, process designers decide on intentions and produce
process models that incorporate these intentions. Process users base their projects on these
models and thereby adhere to the intentions.
Changing the software process in an organization essentially is a matter of process rollout.
Problems arising from structuration stem
from systematic planning for eventualities and
contingencies—for the expected rather than
unexpected. Given many software projects’
complexities and uncertainties, structuration
and process standardization might not always
be the best answer. Rather than taking structuration and process standardization for
granted as SPI goals, we should seek better
ways to improve organizations’ ability to
manage the unexpected.
Recipes for SPI
As an alternative to Blueprint SPI, we can
conceive of SPI in terms of a recipe—guidelines
that we can tailor to specific conditions and
that let us account for SPI’s improvisational nature. Using a recipe, process users collectively
design the software processes through facilitation, reflection, and improvisation.
Facilitation
The errors that stem from externalization
raise two questions about SPI:
■
■
What is a software process? Is it a thing,
an artifact? Is it a set of actions, something
we do?
Where do we find the software process—in
documents, products, or people’s heads?
If we view a software process as something
we do and as residing in people’s heads, we see
a new purpose for gathering and publishing
software process information: facilitation of
knowledge work. Moving from externalization to facilitation shifts our focus from control and standardization to supporting and enabling process users in deciding what a
specific situation requires.
Facilitation entails providing access to
process information, tools, and organizational
knowledge. First, process specialists support
knowledge building and stimulate imagination
by gathering and providing information on
methods, procedures, and experiences to users.
90
IEEE SOFTWARE
Such specialists can also provide process information covering various situations and alternatives. Process users can mine for options relevant to a given situation and for information
on the options’ strengths and weaknesses.
Second, access to powerful tools can
greatly enhance a software development
team’s capabilities by supporting and perhaps
guiding task execution. For example, modern
integrated development environments let development teams develop joint working standards for activities such as architectural design, refactoring, coding styles, and version
control over time. Because it’s complex and
modular, an IDE can support these activities
effectively and flexibly.
Finally, access to people with relevant domain, technical, and process knowledge plays
an obvious role for staffing development teams.
If knowledge resides in software practitioners’
heads, tacit knowledge plays a central role in
sharing and creating knowledge. Embodied
process knowledge facilitates the capture, assimilation, creation, and dissemination of explicit process knowledge, which the organization can support through such methods as pair
programming, collective code ownership, and
team building. Process specialists can facilitate
sharing by coaching and mentoring the process
users and helping them solve problems as they
arise. The specialists can also help with process
idea diffusion across the organization.
Reflection
Errors that stem from separation raise several questions about SPI:
■
■
Who designs the software process?
Process developers or process users?
How are software processes designed?
Through decision-making or interaction?
The errors indicate that we should avoid
separating process design from process use
and instead focus on how to make process improvement an everyday concern of process
users. If we accept this idea of software
processes being improved by individuals and
groups as they go about developing software,
we arrive at SPI strategies focusing on everyday practices and professional reflection. Such
strategies should seek to establish infrastructures that support learning and reflection.
Etienne Wenger10 identified three infra-
h t t p : / / c o m p u t e r. o r g / s o f t w a r e
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
structures of a learning architecture that provide essential support for individual and collective reflection: engagement, imagination,
and alignment. These infrastructures establish
a shared context among process users that
helps them understand particular market conditions, customer relations, previous software
projects, process information, and process
norms. A shared context forms the basis for
shared practices and reflective dialogue on
process rationale and improvement.
Engagement refers to the flow of knowledge between people, which provides a context for learning. An infrastructure of engagement should support continuity, mutuality,
and competence. Continuity comes in the
form of memories stored as information, embedded in tools, or accumulated in human recollection. Mutuality occurs in most software
projects as project members engage and respond to other members’ actions. Competence
evolves during any software project as it encounters problems that engage energy, creativity, and inventiveness. The occasions that arise
during a software project for exercising judgment, mutual evaluation, and negotiating joint
enterprises prove valuable for learning. Activities such as project postmortems and reviews
exemplify such occasions.
Imagination involves creating new images
of the software process and seeing connections
through time and space by extrapolating from
experience. Facilities that support imagination
include knowing software processes and patterns, making comparisons with other practices, having opportunities and tools for trying
things out, performing simulations, developing alternative projections, and so on. A project kick-off meeting where team members establish a common working framework for a
project can serve as an ideal occasion for stimulating and employing imagination.
Alignment involves coordinating energy
and activities to fit within broader structures
and contribute to broader enterprises. An infrastructure of alignment should include facilities of jurisdiction, coordination, and convergence. Jurisdiction covers policies, contracts,
and the like, and coordination encompasses
standards, methods, communication, and
more. Convergence covers shared understanding, creed, values, and principles. The goals of
a CMM key process area or the fundamental
values in and principles of software engineer-
ing paradigms such as object orientation or
agile processes typify sources of alignment.
Improvisation
Structuration builds on a conservative view
characterized by stability, similarity, expectation, and planning. This view compels several
ontological questions, however:
■
■
When do people design software processes?
At distinct times or continuously?
Why do people design software processes
in the first place? To ensure projects always get done the same way or to help
them manage the unexpected?
Improvisation
involves
selecting and
transforming
process
elements, not
pulling ideas
out of thin air.
If we accept that software projects are basically unstable and dissimilar, perhaps we
should shift our expectations from having
process users follow a given software process to
inventing the process as they go—in other
words, to move from a paradigm of planning to
one of improvisation. In so doing, we abandon
the idea of controlling projects through elaborate planning and embrace the unexpected as a
source of inspiration and experience.
Improvisation involves selecting and transforming process elements, not pulling ideas
out of thin air. It builds on elements drawn
from the three areas of facilitation—process
information, tools, and organizational knowledge. Organizations nurture improvisation
through the SPI strategy of reflection, encouraging engagement, imagination, and alignment. Facilitation emphasizes process use, reflection emphasizes process learning, and both
help create supportive infrastructures. Improvisation depends on everyday interaction,
where process users test and reconstruct such
infrastructures to keep them current and
evolve competency to manage the unexpected.
The ability and latitude to improvise under
common standards is critical to professional
work. Cooperation among group members occurs not so much because they share a common defined process but because they share a
view of what is happening and what it means.
In practice, software processes are emergent
and open to improvisation that respects
shared process goals.
Following Weick,9 we can describe three
characteristics of improvisation.
Continuous reconstruction involves people
rebuilding software processes over time. Every
September/October 2003
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
IEEE SOFTWARE
91
Agile processes
such as
Extreme
Programming
show that we
can delegate
SPI to process
users without
sacrificing
discipline.
92
IEEE SOFTWARE
new project, technology, customer, market, and
grouping of people on a project provides new
challenges and opportunities. Process users learn
from such experiences, and this learning provides input to reconsider the software process. So
why would we try to develop a standard process
in the back office rather than promoting what
practitioners actually do to a current standard?
Why would we restrain improvisation by insisting that a tailored software process be designed
as a blueprint for the particular project instead
of a recipe that will enable self-correction in the
likely event of something unexpected? We
should welcome continual process reconstruction because it adapts the process to the project.
Embracing improvisation gives recipes a primary role in SPI. Practitioners who improvise
would treat software processes not as givens
but as emergents. We should therefore aim at
developing software processes within projects,
hence at the group level. Watts Humphrey’s
Team Software Process11 offers one prominent
example of group-level SPI. Kent Beck’s Extreme Programming12 and other agile processes
exemplify lightweight approaches targeted at
the same level but from outside traditional software engineering. In both approaches, developers play a key role in creating the software
process. The team stabilizes the process
through group-level discipline and modifies it
through group-level interactions.
The second characteristic of improvisation is
that software processes produce order through
attention. From the improvisation perspective,
a software process is emergent, evolutionary,
difficult to control, tied to action, and continuously updated as people and conditions change.
The blueprint in this context gives meaning to
past activities, explaining why actions happen
and what to pay attention to. A blueprint thus
forms in retrospect and influences practitioners
by making past projects sensible. Focusing attention via recipes that express values and highlight concerns influences practice more than using directives in the form of elaborate process
descriptions. Successful process design implies
an alignment of values that makes people pay
attention to meeting the standards they deem
part of their professional repertoire.
Third, a software process codifies unplanned
change after the fact. Process descriptions often
come after rather than before process use, and a
process design typically reflects how people usually do something rather than what they see as
the best way to do it. We should therefore reconsider the traditional sequence of designing a
change and then rolling it out. Fostering improvisation would suggest that we change practice
first and then change the process model according to established practice. Process descriptions
thus become part of our repertoire and available
to future projects through facilitation.
Improvisation suggests modeling what
process users actually do and that SPI efforts integrated into ongoing software projects define
what team members do now, not what they
should do in the future. We should also curb the
modeling process’ level of compulsion, defining
key objectives and deliverables rather than
obligatory procedures. Then, instead of mandating ever more elaborate process models, we
can offer simple and flexible process models for
highly motivated and competent people. As
part of their SPI efforts, organizations should
supply a range of alternative methods and procedures to facilitate developers’ work.
S
PI is a problematic activity with considerable implications for practitioners’ beliefs, values, emotions, perceptions, and behaviors. Traditional process
designers tend to be obsessed with control—
we seem to believe that we should control
software processes much as we control software. This belief has little merit, and it’s time
to let go of it and stop approaching SPI in a
linear step-by-step fashion, where we translate
software process goals into solutions, then
practice. Instead, we should put competent
process users at the center of process design,
using and building simple, open process models suited for improvisation—as Weick put it,
a little structure goes a long way.
But if we let go of Blueprint SPI, will we end
up with lax, ad hoc software processes? Will
we have to give up the idea of discipline and
structure in software development? Agile
processes such as Extreme Programming show
that we can delegate SPI to process users without sacrificing discipline. XP is a highly disciplined process and complementary with CMM
and other models. Indeed, the CMM seeks to
standardize at the goal level while permitting
great discretion about how to achieve these
goals. I propose that we administer this discretion at the process user level, and that recipes
offer a robust means to do so.
h t t p : / / c o m p u t e r. o r g / s o f t w a r e
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
About the Author
Acknowledgments
I presented parts of this article at the Tenth European Conference on Information Systems (ECIS 2002),
Gdansk, Poland, 6–8 June 2002. I am deeply indebted
to Lars Mathiassen, Jesper Arent, and the anonymous
reviewers for their comments and suggestions, and I
also thank the software organizations, practitioners,
and researchers participating in the Danish SPI initiative for stimulating the ideas in this article.
Ivan Aaen is an associate professor of computer science at Aalborg University, Denmark.
His interests include software engineering and information systems. He holds a PhD in computer science from Aalborg University and is a member of the ACM and IEEE Computer Society.
Contact him at the Dept. of Computer Science, Aalborg Univ., Fredrik Bajersvej 7E, DK9220
Aalborg, Denmark; aaen@ieee.org.
References
1. M.C. Paulk et al., Capability Maturity Model for Software, Version 1.1, tech. report CMU/SEI-93-TR-24,
Software Eng. Inst., Pittsburgh, 1993.
2. L.J. Osterweil, “Software Processes are Software Too,”
Proc. 9th Int’l Conf. Software Eng. (ICSE 87), IEEE CS
Press, 1987, pp. 2–13.
3. L.J. Osterweil, “Software Processes Are Software Too,
Revisited,” Proc. 19th Int’l Conf. Software Eng. (ICSE
97), IEEE CS Press, 1997, pp. 540–548.
4. P.H. Feiler and W.S. Humphrey, Software Process Development and Enactment: Concepts and Definitions,
tech. report CMU/SEI-92-TR-004, Software Eng. Inst.,
Pittsburgh, 1991.
5. B. McFeeley, IDEAL: A User’s Guide for Software
Process Improvement, tech. report CMU/SEI-96-HB001, Software Eng. Inst., Pittsburgh, 1996.
6. M.C. Paulk et al., Key Practices of the Capability Maturity
Model, Version 1.1, tech. report CMU/SEI-93-TR-25, Software Eng. Inst., Pittsburgh, 1993.
7. L. Fahey and L. Prusak, “The Eleven Deadliest Sins of
Knowledge Management,” California Management
Rev., vol. 40, no. 3, Spring 1998, pp. 265–276.
8. B. Dahlbom and L. Mathiassen, Computers in Context:
The Philosophy and Practice of Systems Design, NCC
Blackwell, 1993.
9. K.E. Weick, “Organizational Redesign as Improvisation,”
Organizational Change and Redesign, G.P. Huber and
W.H. Glick, eds., Oxford Univ. Press, 1993, pp. 346–379.
10. E. Wenger, Communities of Practice: Learning, Meaning, and Identity, Cambridge Univ. Press, 1998.
11. W.S. Humphrey, Introduction to the Team Software
Process, Addison-Wesley, 2000.
12. K. Beck, Extreme Programming Explained: Embrace
Change, Addison-Wesley, 2000.
For more information on this or any other computing topic, please visit our
Digital Library at http://computer.org/publications/dlib.
ADVERTISER
/
PRODUCT
SEPTEMBER/OCTOBER
Advertiser / Product
Charles River Media
Comdex Las Vegas 2003
John Wiley & Sons
MIT Press
RE 2004
Scientific Toolworks
Singapore Management University
Telelogic
INDEX
2003
Page Number
13
107
Cover 2
25
Cover 3
32
9
Cover 4
Advertising Personnel
Marion Delaney
IEEE Media, Advertising Director
Phone: +1 212 419 7766
Fax:
+1 212 419 7589
Email: md.ieeemedia@ieee.org
Sandy Brown
IEEE Computer Society,
Business Development Manager
Phone: +1 714 821 8380
Fax:
+1 714 821 4010
Email: sb.ieeemedia@ieee.org
Marian Anderson
Advertising Coordinator
Phone: +1 714 821 8380
Fax:
+1 714 821 4010
Email: manderson@computer.org
Advertising Sales Representatives
Mid Atlantic (product/recruitment)
Dawn Becker
Phone: +1 732 772 0160
Fax:
+1 732 772 0161
Email: db.ieeemedia@ieee.org
Midwest (product)
Dave Jones
Phone: +1 708 442 5633
Fax:
+1 708 442 7620
Email: dj.ieeemedia@ieee.org
Midwest/Southwest (recruitment)
Darcy Giovingo
Phone: +1 847 498-4520
Fax:
+1 847 498-5911
Email: dg.ieeemedia@ieee.org
Northwest/Southern CA (recruitment)
Tim Matteson
Phone: +1 310 836 4064
Fax:
+1 310 836 4067
Email: tm.ieeemedia@ieee.org
New England (product)
Jody Estabrook
Phone: +1 978 244 0192
Fax:
+1 978 244 0103
Email: je.ieeemedia@ieee.org
Will Hamilton
Phone: +1 269 381 2156
Fax:
+1 269 381 2556
Email: wh.ieeemedia@ieee.org
Southwest (product)
Bill Wageneck
Phone: +1 972 423 5507
Fax:
+1 972 423 6858
Email:
bill.wageneck@wageneckassociates.com
Japan
German Tajiri
Phone:
+81 42 501 9551
Fax:
+81 42 501 9552
Email: gt.ieeemedia@ieee.org
New England (recruitment)
Barbara Lynch
Phone: +1 401 739-7798
Fax:
+1 401 739 7970
Email: bl.ieeemedia@ieee.org
Connecticut (product)
Stan Greenfield
Phone: +1 203 938 2418
Fax:
+1 203 938 3211
Email: greenco@optonline.net
Joe DiNardo
Phone: +1 440 248 2456
Fax:
+1 440 248 2594
Email: jd.ieeemedia@ieee.org
Southeast (product/recruitment)
C. William Bentz III
Email: bb.ieeemedia@ieee.org
Gregory Maddock
Email: gm.ieeemedia@ieee.org
Sarah K. Wiley
Email: sh.ieeemedia@ieee.org
Phone: +1 404 256 3800
Fax:
+1 404 255 7942
Northwest (product)
Peter D. Scott
Phone: +1 415 421-7950
Fax:
+1 415 398-4156
Email: peterd@scottassoc.com
Europe (product)
Hilary Turnbull
Phone: +44 1875 825700
Fax:
+44 1875 825701
Email: impress@impressmedia.com
Europe (recruitment)
Penny Lee
Phone: +20 7405 7577
Fax:
+20 7405 7506
Email: reception@essentialmedia.co.uk
Southern CA (product)
Marshall Rubin
Phone: +1 818 888 2407
Fax:
+1 818 888 4907
Email: mr.ieeemedia@ieee.org
September/October 2003
Authorized licensed use limited to: Kasetsart University. Downloaded on October 23, 2008 at 01:45 from IEEE Xplore. Restrictions apply.
IEEE SOFTWARE
93
Download