0% found this document useful (0 votes)
76 views65 pages

(Ebook) Writing Great Specifications: Using Specification by Example and Gherkin by Kamil Nicieja ISBN 9781617294105, 1617294101

The document provides information about various ebooks available for download on ebooknice.com, including titles related to specifications, software architecture, and writing. It features a specific ebook titled 'Writing Great Specifications: Using Specification by Example and Gherkin' by Kamil Nicieja, which discusses the importance of specifications in software development. Additionally, it includes a detailed table of contents for the book, outlining its structure and key topics.

Uploaded by

kraseromesto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views65 pages

(Ebook) Writing Great Specifications: Using Specification by Example and Gherkin by Kamil Nicieja ISBN 9781617294105, 1617294101

The document provides information about various ebooks available for download on ebooknice.com, including titles related to specifications, software architecture, and writing. It features a specific ebook titled 'Writing Great Specifications: Using Specification by Example and Gherkin' by Kamil Nicieja, which discusses the importance of specifications in software development. Additionally, it includes a detailed table of contents for the book, outlining its structure and key topics.

Uploaded by

kraseromesto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

Download the Full Ebook and Access More Features - ebooknice.

com

(Ebook) Writing Great Specifications: Using


Specification by Example and Gherkin by Kamil
Nicieja ISBN 9781617294105, 1617294101

https://ebooknice.com/product/writing-great-specifications-
using-specification-by-example-and-gherkin-14444274

OR CLICK HERE

DOWLOAD EBOOK

Download more ebook instantly today at https://ebooknice.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

(Ebook) Specification by Example: How Successful Teams Deliver the Right Software by
Gojko Adzic ISBN 9781617290084, 1617290084

https://ebooknice.com/product/specification-by-example-how-successful-teams-
deliver-the-right-software-2393874

ebooknice.com

(Ebook) Biota Grow 2C gather 2C cook by Loucas, Jason; Viles, James ISBN
9781459699816, 9781743365571, 9781925268492, 1459699815, 1743365578, 1925268497

https://ebooknice.com/product/biota-grow-2c-gather-2c-cook-6661374

ebooknice.com

(Ebook) Great Writing 3: From Great Paragraphs to Great Essays (Great Writing, Fifth
Edition) by Keith S. Folse, Elena Vestri Solomon, David Clabeaux ISBN 9780357020845,
0357020847

https://ebooknice.com/product/great-writing-3-from-great-paragraphs-to-great-
essays-great-writing-fifth-edition-46263618

ebooknice.com

(Ebook) Great Writing 5: From Great Essays to Research (Great Writing, Fifth
Edition) by Folse, Keith S., Pugh, Tison ISBN 9780357020869, 0357020863

https://ebooknice.com/product/great-writing-5-from-great-essays-to-research-
great-writing-fifth-edition-36513398

ebooknice.com
(Ebook) Great Writing 4: Great Essays (Great Writing, Fifth Edition) by Keith S.
Folse, April Muchmore-Vokoun, Elena Vestri Solomon ISBN 9780357020852, 0357020855

https://ebooknice.com/product/great-writing-4-great-essays-great-writing-fifth-
edition-54674952

ebooknice.com

(Ebook) Software Architecture by Example: Using C# and .NET by Paul Michaels ISBN
9781484279892, 1484279891

https://ebooknice.com/product/software-architecture-by-example-using-c-and-
net-42931752

ebooknice.com

(Ebook) Specification for Tunnelling by British Tunnelling Society, Institution of


Civil Engineers (Great Britain) ISBN 9780727734778, 0727734776

https://ebooknice.com/product/specification-for-tunnelling-2503490

ebooknice.com

(Ebook) Software Architecture by Example: Using C# and .NET by Paul Michaels ISBN
9781484279892, 9781484279908, 1484279891, 1484279905

https://ebooknice.com/product/software-architecture-by-example-using-c-and-
net-42996386

ebooknice.com

(Ebook) Lead by Example: 50 Ways Great Leaders Inspire Results by John Baldoni ISBN
9780814412954, 0814412955

https://ebooknice.com/product/lead-by-example-50-ways-great-leaders-inspire-
results-51554056

ebooknice.com
KAMIL NICIEJA
FOREWORD BY GOJKO ADŽIC´

MANNING
A complete list of Gherkin keywords and their synonyms

Keyword Synonyms Description

Feature Business Need, Ability Begins a Gherkin file

Background Runs steps before scenarios

Scenario Starts a new scenario

Scenario Outline Scenario Template Starts a new scenario with multi-


ple examples

Given *, And, But Puts the system in a predefined


state

When *, And, But Performs an action

Then *, And, But Tests for consequences

Examples Scenarios Lists examples for scenario out-


lines
Writing Great Specifications
Writing
Great Specifications
USING SPECIFICATION
BY EXAMPLE AND GHERKIN

KAMIL NICIEJA
FOREWORD BY GOJKO ADŽIĆ

MANNING
SHELTER ISLAND
For online information and ordering of this and other Manning books, please visit
www.manning.com. The publisher offers discounts on this book when ordered in quantity.
For more information, please contact
Special Sales Department
Manning Publications Co.
20 Baldwin Road
PO Box 761
Shelter Island, NY 11964
Email: [email protected]

©2018 by Manning Publications Co. All rights reserved.

No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in


any form or by means electronic, mechanical, photocopying, or otherwise, without prior written
permission of the publisher.

Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in the book, and Manning
Publications was aware of a trademark claim, the designations have been printed in initial caps
or all caps.

Recognizing the importance of preserving what has been written, it is Manning’s policy to have
the books we publish printed on acid-free paper, and we exert our best efforts to that end.
Recognizing also our responsibility to conserve the resources of our planet, Manning books
are printed on paper that is at least 15 percent recycled and processed without the use of
elemental chlorine.

Manning Publications Co. Development editor: Marina Michaels


20 Baldwin Road Technical development editors: Alain Couniot
PO Box 761 and Jonathan Thoms
Shelter Island, NY 11964 Review editor: Aleksandar Dragosavljević
Project editor: Tiffany Taylor
Copyeditor: Tiffany Taylor
Proofreader: Katie Tennant
Technical proofreader: Alessandro Campeis
Typesetter: Dottie Marsico
Cover designer: Marija Tudor

ISBN 9781617294105
Printed in the United States of America
1 2 3 4 5 6 7 8 9 10 – EBM – 22 21 20 19 18 17
brief contents
1 ■ Introduction to specification by example and Gherkin 1

PART 1 WRITING EXECUTABLE SPECIFICATIONS WITH EXAMPLES 29


2 ■ The specification layer and the automation layer 31
3 ■ Mastering the Given-When-Then template 54
4 ■ The basics of scenario outlines 80
5 ■ Choosing examples for scenario outlines 97
6 ■ The life cycle of executable specifications 123
7 ■ Living documentation 148

PART 2 MANAGING SPECIFICATION SUITES 171


8 ■ Organizing scenarios into a specification suite 173
9 ■ Refactoring features into abilities and business needs 195
10 ■ Building a domain-driven specification suite 213
11 ■ Managing large projects with bounded contexts 234

v
contents
foreword xiii
preface xv
acknowledgments xviii
about this book xx
about the cover xxiii

1 Introduction to specification by example and Gherkin


1.1 What’s a specification? 4
1

1.2 Why do teams need specifications? 4


Defining acceptance criteria in specifications 5 ■
Building a
ubiquitous language into specifications 6
1.3 Common specification pitfalls 8
Over-specification 8 Hand-offs 8
■ ■
Under-documentation 9
Speci-fiction 10 ■
Test-inability 10
1.4 Meet specification by example and Gherkin 11
Key process patterns 13
1.5 Having conversations that identify business needs 14
Deriving scope from goals 15 Illustrating requirements with

examples 16 Specifying collaboratively 18


1.6 Long-term benefits of automating conversations 19


Automating tests based on examples 19 Validating ■

frequently 21 Living documentation 21


1.7 Capturing conversations as executable specifications 22

vii
viii CONTENTS

1.8 Making software that matters 25


1.9 Summary 27

PART 1 WRITING EXECUTABLE SPECIFICATIONS


WITH EXAMPLES ...............................................29

2 The specification layer and the automation layer


2.1 The layers of executable specifications 32
31

The specification layer 33 ■


The automation layer 34
2.2 Writing your first Gherkin scenario 38
Feature 38 ■
Scenario 39 ■
Given 40 ■
When 42
Then 42
2.3 Understanding the structure of steps and scenarios 43
2.4 Testing different outcomes 45
2.5 How the automation and specification layers interact 47
Step definitions 47 ■
Matching steps with step definitions 48
2.6 Finishing the Gherkin crash course 51
2.7 Answers to exercises 52
2.8 Summary 53

3 Mastering the Given-When-Then template


3.1 Choosing the right style for your Gherkin scenarios
54
55
Doing outside-in development with Gherkin 56 Gathering ■

realistic data 61 Favor specifying intentions and outcomes


over the user interface 62


3.2 Composing Gherkin scenarios 64
Starting with a Then 64 Using only one When per

scenario 65 Specifying prerequisites with Givens 67


Choosing the right abstraction level 71


3.3 Telling Gherkin stories with impact 74
Writing warm-up narratives 74 Vetting acceptance criteria

with examples 75 Exploring contexts by questioning


Givens 75 Exploring outcomes by questioning Thens 76


3.4 Answers to exercises 77


3.5 Summary 79
CONTENTS ix

4 The basics of scenario outlines


4.1 Example shopping application
80
81
4.2 Using scenario outlines 82
Spotting redundancies in Gherkin scenarios 82 ■
Refactoring
redundant scenarios with scenario outlines 84
4.3 The structure of a scenario outline 86
The Examples table 86 ■
Parameters 87 ■
The Scenario
Outline keyword 88
4.4 Advantages of scenario outlines 89
Shorter feature files 89 Feature files organized by

