New Software Engineering
New Software Engineering
New Software Engineering
DEVELOPMENT
underlying theory used in the original design. Then, in the latter case, new understanding can be
incorporated into the foundational practice and future theory.
Construction engineering serves as an example of how a true engineering discipline combines
craftsmanship with an applied theoretical foundation. The understanding captured in such an
accepted foundation is used to educate entrants into the discipline. It then provides them with a
basis for methodically analyzing and addressing engineering problems, even when those problems
are outside the experience of the engineers.
From this point of view, todays software engineering is not really an engineering discipline at all.
What is needed instead is a new software engineering built on the experience of software
craftsmen, capturing their understanding in a foundation that can then be used to educate and
support a new generation of practitioners. Because craftsmanship is really all about the practitioner,
and the whole point of an engineering theory is to support practitioners, this is essentially what was
missing from previous incarnations of software engineering.
How does the software community go about this task of refounding software engineering?
The SEMAT (Software Engineering Method and Theory) initiative is an international effort
dedicated to answering this question (http://www.semat.org). As the name indicates, SEMAT is
focusing both on supporting the craft (methods) and on building foundational understanding
(theory).
This is still a work in progress, but the essence of a new software engineering is becoming clear.
The remainder of this article explores what this essence is and what its implications are for the future
of the discipline.
DEVELOPMENT
experience is distilled into theory, which then promotes better engineering, and back again.
Nevertheless, the important point to realize here is this: traditional software engineering did not
have such an underlying theory.
One might suggest that computer science provides the underlying theory for software
engineeringand this was, perhaps, the original expectation when software engineering was
first conceived. In reality, however, computer science has remained a largely academic discipline,
focused on the science of computing in general but mostly separated from the creation of software
engineering methods in industry. While formal methods from computer science provide the
promise of some useful theoretical analysis of software, practitioners have largely shunned such
methods (except in a few specialized areas such as methods for precise numerical computation).
As a result, there have often been cycles of dueling methodologies for software engineering,
without a true foundational theory to unite them. In the end, many of these methods didnt even
address the true needs of the skilled craft practitioners of the industry.
So, how to proceed?
The creation of a complete, new theory of software engineering will take some time. Rather
than starting with an academic approach, we can begin, as already mentioned, by capturing the
commonality among the methods that have proven successful in the craft of software development.
This, in turn, requires a common way of describing, understanding, and combining various
software-development techniques, instead of setting them up in competition with each other.
To see how this might be accomplished, lets take a closer look at methods and the teams of
practitioners that really use them.
DEVELOPMENT
So, how do you introduce agility into software-engineering methods? By looking at the basic
things that practitioners actually dotheir practices.
DEVELOPMENT
is now simply used as the word for a progress and health dimension as defined in the kernel. Many
other existing terms were considered, but all had connotations that clashed with the essentially new
concept being introduced for the kernel. In the end, a new term was adopted without any of the old
baggage.) The seven dimensions are: opportunity, stakeholders, requirements, software system, work,
team, and way of working. These alphas relate to each other as shown in figure 1.
Each alpha has a specific set of states that codify points along the dimension of progress
represented by the alpha. Each of the states has a checklist to help practitioners monitor the current
state of their endeavor along a certain alpha and to understand the state they need to move toward
next. The idea is to provide an intuitive tool for practitioners to reason about the progress and health
of their endeavors in a common, method-independent way.
One way to visualize the seven-dimensional space of alphas is using the spider chart1 shown in
figure 2. In this chart, the shaded area represents how far an endeavor has progressed, while the
white area shows what still needs to be completed before the endeavor is done. A quick look at such a
diagram provides a good idea of where a project is at any point in time.
The alphas can be made even more tangible by putting each of the alpha states on a card, along
with the state checklist in an abbreviated form (see figure 3). The deck of all such cards can then fit
easily into a persons pocket. Although more detailed guidelines are available, these cards contain
key reminders that can be used by development teams in their daily work, much like an engineers
handbook in other disciplines.
<provide
endeavour
to
add
ress
nd
ema
<d
requirements
software
system
<fulfils
s>
nge
scopes and
<constrains
set up to
address>
solution
<focuses
lps
sa
ate
upd
work
ha
nd c
Team
<gu
ide
way of
working
<support
<he
stakeholders
use and
<consume
opportunity
produces>
customer
plie
<ap
DEVELOPMENT
way of working
stakeholders
team
requirements
work
software system
A more complete discussion of the kernel and its application is available in previous work.2,3
The kernel itself is formally defined as part of the Essence specification that has been standardized
through the Object Management Group.6 In addition to the full kernel, the Essence standard also
defines a language that can be used both to represent the kernel and to describe practices and
methods in terms of the kernel. Importantly, this language is intended to be usable by practitioners,
not just method engineers; for basic uses, it can be learned in just a couple of hours (the alpha state
cards are a simple example of this).
Of course, this ability to use the kernel to describe practices is exactly what is needed as a
foundation for true software engineering methods.
DEVELOPMENT
Stakeholders
Identified
Involved
stakeholder representatives
carry out responsibilities
stakeholder representatives
provide feedback & take part
in decisions in timely way
stakeholder representatives
promptly communicate to
stakeholder group
1/6
3/6
Requirements
Software System
Addressed
Demonstrable
5/6
2/6
Work
Team
Under Control
work going well, risks being
managed
unplanned work & re-work
under control
work items completed
within estimates
measures tracked
4/6
Way of Working
Performing
In Use
4/5
3/6
(advancing the requirements alpha). The backlog practice does not prescribe what the items on
the backlog must be, while the user-story practice does not prescribe how the team should manage
the implementation of those stories. The two practices are thus complementary and can be used
togetherbut, when so combined, they overlap. The two practices can be connected in a smooth
DEVELOPMENT
and intuitive way within an overall method by identifying backlog items from the one with user
stories from the other, so that user stories become the items managed on the backlog.
Note, in particular, how the common framework of the kernel provides a predictive capability.
A construction engineer can use materials science and the theory of structures to understand at
an early stage whether a proposed building is likely to stand or fall. Similarly, using the kernel, a
software developer can understand whether a proposed method is well constructed, and, if there are
gaps or overlaps in its practices, how to resolve those.
Further, through the separation of concerns discussed earlier, an organization or community can
build up a library of practices and even basic methods that a new project team may draw on to form
its initial way of working. Each team can then continue to agilely adapt and evolve its own methods
within the common Essence framework.4
Ultimately, the goal will be, as an industry, to provide for the standardization of particularly
useful and successful practices, while enhancing, not limiting, the agility of teams in applying and
adapting those practices, as well as building new ones as necessary. And that, finally, is the path
toward a true discipline of software engineering.
CONCLUSION
The term paradigm shift may be a bit overused these days; nevertheless, the kernel-based Essence
approach to software engineering can quite reasonably be considered to be such a shift. It truly
represents a profound change of viewpoint for the software-engineering community.
When Thomas Kuhn introduced the concept of a paradigm shift in his influential book, The
Structure of Scientific Revolutions,5 he stressed the difficulty (Kuhn even claimed impossibility) of
translating the language and theory of one paradigm into another. The software-development
community has actually seen such shifts before, in which those steeped in the old paradigm have
trouble even understanding what the new paradigm is all about. The move to object orientation was
one such shift, as, in many ways, is the current shift to agile methods.
In this regard, Essence can, indeed, be considered a paradigm shift in two ways. First, those
steeped in the old school of software engineering have to start thinking about the true engineering
of software specifically, rather than just applying practices largely adapted from other engineering
disciplines. Second, those in the software craftsmanship and agile communities need to see the
development of a true engineering discipline as a necessary evolution from their (just recently hardwon!) craft discipline.
In regard to the second point, in his foreword to The Essence of Software Engineering: Applying the
SEMAT Kernel,3 Robert Martin, one of the SEMAT signatories, describes a classic pendulum swing
away from software engineering toward software craftsmanship. Martins assessment is correct, but
it is important to note that this proverbial pendulum should not simply swing back in the direction
it came. To the contrary, while swing it must, it now needs to swing in almost a 90-degree different
direction than the one from which it came, in order to move toward a new discipline of true software
engineering.
There is, perhaps, hardly a better image for a paradigm shift than that. In the end, the
new paradigm of software engineering, while building on the current paradigm of software
craftsmanship, must move beyond it, but it will also be a shift away from the old paradigm of
traditional software engineering. And, like all paradigm shifts before, this one will take considerable
DEVELOPMENT
time and effort before it is completeat which point, as the new paradigm, everyone will consider
its benefits obvious.
Even as it stands today, though, using Essence can provide a team with some key benefits. Essence
helps teams to be agile when working with methods and to measure progress in terms of real
outcomes and results of interest to stakeholders. These progress measurements are not only on one
dimension, but along the seven dimensions of the kernel alphas, all of which need to move along at
some pace to reduce risks and achieve results.
Further, Essence can allow organizations to simplify governance of methods, using a pool
of practices that may be adopted and adapted by project teams. Having Essence as a common
foundation for this also allows practitioners to learn from one another more readily.
The real shift, however, will only come as teams truly realize the benefits of Essence today and
as SEMAT builds on Essence to complete the new software engineering paradigm. A community
of practitioners is now contributing their experience and becoming part of this refounding of
software engineeringor, perhaps, really founding it for the first time.
REFERENCES
1. Graziotin, D., Abrahamsson, P. 2013. A Web-based modeling tool for the SEMAT Essence theory of
software engineering. Journal of Open Research Software 1(1): e4; http://dx.doi.org/10.5334/jors.ad.
2. Jacobson, I., Ng, P-W., McMahon, P., Spence, I., Lidman, S. 2012. The Essence of software
engineering: the SEMAT kernel. ACM Queue 10(10); http://queue.acm.org/detail.cfm?id=2389616.
3. Jacobson, I., Ng, P.-W., McMahon, P. E., Spence, I., Lidman, S. 2013. The Essence of Software
Engineering: Applying the SEMAT Kernel. Addison-Wesley.
4. Jacobson, I., Spence, I., Ng, P.-W. 2013. Agile and SEMATPerfect Partners. Communications of the
ACM 6(11); http://cacm.acm.org/magazines/2013/11/169027-agile-and-semat/abstract.
5. K
uhn, T. 1962. The Structure of Scientific Revolutions. University of Chicago Press.
6. Object Management Group. 2014. EssenceKernel and language for software engineering
methods; http://www.omg.org/spec/Essence.
LOVE IT, HATE IT? LET US KNOW
feedback@queue.acm.org
IVAR JACOBSON is the founder and chairman of Ivar Jacobson International. He is a father of
components and component architecture, use cases, aspect-oriented software development, modern
business engineering, the Unified Modeling Language, and the Rational Unified Process.
ED SEIDEWITZ is the former CTO, Americas, for Ivar Jacobson International and is currently chair of the
ongoing Essence Revision Task Force. With Ivar Jacobson International, he has led agile system architecture
and development engagements in both the commercial and government sectors and participated in
practice development.
2014 ACM 1542-7730/14/1000 $10.00