Unambiguous System Architecture

What is it?

The System Descriptor

Jellyfish contains the System Descriptor (SD) language that is an Architecture-as-Code construct modeled after the DevOps Infrastructure-as-Code paradigm that streamlines the flow from Development to Operations. The System Descriptor streamlines the flow from System Engineering to Development.

The System Descriptor is a collection of machine and human readable plain-text files that will enable new constructs for maintaining vertical (i.e., its top-down structure) and horizontal (i.e., how components interact with one another) traceability, quality assessment of architecture and design, and automation system acceptance tests. This is all to increase predictability and reduce risk within small-batch Agile program execution environments.

The Command Line Interface

Jellyfish is also the name of the modular command line interface (CLI) that can parse a System Descriptor model and produce artifacts from it. The CLI has an extensible command library that currently contains commands that can verify syntax and patterns, generate code and produce static reports.

The entire Jellyfish product is extensible so you can use only the features you want.

Why did we create it?

The SD language builds upon the concept of Infrastructure-as-Code with the idea to create an "Architecture-as-Code" approach to system engineering and modeling. By utilizing this "Architecture-as-Code" technique, the flow from systems engineering to development can likewise be improved.

The SD model describes how the system is to be decomposed, the responsibility of the system, how the system will be tested, and how the system is deployed. This makes it possible to create another type of pipeline from system engineering to development. This pipeline can only be possible if there exists some model that describes the design of the system. The System Descriptor model is therefore the source artifact from which numerous other types of artifacts can be created. These artifacts can be generated using the Jellyfish CLI and evaluated as part of a pipeline.

In short, we wanted to have an architectural tool that can be:

  • Fully configuration managed (including version controlled)
  • Used to provide a fail-fast approach to System Engineering
  • Used to faciliate rapid innovation and experimentation
  • Used to increase flow from Systems Engineering and Development
  • Used to faciliate and drive down-stream engineering
  • Used to provide traceablity between the architecture and what was actually built
  • Evaluated as a part of a continuous delivery pipeline

Architecture-As-Code

Example System Descriptor Model

package alarm

import alarm.Alarm
import alarm.AlarmController
import alarm.AlarmStatus
import alarm.Clock
import alarm.Time

model AlarmClock {
  input {
    Time alarmTime
  }

  output {
    Time currentTime
    AlarmStatus alarmStatus
  }

  parts {
    Alarm alarm
    AlarmController controller
    Clock clock
  }

  links {
    link alarmTime -> controller.alarmTime
    link clock.currentTime -> currentTime
    link controller.alarmStatus -> alarmStatus
    link clock.currentTime -> alarm.currentTime
    link controller.alarmTime -> alarm.alarmTime
    link controller.alarmAcknowledgement -> alarm.alarmAcknowledgement
    link alarm.alarmStatus -> controller.alarmStatus
  }

  scenario triggerAlarm {
    given haveReceived alarmTime
    when clockTicks to alarmTime
    then willPublish alarmStatus
  }
}

Read the Books

Modeling with the System Descriptor Jellyfish User Guide System Descriptor Best Practices