high-level business rules 89


4.5 Growing and maintaining scenario outlines 90
4.6 Disadvantages of scenario outlines 95
4.7 Summary 95

5 Choosing examples for scenario outlines


5.1 Example shopping application 99
97

5.2 Writing outside-in scenario outlines 99


Collecting examples for outside-in scenario outlines 100
Writing outside-in scenario outlines from collected examples 101
5.3 Finding key examples for scenario outlines 102
Domain-specific examples 104 Counterexamples 106

Exploratory outcomes 107 Boomerangs 111


5.4 Avoiding scenario outline anti-patterns 114


Typical data validations 114 Simple combinatorial

outcomes 114 Database models 117 Classes of


■ ■

equivalence 119
5.5 Answers to exercises 121
5.6 Summary 122

6 The life cycle of executable specifications


6.1 End-to-end overview of the process 126
123

6.2 Understanding business goals 127


6.3 Analyzing requirements with examples 130
Conveying requirements as user stories 130 Collecting ■

examples 133 Refining user stories with examples 135



x CONTENTS

6.4 Deriving scenarios from examples 137


6.5 Refining scenarios 139
6.6 Iterating specifications over time 141
Validating the specification suite 141 ■
Evolving the
documentation system 144
6.7 Summary 147

7 Living documentation
7.1
148
Living documentation in action 150
7.2 Writing documentation 153
7.3 Defining important domain concepts 154
Writing lexical definitions 154 Writing illustrative

definitions 156 Using glossaries 158


Naming important domain concepts 158


7.4 Documenting decisions using briefs 160
Using warning notes to highlight problematic areas 160
Using context notes to deepen the business context 160
Using maintenance notes for internal purposes 161
7.5 High-level overview of the documentation process 161
7.6 Who creates living documentation? 163
Creating documentation through all-team specification
workshops 164 Creating documentation through Three

Amigos meetings 164 Creating documentation through


individual people 165


7.7 Choosing the right audience for living
documentation 166
Who’s a minimally qualified reader? 166
Finding the perfect MQR in an organization 167
7.8 Answers to exercises 169
7.9 Summary 169

PART 2 MANAGING SPECIFICATION SUITES..................171

8 Organizing scenarios into a specification suite


8.1 Is organizing scenarios by features a good idea?
173
175
8.2 Organizing scenarios by user stories 176
Introducing the Ability keyword 177
Understanding the structure of user stories 182
CONTENTS xi

Analyzing the relationship between user stories


and executable specifications 183 Iterative dangers

of organizing scenarios by user stories 184


8.3 What about nonfunctional requirements? 186
Dealing with nonfunctional requirements according
to SBE 187 Can Gherkin specify nonfunctional

requirements? 188 Introducing the Business Need


keyword 189 Using the Business Need keyword to


identify new stakeholders 190


8.4 Answers to exercises 193
8.5 Summary 194

9 Refactoring features into abilities and business needs


9.1 Analyzing user stories: a practical example 196
195

9.2 Refactoring features into abilities 196


Deriving new scenarios from user stories 197
Starting with simple features 197 Adding

scenarios over time 198 Splitting huge features


into small abilities 200


9.3 Recognizing and refactoring business needs 203
Adding functional scenarios to business needs 204
Identifying new stakeholders with business needs 207
Refactoring functional scenarios in business
needs into individual abilities 208
9.4 Summary 212

10 Building a domain-driven specification suite


10.1 Distilling business domains from
213

a ubiquitous language 215


Spotting different domains in your scenarios 216
Distilling the core domain from scenarios 218
Distilling subdomains accompanying the core domain 219
10.2 Creating a domain model from distilled domains 221
The domain model and the specification suite 221
Why are good domain models important? 222
What makes a good domain model in software? 224
10.3 Building a domain-driven specification suite
in practice 224
Distilling subdomains from unequivocal scenarios 225
Distilling subdomains from mixed scenarios 226
xii CONTENTS

Distilling subdomains from other scenarios 228


Creating a specification suite from distilled domains 230
10.4 Answers to exercises 231
10.5 Summary 233

11 Managing large projects with bounded contexts


11.1 Analyzing domain concepts in context 235
234

Spotting false cognates 236 Dealing with false


cognates 237 Spotting duplicate concepts 239


11.2 Modeling specification suites as bounded contexts 241


Understanding bounded contexts 241 Splitting a large

specification suite into multiple bounded contexts 242


Managing bounded contexts with context maps 245
Drawing context maps 246
11.3 Fitting DDD into an SBE process 248
11.4 Summary 249

appendix Executing specifications with Cucumber 251


index 269
foreword
To many agile teams, specifications is a dirty word, and any discussion about written
documentation is heresy. Yet long-term product success depends on new members
joining teams, scaling up and growing products and organizations, and reconciling
the needs and demands of an ever-growing number of user groups and stakeholders.
Those tasks are almost impossible without capturing knowledge in some form that
allows sharing and doesn’t rely on a single person’s memory.
This book deals with those parts of the delivery process that typically fall between the
cracks of the three Cs of user stories. The Card, Conversation, and Confirmation technique
for working with user stories plays a pivotal role in directing software delivery today, but
many delivery teams struggle to capture the results of conversations and document
them in a way that will make confirmation easy. Kamil’s suggestions and techniques will
help you do that, not just in the short term, but over many years as a software product
keeps evolving, and when you need to remember discussions you had months earlier in
order to inform future cards and conversations.
Specification by example (SBE) with Gherkin presents a way for teams working in
an iterative delivery model to capture knowledge about their intentions and about
what their software products do. Most books in this area focus on either tool-specific
automation mechanisms or high-level teamwork processes for collecting the right
examples, but there’s very little literature out there about the style and form of good
examples that will guide development. That’s why this book is so important.
The omnipresent Given-When-Then style of describing examples is close to natu-
ral language, but that familiarity is a double-edged sword. On the one hand, it makes
it easy for anyone to get started, which is fantastic because it lowers the bar for teams
to start a conversation. But Gherkin (the geek name for that format of specifications)

xiii
xiv FOREWORD

is also aimed at supporting automated validation and long-term documentation, and


that requires a lot more formality and structure than natural language does. Without
considering that dark side of Given-When-Then examples, many teams get some
short-term benefits at the significantly increased cost of long-term maintenance.
Kamil tackles this problem with several simple techniques that are easy to remember,
and lots of concrete examples that will help you put things into perspective.
The ideas in this book are close to some informal approaches I’ve seen working
with many successful teams. Kamil presents them as structured patterns, such as “Start-
ing with a Then” and “Specifying intentions and outcomes over the UI,” so you can
remember them easily. The tips and tricks to work with scenario outlines will save you
months of rework and hassle, helping you deal with possibly the most important and
most difficult topic for anyone new to this way of documenting examples. Several
chapters also have homework exercises that you’ll be able to use to immediately to try
out new knowledge and ideas.
I particularly like how the later part of the book touches on domain modeling
and creating a ubiquitous language. Kamil does a nice job taking those concepts
from good architectural practices and translating them to the world of collaborative
specifications.
—Gojko Adžić
Author, Specification by Example (Manning, 2011)
preface
In 1968, there were only 10,000 installed computers in all of Europe. That year, NATO
funded a conference that, even though its topic was little known to a wider audience,
hosted more than 50 people from 11 different countries. Held in Garmisch, Germany,
the conference talked about software engineering and represented the first appear-
ance of programming as an engineering discipline. The event would later become
known as the first of two NATO Software Engineering Conferences (the second was
held a year later); both played major roles in promoting widespread acceptance of
software development.
After the conference, the NATO Science Committee was ordered to compile a
report that summarized the discussions.1 Every time I read this report, I’m amazed by
how insightful it was and that parts of it remain relevant. “We tend to go on for years,
with tremendous investments, to find that the system, which was not well understood
to start with, does not work as anticipated,” said J. W. Graham during a panel on feed-
back through monitoring and simulation. “We work like the Wright brothers built air-
planes: build the whole thing, push it off the cliff, let it crash, and start over again.”
Decades have passed, but not a lot has changed.
Graham’s committee gathered to discuss whether there was a better way to do soft-
ware engineering. They focused on the use of simulation during design, an idea intro-
duced by Brian Randell in a working paper. “The important point [in building better
software] is the use of simulation,” continued Graham. By simulation, he meant what
we today call test automation—a deterministic environment with predefined inputs and

1
Software Engineering: Report on a Conference Sponsored by the NATO Science Committee, Garmisch, Germany, 7th to
11th October 1968, eds. Peter Naur and Brian Randell (Scientific Affairs Division, NATO, 1969),
http://mng.bz/jn3d.

xv
xvi PREFACE

predictable outcomes. “Simulation is a way to do trial and error experiments. If the


