System modeling

Lincoln Anderson
Lincoln Anderson
April 28, 2022

A system model is a conceptual representation of all the things in the system, free of any references to technology or UI design.

It can include:

  • Models: Things, their characteristics, and their states.
  • Relationships: How different models are associated with each other.
  • Calculations: Derived values, dependent on the models.
  • Tasks: Single information transformations or transmissions.
  • Processes: Complex sequences of tasks.

System modeling is the process of discussing and agreeing on these concepts as a product team. I believe that whether you’re a designer, developer, or manager, you should be an active participant in this exercise, because it will improve your ability to communicate and track what’s going on. Even if you're a solo dev, it can give you a great footing to start with.

Often in software development teams, people hyper-focus on screen designs or development lingo. Everyone in the room believes they are talking about the same thing, but in reality they are seeing it only through a narrow lens, and their view is often skewed or incomplete. This can lead to a fragmented approach where the pieces don't fit together, or a rigid result that is difficult to make changes to. Aligning on the system model separates key concerns, and gives you a solid, common foundation that anyone can build upon.

Our system model

Models

  • Timer
  • ~Timer Intervals
  • ~~a label (text)
  • ~~a duration (length of time)
  • ~Timer Events
  • ~~a type (eg "start", "stop", etc.)
  • ~~a timestamp (point in time)

Relationships

  • Each Timer can have one or more Timer Intervals
  • Each Timer can have one or more Timer Events

Calculations

  • Is a Timer currently running (or paused)?
  • What is the Timer's currently active interval?
  • Has a Timer completed?

Tasks

  • Create a Timer
  • Create a Timer Interval
  • Create a Timer Event

Processes

  • Create a Pomodoro Timer
  • Create a Custom Timer
  • Create a Kitchen Timer
  • Operate a Timer (eg. start it, stop it, reset it)
  • Watch a Timer's progress
  • Be alerted when a Timer Interval completes
  • Share a Timer

Note that nothing in the system model references any technology, software lingo, screens, or user-interfaces. There is nothing about databases, APIs, pages, devices, keyboards or clicks. It's all about conceptual models and what you can do with them on a real-world, human level.

Next steps

Once I have the beginnings of our system model, I can represent it in code, starting with the models and characteristics, adding on calculations and tasks, and then more complex processes. After that, user-interfaces are a matter of hooking up interactive elements to the system model in different ways.

« previous postnext post »