Requirements Engineering for Software Systems

A Concise Guide to Modern Practices


March 19, 2024

Work in Progress

This online book is based on my requirements engineering lectures for MSc Software Engineering students at UCL.

It is a work in progress. All materials are in draft form and many chapters are yet to be written.

All comments, ideas for improvements, questions, requests for specific topics, or simply words of encouragement are highly appreciated! Please feel free to reach out to me via email at

About this book

This book is an introduction to requirements engineering for software engineers. It is composed of three parts:

  1. Foundations. The first part introduces the foundations of requirements engineering, defines technical terms, and discusses the various contexts in which requirements engineering takes place.

  2. Process. The second part describes the requirements engineering process split it into six phases: initiation, investigation, decision, formulation, quality checking, and evolution. For each phase, the book introduces the most common practices and present concrete guidance on how to apply them more effectively.

  3. Models. The third part describes requirements modelling languages commonly used in the requirements engineering process. Each chapter is a short guide on one modelling language and its variants. Each modelling language is defined precisely and accompanied with practical guidance and tips for its effective use.

Who is this book for?

The primary audience are computer science students at intermediate and advanced levels. The book assumes readers are familiar with the software engineering lifecycle and modern software engineering practices covered in introductory software engineering courses.

The book is also written for experienced software engineers, researchers, and academics who want to learn more about the current practices and latest ideas in requirements engineering. A lot has changed since the early days when requirements engineering was associated with the waterfall development process. Agile methods, the importance of product development over client projects, the challenges posed by legacy systems, the rise of AI, and the ever expending impacts of software on society mean that requirements engineering today is radically different than it was 30, 20 or even 10 years ago.

What readers will learn

In this book, readers will learn how to:

  • discover and analyse stakeholder goals;
  • understand the real-world contexts in which the software operates;
  • explore candidate solutions to satisfy stakeholder goals in their real-world context;
  • prioritize software features and quality requirements based on stakeholder goals and contexts;
  • formulate software requirements in a precise, readable, and testable way;
  • review and improve the quality of formulated requirements;
  • evolve requirements throughout the software lifecycle.

The book emphasises modelling as a means to enhance our natural communication and reasoning capabilities. The modelling techniques covered in the book include:

  • domain scenarios
  • context diagrams
  • domain conceptual models
  • goal models
  • requirements templates
  • specification by example

Other important requirements modelling tools such as process models, state machines, and temporal logic might also be added.

Relation to other books

The purpose of this book is to provide a concise, yet comprehensive and practical introduction to requirements engineering.

The content covers the best ideas from many other books. As a non-exhaustive list, this includes one of the main academic textbooks (Lamsweerde 2009), influential professional books covering the whole requirements engineering process (Robertson and Robertson 2012; Wiegers and Beatty 2013), and many excellent books covering specific requirements engineering techniques such as requirements workshops (Gottesdiener 2002), requirements management and traceability (Dick, Hull, and Jackson 2017), specification by example (Rose, Wynne, and Hellesoy 2015; Nagy and Rose 2018; Rose and Nagy 2021; Smart 2023), impact mapping (Adzic 2012), user story mapping (Patton 2014), and domain storytelling (Hofer and Schwentner 2021). In total, these books add up to nearly 5,000 pages. The goal for this book is to distill the most important ideas of requirements engineering (from the above books and more) in fewer than 250 pages in printed form — we will see if I succeed in this.

Another goal is to present requirements engineering ideas and techniques using precise and consistent terminology. One of the difficulties of learning requirements engineering from multiple sources is that important terms (like goals and requirements) are used inconsistently and not always well defined. Vagueness and inconsistencies are to be expected, and even welcomed, in a discipline as large and constantly evolving as requirements engineering, but this makes the topic hard to learn for newcomers. The book will guide readers through the requirements engineering terminology by clarifying core concepts and mentioning the many other terms by which these concepts are known in practice and other publications. This approach will also help readers understand the relations between requirements engineering techniques and how techniques can be adapted and combined to fit a specific situation.

I also hope this book will make you want to learn more about requirements engineering. For this, each chapter ends with notes about the origins of ideas, variants to these ideas, and pointers to the best resources for learning more about each topic.