system is simulated at each level of design, errors can be found and the performance
checked at an early stage.” In other words, the earlier in the process we test, the
sooner we can find mistakes. When we consistently test after every change in design,
errors tend to disappear. In the end, we get better software.
Throughout the rest of the discussion, other participants followed Graham’s train
of thought. Alan Perlis chimed in, clarifying the relationship between tests and design:
“A software system can best be designed if the testing is interlaced with the designing
instead of being used after the design.” Test a little, code a little. If this sounds familiar,
that’s because Perlis’s approach reemerged as test-driven development (TDD) in the
late 1990s. Modern TDD requires software engineers to write tests before any applica-
tion code. Ideally, TDD should actively prevent defects by improving code design. Perlis
predicted that, too: “A simulation which matches the requirements contains the con-
trol which organizes the design of the system. … The critical point is that the simula-
tion becomes the system.” According to his vision, tests guide software design and
organize it. TDD does the same. A test-driven process relies on repeating a short devel-
opment cycle called the red-green-refactor loop. Initially, new tests fail the simulation
because no application code has been written yet (and, in most test-automation
engines, failed tests appear in red). But as new code is written, more and more tests
start to pass—and they turn green as a result. The loop is repeated until all tests pass.
And so, step by step, the simulation becomes the system.
TDD was created and promoted by Kent Beck. Thirty years divided Beck and Per-
lis, but as personal computers and software engineering engulfed the world, the
underlying problems programmers faced remained the same. TDD has a fatal flaw,
though. Although, as Perlis said, a simulation that matches the requirements can con-
trol and organize the design of a system, the use of simulation doesn’t address the
problem of collecting the correct requirements in the first place. Thus, a good simu-
lation can perfectly organize the wrong system, rendering itself useless. That’s why
programmers never design software systems alone—they work with designers, testers,
business analysts, product managers, and so on. But TDD is a highly technical pro-
cess. Would it be possible to harness the benefits of feedback through simulation on a
higher level of abstraction, without relying only on low-level code, and in a more col-
laborative way? Fortunately, in the last decade or so, attempts to answer this question
have resulted in a lot of innovation (for example, TDD evolved into behavior-driven
development [BDD]).
This book focuses on an innovation called an executable specification: a specification
that’s written in natural language and, at the same time, can be run as a program—or,
more specifically, as an automated test. The use of natural language instead of code
means everyone, whether they can program or not, can discuss the requirements, as
well as their tests and implementation. The use of simulation means we can have the
simulation control the design of the system and then become the system itself, by
interlacing design and testing.
PREFACE xvii

I first became familiar with the topic at Monterail—a web development studio
working with enterprise clients and startups from all over the world—where I was
responsible for implementing executable specifications. Thanks to executable specifi-
cations, Monterail’s delivery teams were able to deliver software of higher quality. In a
year or so, we wrote more than 500 Gherkin scenarios for highly complex products
including procurement software, webinar/webcast software for marketers, and a
packet-capture product family that can transform any server into a precision network-
monitoring device.
I started my career at Monterail as an engineer and then moved to product man-
agement. I wrote executable specifications, I implemented them, and I tested them.
Around that time, I read Gojko Adžić’s Specification by Example (Manning, 2011,
www.manning.com/books/specification-by-example), which was pivotal to the way I
approach the topic of software quality. In early 2015, I participated in Product Owner
Survival Camp in Vienna, where Ellen Gottesdiener, Gojko Adžić, David Evans, and
Christian Hassa held their workshops. During a coffee break, a coworker of mine
(who also attended) and I mentioned to Gojko that we were thinking about releasing
a free ebook with tutorials for writing executable specifications. Gojko’s book is great,
but it focuses on the process and key practices, leaving implementation aspects aside.
Although many books discussed how to write tests, for some reason almost nobody was
talking about writing the specification layer—the stuff that humans can read, not just
machines. We agreed that it was a topic worth exploring. The joint project didn’t work
out, but Gojko introduced me to Manning’s Mike Stephens; and, some time later, the
idea for my own book took off—all thanks to that meeting in Vienna.
There are many different kinds of executable specifications; an attempt to discuss
all of them in a single book wouldn’t be practical. So, we’ll explore two of these
approaches—specification by example (SBE) and Gherkin—that are increasingly pop-
ular. Together, they offer programmers, designers, and managers an inclusive environ-
ment for clear communication, discovering requirements, building a documentation
system, and writing acceptance tests. My goal in this book is to help you create such an
environment in your organization so that we, as an industry, may continue progress-
ing on the path set in 1968 by the pioneers of our industry.
I wish you good luck in your journey with SBE and Gherkin. But I also want to
thank you. I truly believe that delivery teams all over the world wield tremendous
power and have great responsibility to the people who use their software—and
increasingly, that’s millions of users. Every attempt to improve software quality—
including yours—should be applauded.
acknowledgments
I thank everyone who contributed to this book, especially the people at Manning:
publisher Marjan Bace and everyone on the editorial and production teams, includ-
ing Alessandro Campeis, Alain Couniot, Bert Bates, Dan Maharry, Marina Michaels,
Mike Stephens, Janet Vail, Tiffany Taylor, Katie Tennant, Dottie Marsico, and Jona-
than Thoms. Having some confidence in the topic I wanted to write about, I thought I
was the one who was here to teach; but, rightfully, it was I who ended up being
schooled. I learned so much from you—all while you were working hard to move the
process along as swiftly as possible.
Thanks go to the amazing group of technical peer reviewers led by Aleksandar
Dragosavljevic: Ivo Alexandre, Costa Alves Angelico, James Anaipakos, Dane Balia,
Keith Donaldson, Ruben Gamboa, Aurélien Gounot, Burk Hufnagel, Edgar R. Knapp,
Unnikrishnan Kumar, David Madouros, Russell Martin, Markus Matzker, Nasir
Naeem, David Osborne, Mike Reidy, and Craig Smith.
My thanks to Gojko Adžić, who wrote the foreword and introduced me to Manning.
I want to thank the great people at Monterail who worked with me from 2013 to
2015 and contributed to many of the ideas you’ll read here. They helped me see SBE
and Gherkin from every angle: development, testing, and product design.
Many friends helped improve early drafts of the book or got me through blocks
and obstacles. For their invaluable comments and continuing support, I thank Bartek
Jarmołkiewicz, Magda Mól, Dominik Porada, and Piotrek Zadworny.
I also want to thank my cofounders at Ada:1 Adam Stankiewicz and Natalia Świrska.
The company was born at the same time as the idea for this book. Thank you for your
patience and encouragement.

1
Ada is an AI-powered personal assistant that will help you rent your next apartment: http://adarenting.com.

xviii
ACKNOWLEDGMENTS xix

Finally, a big thank-you goes to my family. I wouldn’t have done any of the work I’m
proud of today without my parents. Mom, you’ve always believed in me: thank you for
being the very first reader of my short stories, back when I was in school. Dad, I often
think of the times when we had fun together learning our first programming lan-
guage, Visual Basic. I was 10 years old then. I’m older now, but it’s still fun.
I once read that people write in an attempt to advise their past selves. Since child-
hood, I’ve wanted to write a book—although I imagined it would be a novel. At some
point, I came to believe it would never happen, but the universe works in funny ways.
To anyone who struggles with a goal that feels distant and daunting, I want to quote
Nike’s Phil Knight: “The cowards never started, and the weak died along the way. That
leaves us.” Don’t give up. Thank you for your work.
about this book
The goal of this book is to help you learn to do the following:
 Capture requirements and acceptance criteria as executable test cases
 Master the Gherkin language as a practical, communicative way of writing soft-
ware specifications
 Collect valuable examples
 Write easy-to-automate specifications
 Design stable executable specification suites with good test coverage
 Balance the specification style and documentation style in Gherkin scenarios
 Manage specification suites in large projects

Who should read this book


For readers who came here with preexisting knowledge of both specification by exam-
ple (SBE) and Gherkin: this is an intermediate-level book designed for anyone who’s
tasked with writing or updating a specification in Gherkin or who’s responsible for
implementing an SBE process using Gherkin in their organization. If those are issues
you deal with on a daily basis, you’ll find answers here.
For readers who came here to learn from scratch: many tutorials on the web
explain how to set up executable specifications and write testing code. But their
authors don’t understand that, to anyone but software engineers and testers, auto-
mated testing is as vague a concept as any random UX method can be to an average
programmer. Those tutorials have good intentions and want to bring everyone to the
same table, but whose table is that?

xx
ABOUT THIS BOOK xxi

This book is a teaching resource meant for everyone—product and design people,
analysts, programmers, and testers. Instead of focusing on technical challenges, it
goes into depth about writing the text layer of executable specifications in Gherkin in
a clear, understandable, concise manner. Non-engineers can learn how to make essen-
tial contributions to design and testing without having to learn programming or write
testing code. Engineers and testers, on the other hand, will find SBE and Gherkin
helpful for doing more meaningful TDD by striking a stronger chord with nontechni-
cal audiences through executable specifications.

How this book is organized


This book is divided into 11 chapters and an appendix:
 Chapter 1 presents a quick, practical introduction to SBE and Gherkin.
 Chapters 2 and 3 talk about writing scenarios and the theory of the automation
layer. Chapter 2 introduces the basics of the Given-When-Then template, and
chapter 3 discusses what makes a great scenario.
 Chapters 4 and 5 look at scenario outlines, which are a more advanced way of
writing scenarios. Chapter 4 presents the new structure of scenario outlines,
and chapter 5 shows why it’s important to collect thoughtful examples.
 Chapter 6 is about the life cycle of executable specifications. Before going into
more-advanced topics, you need to understand the place of SBE and Gherkin in
a real-world software development process.
 Chapter 7 covers living documentation and how to create high-precision sce-
narios out of unrefined drafts.
 Chapters 8 and 9 are about managing medium-sized specification suites. Chap-
ter 8 talks about grouping unorganized scenarios into whole specifications, and
chapter 9 discusses refactoring large specifications into smaller ones.
 Chapters 10 and 11 focus on the largest specification suites. Chapter 10 intro-
duces domain-driven design as a way to prepare medium-sized specification
suites for seamless expansion. Chapter 11 is about splitting large specification
suites based on their business domains.
 The appendix is a quick tutorial on how to write and run simple, automated
tests for feature files with Cucumber and Gherkin. It’s intended for readers who
are interested in how the automation layer works in practice.
You can read the book from cover to cover or make a quick stop after chapter 2, read
the appendix, and then come back to the rest of the book. I highly recommend read-
ing the entire book without skipping chapters—the ordering is intentional and not
designed to be rearranged. Some of the chapters include exercises; the answers are
provided at the end of the chapter.
xxii ABOUT THIS BOOK

Code conventions and downloads


This book contains many examples of source code, both in numbered listings and in-
line with normal text. In both cases, source code is formatted in a fixed-width font
like this to separate it from ordinary text.
In many cases, the original source code has been reformatted; I’ve added line
breaks and reworked indentation to accommodate the available page space in the
book. In rare cases, even this wasn’t enough, and listings include line-continuation
markers (➥). Additionally, comments in the source code have often been removed
from the listings when the code is described in the text. Code annotations accompany
many of the listings, highlighting important concepts.
The source code for all examples in this book is available from the publisher’s web-
site, www.manning.com/books/writing-great-specifications.

