Skip to main content

Introduction and use case

This tutorial will guide you through the initial steps of designing and building a web-ready application named 'euRent', a car rental management system. We will use the Normalized Systems (NS) approach and NSX tooling such as NS Initializer and the Micro Radiant (μRadiant) modeler, to create a minimal implementation of an NS application.

The Normalized Systems Approach

The core motivation behind Normalized Systems (NS) theory is to create highly evolvable software by addressing the problem of combinatorial effects. A combinatorial effect occurs when the effort required to apply a change to a system increases disproportionately with the size of the system, a phenomenon that leads to the inevitable degradation of software over time, as described by Lehman’s Law of Increasing Complexity.

NS Theory mitigates this by applying core principles, including Separation of Concerns (SoC) and Data Version Transparency (DVT), to enforce a highly fine-grained modular structure. By using NS tools, we generate this modular structure automatically, ensuring the resulting application is inherently stable and evolvable, even as it grows to enterprise scale.

euRent: A european rental car booking platform

Before diving into the NS Initializer and μRadiant modeler, let's establish the system requirements for the 'euRent' application. This requires defining the following core data concepts: cars, customers, and the bookings that link them.

Defining data requirements (data elements)

In NS, every key data concept in the business domain is represented by a Data Element. For euRent, we require the following Data Elements:

  • Person: To manage customer details. (Attributes: firstName, lastName, birthDate)
  • Car: To manage the fleet inventory. (Attributes: brand, model, numberplate)
  • Booking: To track rental agreements. (Attributes: bookingNumber, startDate, endDate)

Defining business processes (flow elements)

The system must also implement specific business logic, which in NS are defined as Flows executed by Task Element. We will implement the following processes later in the tutorial:

  • Booking Validation: A check to ensure a chosen car is not already reserved during the requested period.
  • Booking Confirmation: The process of sending a confirmation message to the customer upon successful booking creation.

With the requirements clearly defined, we can now proceed to setting up the project environment using the NS tools.