System modeling
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.