About the author


Kamil Nicieja began his career as an engineer and then moved to
product management. He’s now CEO of Ada (http://adarenting
.com), an AI-powered personal assistant that will help you rent
your next apartment. He’s experienced SBE’s benefits first-hand
both in development and in business, and he’s seen what hap-
pens when management and development misunderstand each
other or don’t develop common domain concepts together from
both points of view. In addition to writing this book, he blogs at www.nicieja.co about
entrepreneurship, startups, and technology.

Book forum
Purchase of Writing Great Specifications includes free access to a private web forum run
by Manning Publications where you can make comments about the book, ask technical
questions, and receive help from the author and from other users. To access the forum,
go to https://forums.manning.com/forums/writing-great-specifications. You can also
learn more about Manning’s forums and the rules of conduct at https://forums
.manning.com/forums/about.
Manning’s commitment to our readers is to provide a venue where a meaningful
dialogue between individual readers and between readers and the author can take
place. It isn’t a commitment to any specific amount of participation on the part of the
author, whose contribution to the forum remains voluntary (and unpaid). We suggest
you try asking the author some challenging questions lest his interest stray! The forum
and the archives of previous discussions will be accessible from the publisher’s website
as long as the book is in print.
about the cover
The figure on the cover of Writing Great Specifications is captioned “Habit of a Moorish
Priest in 1695.” The illustration is taken from Thomas Jefferys’ A Collection of the Dresses
of Different Nations, Ancient and Modern (four volumes), London, published between
1757 and 1772. The title page states that these are hand-colored copperplate engrav-
ings, heightened with gum arabic.
Thomas Jefferys (1719–1771) was called “Geographer to King George III.” He was
an English cartographer who was the leading map supplier of his day. He engraved
and printed maps for government and other official bodies and produced a wide
range of commercial maps and atlases, especially of North America. His work as a map
maker sparked an interest in local dress customs of the lands he surveyed and
mapped, which are brilliantly displayed in this collection. Fascination with faraway
lands and travel for pleasure were relatively new phenomena in the late eighteenth
century, and collections such as this one were popular, introducing both the tourist as
well as the armchair traveler to the inhabitants of other countries.
The diversity of the drawings in Jefferys’ volumes speaks vividly of the uniqueness
and individuality of the world’s nations some 200 years ago. Dress codes have changed
since then, and the diversity by region and country, so rich at the time, has faded away.
It’s now often hard to tell the inhabitants of one continent from another. Perhaps, try-
ing to view it optimistically, we’ve traded a cultural and visual diversity for a more var-
ied personal life—or a more varied and interesting intellectual and technical life.
At a time when it’s difficult to tell one computer book from another, Manning cel-
ebrates the inventiveness and initiative of the computer business with book covers
based on the rich diversity of regional life of two centuries ago, brought back to life by
Jefferys’ pictures.

xxiii
Introduction to specification
by example and Gherkin

This chapter covers


 Examining why teams need specifications
 Recognizing common specification pitfalls
 Understanding the basics of specification by
example and Gherkin
 Solving common delivery problems with
specification by example and Gherkin

How well we communicate is determined not by how well we say things, but how well
we are understood.
—Andy Grove

The money is all on the right [side of the product life cycle], in the area of certainty
[where the product is mature]. I work on the left, with uncertainty. I’ll never be rich.
—Chris Matts

1
2 CHAPTER 1 Introduction to specification by example and Gherkin

Humanizing technology is perhaps the greatest challenge of software engineering.


The technology industry must strive to show tremendous empathy for other people’s
problems. We’re making tools for everyone out there. In the messy world of organiza-
tional politics, broken workflows, human errors, and biases, technology experts must
figure out how to successfully deliver great software. It’s an important responsibility.
To do our job well, we have to
 Make sure we deliver the right software
 Deliver it the right way

Delivery teams are naturally competent in delivering software the right way. As an
industry, we’ve developed tools, standards, and methodologies that make our designs
beautiful and usable—and our code performant, secure, and easy to maintain. We
keep getting better at refining and reinventing our best practices.
“The right software” part, though … what does that even mean? Every time I
explain to someone what this book is about, I tell them that, as programmers, we’re
taught to write code—algorithms, design patterns, abstractions. Or, as designers, we’re
taught to design—organize information and create beautiful interfaces. But when we
get our entry-level jobs, our employers expect us to “deliver value to our clients.” And
the client may be, for example, a bank. If I’d been working for a bank when I started
my career, it would have quickly come up that I know next to nothing about bank-
ing—except how to efficiently decrease my account balance. So I would have had to
somehow translate what was expected of me into code. I would have needed to build a
bridge between banking and my technical expertise if I wanted to deliver any value.
“This,” I say, “is what the book is about: building bridges between technology and busi-
ness.” Over the course of multiple projects I’ve had the privilege to work on, I’ve come
to believe that these bridges can only be built with empathy—understanding other
people’s problems—and inclusive communication.
Even though engineers should be good at building bridges, our industry seems to
have a problem with delivering the right software. In practice, delivering the right soft-
ware requires securing the right requirements. I’ll talk more about requirements in a
moment. For now, I’ll say the following:
 A 1994 study showed that 31.1% of projects were canceled before they were
completed, and 52.7% of projects cost 189% of their original estimates.1
 In larger companies, rare successful projects had only 42% of the originally pro-
posed features.2
 In 2000, IBM and Bell Labs studies showed that 80% of all product defects are
inserted at the requirements-definition stage.3

1
The Standish Group, “The CHAOS Report” (1995), http://mng.bz/40M3.
2
Ibid.
3
Ivy Hooks and Kristin Farry, Customer-Centered Products: Creating Successful Products Through Smart Requirements
Management (AMACOM/American Management Association, 2001).
3

 Requirements errors consume from 28% to more than 40% of a typical pro-
ject’s budget.4
 Requirements defects account for the vast majority of the total cost of all
defects—often 70% or more.5
 In 2008, almost 70% of companies surveyed set themselves up for both failure
and significantly higher costs by their use of poor requirements practices.6
What are the consequences? Commercial organizations across the European Union
lost €142 billion on failed IT projects in 2004 alone, mostly because of poor alignment
with business objectives or business strategies becoming obsolete during delivery.7 So
although we’re pretty good at maintaining our technical standards of excellence, we
apparently still have a lot to learn when it comes to understanding what businesses
need from us.
In this chapter and throughout the book, I’ll introduce you to a selection of
bridge-building methods for translating business objectives into working software
that, in my experience, results in great and meaningful products and services. This
chapter will begin your in-depth journey of learning to write executable specifications in
Gherkin according to the key practices of specification by example.
Specification by example (SBE) is a collaborative software development approach
that facilitates collaboration by illustrating software requirements with concrete exam-
ples and automated acceptance tests. Because SBE is a process, you’ll need some tools
that will help you implement that process. This is why you’re going to learn Gherkin.
Gherkin is a business-readable, domain-specific language that’s easy for nontechnical
folks to understand. As such, it makes translating requirements into code easier.
In a way, the book is an advanced Gherkin tutorial with some product-design ambi-
tions. I’ll talk more about the reasons for choosing Gherkin later in the chapter. But
when I was first learning SBE’s key patterns, I found that, although locating material
on automated acceptance tests and eliciting better requirements is easy, there aren’t
many resources available on writing great executable specifications. By great, I mean
well-written and easy to read in terms of sentences and words, not code. That makes
my ambition small, because I chose a specific topic for the book. I care about making
sure that well-elicited requirements aren’t misrepresented by poorly written specifica-
tions. At the same time, I realize that writing executable specifications is a cross-
disciplinary matter. Whenever I can, I’ll talk about making your requirements better
and more specific with clever Gherkin techniques. Other times, I’ll point you toward
specific books that talk about requirements, product design, or marketing, in hopes
they will answer your further questions.

4
Ibid.
5
Dean Leffingwell and Don Widrig, Managing Software Requirements: A Use Case Approach, 2nd ed. (Addison-Wes-
ley Professional, 2003).
6
IAG Consulting, “Business Analysis Benchmark” (2008).
7
Gojko Adžić, Impact Mapping (Provoking Thoughts, 2012).
Discovering Diverse Content Through
Random Scribd Documents
The hatch swung wide, and night poured in ... the blistering, dust-
choked desert night, pale with the light reflected by looming Venus'
unbroken mists and billowing cloud-banks.
Somewhere, out there, were primitives in hideous metal masks, so
fierce that even the almighty Federation at last had forbidden this
satellite to all men.
Perhaps, too, here were robots ... towering metal monsters from
beyond the stars, brought down by destiny in its strange workings to
save the outlaw worlds.
Or perhaps not. Perhaps this seared and storm-swept ball held only
the end of Wassreck's dreams ... and death.
Jarl Corvett smiled a thin, wry smile. At least, he'd know the answer
soon.
Breathing deep, he swung out through the hatch and dropped down
on Womar....

CHAPTER VIII

Morning on Womar.
The hot winds were flames whipping at Jarl's face, and the driven
sand slashed and burned like pelting needles. Slowly, the night died
and, off to his right, the sun rose—fiery, incandescent. Venus, to his
left, stretched in a great, shining arc as far as the eye could see.
Dust swirled about him in smothering clouds. He wallowed through a
sea of powdery, ankle-deep grit where rocks shoved up in hidden
reefs to trap him. Hollows loomed in his bloodshot eyes like chasms,
and hillocks grew to mountains up which he toiled on hands and
knees, choking and gasping. His cheeks were rasped raw now, his
lips all parched and cracking.
Still he lurched onward—lost and disoriented, without destination.
But not without goal.
A goal—? He laughed aloud—the muddled, drunken laughter of a
heat-twisted brain. Yes, he had a goal; but it was the goal of utter
madness.
For somewhere in this blazing waste, Womar's primitives lay waiting.
He knew; he'd seen them charge before. How they sensed an alien's
coming was a secret no stranger had ever fathomed. But sense it
they did; so they'd hide and wait, till at last the sun and dust and
slashing wind had done their work and the invader fell and could not
rise.
Then, and then only, they would come, from whatever dark, hidden
maze they came from. Their blood-thirsting screams would rise
above the howling wind, and their hideous metal masks would flash
like mirrors of madness in the white flame of the sunlight.
And after that ... Jarl choked on his parched, swelling tongue. After
that, there would come other things ... things no alien being had
survived, rites so awful as to make this blazing wilderness seem a
cool Elysium.
What was left, they'd spread out in neat display as their own black
warning to other straying strangers.
That was his goal: that the primitives should seize him.
Yet now, as the moment neared when he would fall to rise no more,
he knew of a sudden how mad it was. Not even Ceresta and the
raider fleet were worth it; not even freedom. Nothing could be worth
it.
But now, there was no turning back. He'd come too far; he'd pressed
his luck one time too many.
Swaying and staggering, he came to another, deeper hollow, where
bare rock showed through the dust and sand along the slopes in
serrate ledges. At the bottom, the drifting grit lay in smooth-swept
whorls like a hill-bounded cove where ripples had somehow been
trapped in motion, frozen into the surface of the water.
He laughed once, wildly, and lurched ahead; then slipped and
pitched forward, tumbling headlong. Rocks gashed at him as he fell
—tearing, clutching, as if even they shared the primitives' hatred for
all aliens.
Stunned, choked, half blinded, he came to rest at last at the edge of
the pool of rippled sand. Here, away from the sweep of the wind,
the heat bore down like a smothering blanket. Jarl's brain reeled. He
could draw no strength from the air that scorched his lungs. He
knew instinctively that no being of his race could long survive the
drain and pressure.
Frantically, he dragged himself up and wallowed forward, out onto
the sand.
Even as his feet sank into the sifting dust, he knew he should have
gone the other way, back up the slope. But by then it was too late.
Deeper he sank, and deeper, till the loose sand was thigh-high about
his legs.

Desperately, he threw himself flat, trying to spread the weight of his


body. But the grit gave way beneath him, sliding and swirling,
hungrily sucking him deeper. Dust clogged his nostrils. When he
tried to open his mouth to suck air, sand flooded in.
He floundered wildly, and the thought flashed through his mind, Do I
die here—here, in this whirlpool of shifting grit, swallowed up, buried
alive, before I even find the primitives...?
He struggled again to rise, and could not. The choking dust swirled
higher. His senses dimmed. The blazing sun began to darken.
And then they came.
They came with a rush, across the crest, their metal masks blurred
to blinding flashes. Out of the clefts of the rocks they came, and up
from the sand-pool's edges, howling like the screamings in a
nightmare, the wailings of banshees.
Their bodies were brown as the sun-blistered rocks, their shoulder-
plumes scarlet as heart-blood. Their girdles were scarlet, too, and
the plumed bands that circled wrists and ankles. Monstrous footgear,
broad as their lean, hard bodies, sprayed sand as they charged.
Light flared in iridescent splendor from strange, outré weapons.
Desperately, Jarl tried again to rise. But again, the eddying grit gave
way beneath him.
Then they were upon him—seizing him, dragging him up and out of
the powder-dry morass that held him. The great webbed shoes they
wore did not sink in, but, rather, skimmed the surface.
Vainly, Jarl struck out and sought to struggle. But he was as a child
in the grip of giants. The primitives' hands were like shackling bands
of steel upon him.
He let himself go limp. After all, was this not the very thing he'd
come for?
Unless they killed him here and now....
But they carried him back bodily to the sand-pool's edge, to a place
where the serrate rocks rose in lowering, brooding ledges. A crevice
yawned. Swiftly, they shoved him between the saw-toothed
boulders, down into it.
Now other hands reached up from the depths of an inner cavern to
receive him. He found himself lifted into the black emptiness of a
narrow tunnel.
Then he was on his own feet once more. But the hands still gripped
his arms, pushing him along as he stumbled through the ebon
passage. Dimly, he became aware of a strange odor in his nostrils—a
sweet yet musty scent he'd never smelled before.
The passage led on, ever downward. Steadily it grew cooler. Jarl
began to lose the sense of draining pressure. His captors jabbered in
the darkness. But their speech was like no tongue he'd ever heard
before, all consonants and gutturals.
It seemed they hurried on for miles. Then, at last, a dim light
showed ahead.
The party halted. Someone clamped a heavy metal mask upon Jarl's
head—a mask with neither eye- nor ear-holes. It shut him off in a
throbbing private night, through which the guttural voices drifted
only as dim whispers.
Once more, the primitives shoved Jarl ahead, and as they moved
forward, he had a sudden feeling that they had left the tunnel and
come out into a larger room.
Then they were lifting him again; laying him down flat on some
smooth surface; holding him there, rigid.
He clenched his teeth, bracing himself for the torture that he knew
would sooner or later be his lot.
But no pain came. Instead, of a sudden, the surface on which he lay
was vibrating, moving. Air whipped at him. With a shock, he realized
that he and the others were hurtling through Womar's heart at
jarring speed on some strange transport unit.
It made his spine crawl, just a little. How primitive were these
primitives? Had all the worlds been wrong about them? What dark
secrets did they hold hidden, here in these black caves that
honeycombed the rock beneath this satellite's blazing deserts?
And what of the robots? Where were they hidden?
Or did they exist at all—?
But he had no time to ponder, for as suddenly as the motion had
begun, it ended. The rush of air slowed, then halted. Once more, the
primitives' hands were lifting him, dragging him forward.
But this time the passageway through which they moved led
upward.
The heat rose as they climbed, till Jarl was sweating and choking
inside the helmet. Then the slope leveled off again, and he sensed
that they had come out into another, larger room. New voices joined
the dim whisperings of his escort, till their volume swelled to a
tremendous, throbbing chorus. Bodies buffeted against Jarl, milling
about him. Hands clawed at him—clubbing, tugging, scratching. He
could feel the crowd's hot hate crushing in upon him. The musty,
cloying, sweetish odor he'd smelled before grew even stronger till he
was sick and dizzy, ready to vomit.
His captors pressed on, not hesitating. Roughly, they led Jarl
stumbling up a flight of steps.
At the top, there was a brief halt. Then the faint squeal of massive
hinges.
A blast of heat struck Jarl a hammer blow. He reeled under its
impact.
From behind, someone gave him a savage shove. He lurched
forward.
A new burst of sound smashed at him, even through the metal
helmet—a wild shout, torn from a thousand throats, fierce and
welling in its hatred. The heat and smell were great sledges,
pounding at him.

In spite of all of his control, Jarl felt a sudden rush of panic.


Stumbling, staggering, he came upright—fists clenched, braced to
meet the fury of those about him even in his helplessness, his
blindness.
But again hands seized him before he could strike a blow. Someone
fumbled at the catches of the shrouding helmet.
The metal mask came away. Sound, light, heat, stench, smashed in
on Jarl.
He jerked back and threw his hands up across his eyes, trying to
shut out the blinding blaze of Womar's sun.
But other hands jerked down his own. Blinking, half blinded, stiff
with shock, he stared out incredulously upon a sight such as he had
never seen before.
For he stood in the prow of a great space-ship—a ship vast beyond
the belief of mortal man.
It was old, this ship—old with an age that staggered Jarl Corvett's
mind. Eons were in the sagging plates and splitting arches. The
crystals that glinted in the dull, warped metal spoke of untold ages
here on Womar. The hull was smashed and shattered, too, and the
blazing sun poured in through a thousand great jagged holes and
rifts. One whole end of the craft was crumpled, buckled, where it
had plowed deep into the rocks and sand as it crashed here.
And it was alien. A thousand differences stood out in line and
structure and material. The size alone would have been enough to
mark it as having come from outside this solar system. Yet without
bulkheads, without bracing, the mass of it loomed as one incredibly
vast and far-spreading room—an engineering feat to stagger man's
imagination.
And here, too, were the primitives, heirs to Womar's scorched,
windswept deserts. A thousand strong—ten thousand—they packed
the huge hold in a screaming, seething mass, metal masks hideously
aglint in the streaming sunlight.
But for Jarl Corvett, ship and primitives alike were mere incidentals.
Swaying, staring, he could find eyes only for one thing: the robots.
The robots—! He rocked—incredulous, unbelieving.
But here they were—metal monsters that towered rank on rank in
this great hold, like monstrous originals of the figures in Ktar
Wassreck's workshop. Like a forest they rose ... a forest of utter,
malign menace.
Their feet alone stood higher than a tall man's head; and the glinting
orientation-slots of the great head-units towered so far above the
crowd as to have been beacon lights on distant mountains.
Chill, unmoving, they stood here in the hull of this shattered ship as
they had stood for ages. But where ship and fittings were decaying,
these mighty warriors still shone resplendent, fabricated of some
different, finer metal. Strength gleamed in every line of their orange-
gold figures. The screaming primitives were only ants that crawled
and danced and raged upon them.
Staring at them, Jarl Corvett could only choke and tremble. There
was room for but one thought within his reeling brain: Wassreck was
right—! He was right! He was right...!
It made this whole mad gamble worth the while. Even if he died
here, all his efforts unavailing, it would still be worth it.
And what could not an army of these giant automatons accomplish?
What chance would even the mighty Federation stand against them?
It was destiny. More surely even than he knew his name, Jarl knew
that destiny had brought him here ... the strange, dark destiny of
courage and fighting men that ever seemed to ride on the side of the
outlaw worlds, and freedom.
But now that he was here, destiny would need a strong right arm to
implement it.
His arm.
He swung round, then, with his old, bold coat of arrogance upon him
—surveying his captors, searching for some faintest hint of hidden
weakness.
But the primitives did not waver. Their eyes stayed cold, leering out
at him from their metal masks, grim as the day of judgment.
Those masks.... With a sudden rush of recognition, it came to Jarl
that their stylized patterns were modeled after the head-units of the
towering robots.
Such a little thing, that recognition. Yet again, Jarl felt his tension lift
a fraction. He smiled a thin, wry smile and waited.
But now, to one side of the stage-like platform on which he and his
escort party stood, there was a sudden stir of motion. A new door
opened in what had been a bulkhead barring the way to another part
of the ancient, fallen ship.
A cry went up from the seething multitude. The mass of primitives
surged forward, close against the platform.
Slowly, creaking and groaning, a great stone slab was wheeled forth.
Its sides were deep-graven with carved figures ... strange, hideous
figures that writhed in ecstasy and anguish. Stains smudged its upper
surface. Heavy metal clamps, long age-corroded, were set into each
corner.
With a sickening jolt, it came to Jarl that it was an altar.
Straining and grunting, a crew of primitives tugged it into position in
the platform's center.
Jarl's captors gripped his arms.
The panting group by the altar straightened and hurried back through
the door in the bulkhead. Rattling sounds came forth. A moment
later, the primitives reappeared, rolling out a monstrous, shining
metal tub on wheels, big as one of the kettledrums of the spider men
of Rhea. Its sides were graven with the same contorted figures as the
altar.
The din of the crowd swelled louder. Masked primitives leaped and
screamed in impassioned frenzy.
Tight-jawed, Jarl waited.
The wheeled tub was set in place beside the altar. It moved easily
and smoothly. Then, again, the altar-crew retreated through the
bulkhead.
This time, when they returned, they bore a living, struggling creature.

Man-sized, the thing was like no animal Jarl had ever seen before,
with brown, bead-like skin and tiny brain-case. Off-hand, he judged it
to belong to some desert species native to this grit-drifted hell-hole,
Womar.
The primitives carried it to the altar; clamped its spradled body face
up atop the stone with the ancient shackles. The din of the crowd
was deafening.
Somewhere on high, a great gong sounded. The shouts and
screaming died away.
In the same instant, a new door opened in the bulkhead. Another
primitive stepped forth; paused, posing.
This creature's garb was different from the others! His metal mask
was ebon. So were his plumes, his girdle. A great scarlet jewel was
set in the forehead of the dead-black helmet. His hands were gloved
in sleek jet gauntlets.
Now, while Jarl watched, the posing primitive's arms came up, till the
gloved hands were high above his head, displayed, as if they were a
symbol.
The throng below stood frozen, rigid.
The black-masked primitive strode forward, to a spot between the
altar and the shining metal tub. Swiftly, he lifted the lid that capped
the drum-like vat.
Two of the altar-crew rushed forward and held it open for him.
Another held out a strange implement that, to Jarl, looked like some
crude sort of grease-gun.
The black-masked figure dipped the nozzle of the thing into the tub
and worked a plunger, then turned to the struggling life-form
shackled to the altar. Deftly, he stabbed the snout of the tool into a
spot below the creature's breast-bone.
The captive tried to jerk away, to no avail. With smooth precision, the
primitive in black pressed home the plunger.
A gusty sigh ran through the throng about the platform. It came to
Jarl that he was cold as ice despite the heat and blazing sun. The
musty, sweetish smell he'd caught before swirled about him, even
stronger.
The black-masked figure straightened. With quick, sure movements,
he twisted at a fitting, then lifted away the tool. The nozzle he left
sticking in the creature on the altar. It thrust up from the hollow
below the breast-bone like the hilt of a deep-plunged dagger.
The two primitives by the wheeled tub let the lid fall back. Turning,
one darted to the bulkhead door. When he came out, he bore a
flaring torch.
New silence fell upon the crowd, so complete that the altar-
crewman's footsteps rang and echoed in the stillness.
He passed the torch to his black-masked fellow.
Black-Mask swung the flaming brand on high and, turning, faced Jarl
Corvett. His voice thundered, harsh and guttural.
Jarl stood rock-rigid. The words he could not understand. But the
threat, the menace—they needed no translator.

Pivoting, the primitive stepped back from the altar; thrust out the
torch till its flame touched the tip of the nozzle protruding out of the
shackled prisoner's chest.
Of a sudden Jarl's whole body was drenched with icy sweat. He could
not move; he could not breathe. The tales of horror he'd heard so
many times swirled through his brain.
For an instant, nothing happened.
Then, all at once, there was a puff of sound, a flash of flame above
the captive. A great black jet of smoke shot high into the air, out of
the nozzle.
The life-form on the altar gave one shrill cry that was agony,
incarnate. Its body jerked and twisted, lashing against the shackles in
a frenzy.
The primitives went mad. The huge room rocked with their howls and
screamings.
But Jarl Corvett hardly heard them.
He'd seen cruel death before, on a dozen far-flung planets.
But this....
For while he watched, thin lines of fire were racing along the doomed
sacrifice's writhing body. In a spreading network, the flesh itself was
bursting open, flames leaping up in a thousand places.
In a searing flash, the truth came to Jarl: The creature's blood was
burning!
He sagged in his escort's grip, and retched—shock-stunned, sick with
horror.
But the primitives who flanked him jerked him upright. An open hand
stung his face with brutal slaps.
The spell that gripped Jarl broke. Numb, tight-jawed, he forced
himself to look again upon the altar.
The shackled creature lay there still, a charred, contorted horror.
While Jarl watched, the monster in the ebon mask stepped back and
passed the torch to the altar-crewman who had brought it. Other
primitives unclamped the gyves and dragged the corpse away.
Again Black-Mask brought up his hands. Again the crowd's
tumultuous hubbub faded.
Black-Mask's hands came down. He swung about till he faced Jarl.
Imperiously, he gestured.
Jarl's captors dragged him forward. The torch-bearer stepped quickly
back, out of their path.
Fear was in Jarl Corvett, then—a fear that verged on shrieking terror.
His body seemed like a thing apart—a statue carved from living ice,
with no relation to his being.
But hate came with the terror, a flaming hate that grew at every step,
till its white-hot fire ate up the fear and burned away his sickness and
his trembling. Of a sudden he was himself again. He sucked in air.
Without volition, his muscles stiffened against the digging fingers of
his savage escort.
They jerked him up short before the altar. The black-masked figure
shook a jet-gloved fist and shouted guttural imprecations.

The last shreds of Jarl's terror vanished, washed away in the flood of
his tormentor's fury. Out of nowhere, a thing that Wassreck once had
said came flashing to him: Hate is the face of fear, not courage.
That hate which showed in the primitive's every line and gesture—it,
too, was born of terror ... a welling fear of all and any beings who
came down from the skies to Womar.
Jarl laughed aloud, it was so funny—that he and this other should
face each other so, in deadly menace, when within they were only
quivering twins of terror.
And as he laughed, his own hate died the same swift death to which
his fear had fallen. A grim, bleak poise replaced them both. For if the
primitives, in their hearts, felt the self-same fear that he had, there
was still a chance for recklessness to blaze a path through this
wilderness of desperation.
His laugh cut short the black-masked figure's shouting. The primitive
stared at him, as if unbelieving.
Cold-eyed, cold-nerved, Jarl drew himself to his full height. Rigid, he
probed for some—for any—last wild gambit.
But Black-Mask, too, was straightening. He cried out fiercely to his
helpers.
They shoved Jarl forward.
As they did so, the primitive beside the huge, wheeled tank lifted up
the lid.
Jarl glanced down into it.
The vat was full. The awful broth almost lapped the brim. From it, in
sickening waves, rose the sweetish, cloying fumes Jarl had come to
associate with the primitives.
Black-Mask leaned forward. Shouting again, he lashed out. His jet-
gloved fist raked at Jarl's face.
Instinctively, Jarl rocked back. New tides of black despair washed
through him. What could he do, locked in his captor's grasp, hemmed
between tank and torch-bearer, black-masked fiend and blood-
drenched altar?
Tank—and torch-bearer—!
That link ... in an instant it grew to a searing, surging flame, hotter
even than these creatures' own hell-fire brew.
Spasmodically, Jarl twisted round.
The primitive with the blazing brand still stood statue-like at the
corner of the great stone slab.
Black-Mask snarled another order. His henchmen jerked Jarl back—
lifting him, swinging him upward, till he hung suspended above the
altar.
By instinct, Jarl wrenched against them; felt them, too, stiffen in the
face of his resistance.
But if he could not fight them, perhaps there was another way....
Before they could lower him to the slab, he let himself go limp, loose-
limbed and unresisting as any corpse.
It broke their balance. He hit the stone with a sodden thud ... lay
there unmoving, head lolled back.
For the fraction of a second their grip relaxed.
It was Jarl's moment.... Savagely, then, he lashed out with all his
might, in a violent spasm of arms and legs and torso. His feet
smashed the metal mask into one primitive's face. His elbow sank
fist-deep in another's midriff.
The restraining hands fell from him.
Desperately, he threw himself across the altar, toward the torch-
bearer. Before the creature could recoil, Jarl was upon him—smashing
him down with fists and knees and shoulders; snatching the flaming
brand out of his hands.
Falling over each other in their haste, the others lunged to seize Jarl.
But instead of fleeing, he leaped back onto the altar. There was a
prayer in his heart—his heart in his mouth. With a wild curse, he
hurled the torch straight for the vat of hell-broth.
It struck the open lid, then plunged on down into the liquid.
But even as it fell, the fumes were flaring. Flame and smoke leaped
up in a roaring column. A cloudburst of liquid fire sprayed out in all
directions.
The cries of the primitives exploded into one great scream of pain
and terror. As Jarl threw himself flat, with the altar-stone between
him and the tank, he glimpsed the reeling, flame-cased figure of his
jet-masked tormentor—stumbling, falling.
Then the black smoke billowed out in nauseous, all-obscuring murk
that swallowed even the thundering holocaust that still roared around
what had been the tank of liquid.
Jarl rolled from the wheeled platform on which the altar rested. Bent
double, he raced through the choking haze for the bulkhead. In
seconds, he was fumbling his way along it to the nearest doorway ...
slipping through and ramming the heavy bolt home behind him.
Ahead, a shaft and spiral stairway loomed. Panting, he sprinted
upward, past level after level.
The stairway ended against another metal door.
The outlined figure of one of the mighty warrior robots was blazoned
on it.
Jarl's heart pounded harder.
Shoving open the hatch, he half-fell inside and locked it, too, behind
him.
He found himself now in a control room. Panels thick with dust lined
three of its walls. The fourth was a single massive, transparent,
plastic plate through which occupants could look out across the great
hold where the robots were massed ... where brief moments before
Jarl Corvett had stood face to face with hideous death.
Stumbling to it, Jarl stared down upon the smoke-smirched scene
below. Flames still were leaping about the platform. Here and there,
he could catch dim glimpses of primitives' hurrying figures as they
ran among the metal monsters.

Overhead, the dense black smoke almost hid the roof. Eddying,
slowly rising, it swirled out through the cracks and rifts in the ancient
hull, up into the blazing, sunlit heat of Womar's desert sky.
Of a sudden Jarl was weak to the point of sickness. Numbly, he
turned and surveyed the rest of the control room with a closer
scrutiny.
Bank after bank of dials and indicators marked with strange symbols
leered down at him like a host of huge blank eyes. Against the far
wall, units with focussing plates like the viziscreens of his own solar
system were ranged in a precise row.
And everywhere—on every panel, every instrument—were stamped
neat, stylized images of the warrior robots.
The numbness in Jarl grew. He knew instinctively, without question,
that this was the place sought by Ktar Wassreck—the brain, the nerve
center, for the shining metal monsters that were to have saved the
warrior worlds.
But now that he was here, what could he do? His own ignorance was
a tight-drawn, all-concealing blindfold.
With time enough, and skill and patience, he might perhaps have
worked his way through to an understanding of how the robots were
controlled. But time was the one thing he did not have. Second by
second, the precious hours were ticking by. As far as he was
concerned—lacking knowledge, training, understanding—he might as
well have been on Venus.
And so the warrior worlds would die. The Federation fleet would
sweep down on Ceresta.
Already, the three days given by rey Gundre were running out....
Jarl shook in the grip of helpless, frustrating fury. He had come so
far; yet now that he was here, he could do nothing.
He cursed aloud; and as he did so, a new sound drifted to him.
A familiar sound ... the sound of a space-ship's blasting rockets.
He whirled; leaped back to the broad expanse of transparent plastic
panel.
He reached it just in time to see a great section in the top of the hull
above the hold suddenly buckle and crash down. Sunlight streamed
through smoke and dust.
The roar of the blasting rockets echoed louder. A moment later,
another huge chunk of hull tore loose and fell. Then another, and
another, till the hole showed like a spreading canopy of sky above the
robots.
Below, the last of the primitives were fleeing. Breathing hard, pressed
tight to the observation panel, Jarl watched and waited.
The rocket-roar took on the peculiar whistling sound that went with
ramping. Before Jarl's eyes, a ship dropped down stern-first into the
hold and rocked to a landing amid the debris and towering robots.
Now the ship, as well as the sound, was suddenly familiar.
Too familiar.
It was the flagship of High Commissioner rey Gundre's mighty
Federation fleet!

CHAPTER IX

Jarl Corvett lay flat on his belly on the floor of the room that housed
the brain of the warrior robots, staring bleakly down into the hold
below.
Then, again, he twisted, shifted. This endless waiting—it was enough
to drive a saint to murder.
How long had it been—two hours—or two eons?
It was a time for thinking—because there was nothing else to do but
think. Escape was not even a thing to dream about by daylight, with
primitives still roving through these warrens. Tonight, perhaps, a man
might find a way; but for now there was only ... thinking.
So Jarl lay there on the floor, sweating and shifting. Narrow-eyed, he
studied the motionless bulk that was the flagship, and asked himself
a thousand questions.
Questions he could not answer.
Why would rey Gundre, of all the players in this mad drama, come
roaring down on Womar? What did he seek? How had he found his
way here?
Above all, what was he waiting for this way—jets dead and hatches
still unopened?
And for him to pick the robot-hold of this ancient ship to land in....
Unless, by some wild chance, Ktar Wassreck had escaped—
Even the thought made Jarl's heart leap.
But then it quieted down again, drained by the dark, dull
hopelessness within him.
The time for dreams was dead and gone. For all his bravado and
boasting he, Jarl Corvett, had failed the man who'd come for him on
Horla. By now, at best, Ktar Wassreck lay a corpse in the chill horror
of Venus' slan-chambers.
Pain welled up in Jarl, and with it came new sickness. Choking, he
buried his face against his arms and cursed the day his mother bore
him.
But his mind would not stay still. Drearily, he thought about the
others.
About Ungo and Ylana, Bor Legat, Sais....
It only brought new anguish. For he'd failed them, too; failed them
one and all ... Ungo, friend of friends, who'd trusted him beyond all
others ... Ylana, vision of golden loveliness—betraying her world and
her own father just to save him ... Bor Legat of Mercury, murderous
and merciless, yet loyal in his twisted way to the raider cause.
And Sais.
Dark Sais, Ktar Wassreck's daughter. Even in this place, Jarl could
recapture the fragrance of her hair, the pulsing pressure of her
perfect body. She was all woman....
And all Jarl Corvett's.
So he'd brought her down to this wild world and left her to the
mercies of Tas Karrel's raider rabble.
Cursing again, he writhed about and once more stared up at the
banks of panels.
But that was all that he could do. He did not even dare to rise and
experiment with the controls spread out before him, for fear someone
below would glimpse the movement.
Then, from the hold, there rose a sudden clatter.
Jarl swung back to the plastic window, craning and peering.

Below, the main hatch of rey Gundre's ship was opening. Blue-
uniformed Federation crewmen poured out, weapons glinting, and
took up positions amid the debris.
In the same instant, the high whine of a light, fast-traveling carrier
cut through the hold.
A moment later, a slim, swift craft dropped through the gaping hole in
the ancient hull and set down for a landing.
Its prow was marked with Bor Legat's black lightning-flash insignia.
Incredulously, Jarl dug his nails into the plastic.
The carrier came to rest. Its hatch swung open. A burly dau leaped
out.
Instantly, the Federation crewmen came to their feet and crowded
round.
But the dau ignored them. Turning, he gestured to someone still
inside the carrier.
Another figure dropped down ... a figure with shimmering golden hair
and a scarlet tunic that emphasized the slim, ripening womanhood of
the one who wore it.
Ylana—!
Jarl caught his breath. His palms were suddenly slick with sweat, the
muscles of his chest constricted.
While he watched, the girl moved calmly to the Federation flagship.
The dau swung back aboard the carrier. The hatch clanged shut. A
moment later, the craft was in the air again, lancing out of the
ancient hull and away.
Ylana disappeared into the flagship.
Jarl sank back, trembling. Brow furrowed, lips dry, he tried to make
sense of this new maneuver.
It was plain now what had happened to the girl, and Ungo. Bor Legat
had captured them that night, back on Ceresta. Now he was carrying
out his plan to trade her life for time, and the desperate chance that
somehow Ceresta might be defended.
But why should he meet rey Gundre here? What had led the two of
them to choose this shattered hulk for their rendezvous?
Jarl looked down once more.
More crewmen were hurrying from the flagship—clearing the debris
from around the ramping-spot; setting up a perimeter studded with
heavy weapons.
They planned to stay a while; that much was plain.
But why? Why, why, why—?
The question rang in Jarl's brain like a tolling bell. But he still could
find no answer.
Another hour dragged by. Slowly, the shadows of ship and robots
lengthened. Hunger gnawed at Jarl's belly. He moved this way and
that, trying to work the ache from his weary muscles.

Down in the hold, the crewmen moved more slowly. Yet even up
here, high above them, Jarl could sense a rising tension. It showed in
the way they kept looking towards the burrows into which the
primitives had fled ... their sudden starts, their readiness with their
weapons.
He hunched forward, narrow-eyed, resting his weight upon his
elbows.
Then there was a flurry about the hatch as a Thorian officer barked
orders. The crewmen snapped to smart 'attention'.
A moment later rey Gundre himself strode down the ramp, a lean,
imposing figure. Ylana followed, close behind him.
Together, they moved about the perimeter's defenses, then started
back towards the great ship's hatchway.
But now Ylana hesitated, and there was a brief moment of
discussion. The golden hair rippled as she shook her head and
gestured.
Her father's shoulders lifted in a shrug. Pivoting, he went on up the
ramp without her.
Ylana turned. Almost aimlessly, she wandered out among the robots;
paused and leaned back against a gigantic metal foot, watching the
blue-uniformed crewmen as they toiled and sweated.
The shadows grew longer. The crewmen ceased to heed her
presence.
She moved, then, swiftly, silent as the deepening dusk—sliding
around the foot in one quick motion; darting past an unmanned post
of the perimeter defenses to a spot out of view amid the tangled
debris.
Jarl went rigid. Twisting, he worked his way along the observation
plate to a place where he again could see her.
But already she was on the move again, creeping on hands and
knees, farther and farther from the flagship.
Where was she going? Why had she broken out of the circle?
And what if the primitives should catch her?
The thought brought Jarl to his feet, shuddering.
Besides, with the thickening gloom down in the hold, perhaps this
time he could get an answer to his questions.
With one last glance to chart the course that the girl might follow, he
ran to the door and threw back the bolt; then slid out and felt his
way down the black well that was the spiral stairway.
In seconds he was at the bulkhead door. Opening it a crack, he
weighed his chances.
The crewmen still were busy with their tasks inside the network of
defenses. The pools of shadow hung all-enshrouding. Flat on his
belly, he wriggled forth and crept along the wall in the same direction
he'd seen Ylana take.
Out here, once more he caught the cloying, sweetish scent of the
hell-broth, mixed with smoke, and the knot in his belly tightened. The
shadows loomed like grim reminders of the primitives' dark fury.
He moved faster.

Back around the ship, a ring of blinding lights came on as if to


emphasize the death that lurked in the outer darkness. Jarl surged to
his feet. Stiff with tension, he searched the gloom for some hint of
Ylana.
Off to the right, close by the bulkhead, a dull sound rang, as of some
object striking metal.
Groping, Jarl found a broken brace-bar to serve him as a weapon.
Wary, taut-nerved, he worked his way towards the spot from which
the noise had come.
But he found nothing. Grim recognition of the hopelessness of his
task crept through him.
He fought it down. Swinging round, deliberately, he kicked a
crystalizing metal plate fallen from the great hull's roof.
The sound echoed, loud and startling in the silence. Jarl stood stock-
still, straining his ears for some reaction.
So close at hand it made him jerk, there was a sudden rasp of
movement.
Heedless now of noise, Jarl sprinted towards it. In a mighty leap, he
cleared a heap of black-scorched litter.
Ylana crouched beyond it. Face a white blotch in the murk, she
started up as he made the hurdle. Her mouth came open. He could
hear the first whisper of a scream rising in her throat.
Savagely, he jammed his open palm across her mouth and swept her
to him, smothering her kicks and blows and struggles. Lips close to
her ear, he rasped, "Ylana! It's me—Jarl...."
He could feel her muscles contract, her body stiffen. Then, suddenly,
she was limp in his arms—clinging to him, half-sobbing.
"Quick! We've got to move!" He dragged her with him, on along the
bulkhead, then off amid the black mass of the debris.
Halting, finally, once more he strained his ears, listening for any hint
that they'd been heard and followed.
But none came. At last, relaxing, he let go of her and slumped down
into the drifted sand and litter.
He could feel the girl's eyes on him. But he held his silence.
"Jarl Corvett ..." she choked. And then, in a rush: "Thank the Gods
you came, Jarl; so glad...."
She dropped down close beside him, her shoulder pressing against
him, her hand on his.
Turning, he studied her.
The grey eyes were black-shadowed, her lovely face deep-lined.
Of a sudden he wanted nothing so much as to embrace her.
But there were so many questions to be answered....
He flung them at her bluntly: "Why did they come here, Ylana—your
father; Bor Legat? What brought them down to Womar—to this
ship?"
He could see her soft lips quiver. For an instant the grey eyes
wavered.
But then they raised again and met his gaze. She said: "My father is
a traitor, Jarl Corvett—a traitor to himself and all the things he
believes in, and to the Federation."
Jarl stared, unspeaking.
The girl's mouth worked. Her fingers gouged his hand.
"Jarl—oh Jarl...." Agony was in her voice. "Before, I told you how
he'd loot Ceresta. Now—now he's gone the whole way. He dreams of
still more power—of carving out an empire, destroying the Federation
with its own fleet. His orders—I learned today they were to arrange a
truce and spare Ceresta, give the asteroids their freedom and bring
them into the Federation on even terms. But he's beyond that. All he
can think of is loot and power, destruction. He's mad—mad, Jarl;
stark, raving mad...."
The girl's voice broke. Sobbing, she buried her face against Jarl's
shoulder.
Hard-jawed, tight-lipped, he held her close. But he did not dare let
feeling touch him. Not now, with time so short; so much at stake.
If the asteroids could hold their freedom, even in the Federation; if
Ceresta and the raider fleet were only spared....
"And you—?" he clipped. "Where were you going? Why did you try to
run away?"
Ylana lifted a tear-smudged face. All at once her chin was firm, and
her lips no longer trembled.
She said: "Once I would have betrayed him for you alone, Jarl
Corvett. This time, I came to do it for the Federation—and for
freedom."
"You mean—?"
Her laugh held bitterness and pain. "The fleet commanders do not
know my father's orders. I thought to reach Bor Legat's ship and
warn them."
"Then Legat—"
"He came here only to bring me to my father, in hopes that he could
save Ceresta. He'd channel a message through his viziscreen."
Jarl's breath came faster. There was a pricking and tingling along his
spine.
He let go of Ylana; surged to his feet.
The girl rose, slim and straight beside him. "Yes, Jarl—?"
Jarl laughed, deep in his throat. Suddenly hunger and fatigue and
pain were nothing. He saw only his dreams, his goal. "I'll get to
Legat, Ylana! By all the gods of the void, I swear it!"
Her words came, swift and eager: "And I'll go with you—"
"No, Ylana—"
"Yes!" Fists clenched, face tight with strain again, she stepped back
from him. "I've earned the right, Jarl! You can't leave me!"
For a long, long moment, he looked deep into her eyes. There were
so many things to see there—courage, and anguish; fierce loyalty,
determination, pain.
She hurled words at him—commanding and entreating: "You'll need
me, Jarl! You can't find Legat's ship without me. It's close—it and the
Knife. We can reach them by the time it dawns, if we go together—"
Still Jarl stared into her eyes, unspeaking.
She broke off. Her hand came up, swept back the rippling golden
hair. Her throat was a smooth-carved ivory column, her face a lovely
mirror of the things that shone deep in her eyes.

Slowly, Jarl smiled. He knew there was no need for other answer. And
words could be such futile, empty things.
Her hand in his, together they crept on through the debris; up
through a broken port set high in the side of the ancient hull.
Then they were out at last, into the windswept wastes of Womar's
deserts ... stumbling on through the sand and rocks, mile after mile.
They had no breath for talk, no time for resting. A pause might bring
the primitives down upon them.
Jarl gripped his brace-bar club and prayed.
Then light came dimly, herald to another blazing desert day. But with
it, too, rose the lance-sharp outlines of the prows of two great raider
ships, ramped amid a wilderness of jutting crags.
Jarl's heart leaped. Quick jubilation surged within him. "Ylana—!"
The girl screamed.
Jarl whirled—club up, fists clenching. "What—?"
But again, there was no need for words, for the girl was pointing
back across the endless, dust-deep waste through which they'd come
to an ominous moving figure.
The figure of a mighty warrior robot, a metal giant that loomed like a
monstrous, man-made nightmare against the clear blue of the
morning sky.
Jarl rocked—incredulous, unbelieving. His club-arm sagged down to
his side.
With every fleeting second, the metal monster towered still larger,
closer. Its massive legs swung out in wallowing, league-long strides,
closing the gap between them.
Ylana cried out again. She darted to Jarl; clung close against him,
shaking like a slim reed in a wind.
He tore free from his shell of shock and frozen-fascination. Sweeping
the girl up, he raced for the nearest outcropping of jagged rock.
The giant from beyond the void stalked nearer. The clanking of the
great joints rolled down on them like distant thunder.
Ylana sobbed, "My father—he must have found that I was gone—"
Jarl did not answer. Drawing her down behind the rocks, he waited,
as for the Juggernaut of fate itself.
The monster thundered closer, great feet grinding stones to powder
with every stride. The rising sun's rays transformed the mighty,
gleaming torso to a living statue carved in orange-gold fire.
Ylana shook with a new wave of paroxysmal panic. It took every
ounce of Jarl's control to hold himself from leaping up and running—
tearing his heart apart in one last frantic, desperate flight.
But what good would it do to run, when this monstrous menace could
overtake and pass him in a single stride?
Heart in his throat, he pulled Ylana close against him and waited in
rigid, aching tension for his doom.
Another clanking step ... another; and the robot towered above
them, mountain-high.

Jarl's straining muscles cramped with pain. In awful fascination, he


felt the robot's shadow fall across them; watched as a gigantic foot
came down. The very ground shook. Dust spurted in a smothering
cloud.
It was as if death, personified, looked down upon them.
And then, incredibly, the ponderous leg swung out again—swept over
them, past them, and crashed to earth again beyond.
Another step. The shadow lifted.
Jarl raised his head; stared, still not believing.
But the robot was still moving on—on, through the bleak crags and
the wastelands.
On, towards the place where the prows of the space-ships stood out
against the sky.
Straining his eyes, Jarl could see tiny figures running, the headlong
rush of panic in their stride.
But the robot was striding faster.
A roar of rockets echoed dimly. As one, the Knife and Bor Legat's
Lightning blasted up into the sky.
But already the robot was leaping, pivoting, with hideous, awkward
grace that spoke of awful strength beyond man's feeble
understanding. Great, gleaming metal hands shot out and seized the
Lightning in mid-air. A lance of light blazed from the force-spot in the
forehead and blasted the Knife to shattered fragments before it
cleared the rocks.
And even as the light-beam struck, the mighty arms were levering.
The Lightning's hull-beam cracked and splintered. The body parted in
a spray of shattered shards and clawing, falling crewmen.
Then it was over. With savage force, the robot hurled the broken ship
to the ground ... trompled the shattered hull-sections into the dust.
Ylana clung to Jarl—choking, crying, whole body shaking. Tight-
lipped, holding her close, he pressed back against the rocks, so hard
the ridges gouged his flesh like blunt-edged bayonets.
The metal giant was turning, now. Again its great feet clanged and
thundered. Back it came once more, along the same road that had
brought it to its terrible festival of carnage and destruction. Again, its
shadow swept past Jarl and Ylana, not even pausing. Slowly, the
thunder of its footsteps faded. The massive hulk grew smaller,
smaller, in the distance.
Then it was gone. Heavily, Jarl Corvett struggled to his feet. Slowly,
grimly, he turned.
Ylana's reddened eyes met his. "Jarl—! Where are you going?"
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like