Technical Requirements

In order to fulfill my goal of releasing something into the world, I decided to take advantage of the software engineering knowledge I already had:

  1. I would build an app for Mac OS X.
  2. It was clear from the beginning that the system would also require some back end systems work, and I had expertise using PHP and MySQL.
  3. The system would also require occasional SMS messages, so I would use Twilio.

Functional Requirements

Before starting on any wireframes, I wrote up a set of functional requirements:

User Accounts

  1. A user account is not required to use the application.
  2. A user account is required to network with other users through the application.
  3. Users must be able to create accounts.
  4. User accounts require a username and a password.
  5. User accounts can also include a real name.
  6. Users must be able to request their password to be reset.


  1. The app will track a user’s activity over a specified period of time (e.g., one hour)
  2. The app must keep track of the active application.
  3. If the active application is a browser, the app must keep track of the active URL.
  4. Every activity will be marked as distracting or not distracting.
  5. The user must be able to set whether an activity is distracting or not.
  6. The amount of time spent on non-distracting activities compared to distracting activities over the specified period of time will be the distraction level.

Distraction Catalog

  1. The system will periodically collect whether activities are marked as distracting or not.
  2. The collection will be used to determine whether activities are distracting or not by default.
  3. A user marking an activity as distracting or not will take priority over the catalog.


  1. Users can enter short descriptions of their progress throughout the day, called milestones.


  1. Users can follow other system users by username.
  2. Users must symmetrically follow each other to share data.
  3. Distraction level will be visible to users who follow each other.
  4. Milestones will be visible to users who follow each other.
  5. The app will provide a way for users to contact each other through other applications or media.


  1. Users can take breaks over the course of the day.
  2. The app will not track activity during breaks.
  3. Breaks will be limited in frequency and duration.


  1. A mini-visualization will be available that shows the distraction level over the specified period of time.
  2. The mini-visualization will appear every time the user switches activities.
  3. The mini-visualization will show whether the current activity is distracting or not.
  4. The mini-visualization will stay visible if the activity is distracting.
  5. The mini-visualization will hide if the activity is not distracting.
  6. If the user switches to a distracting activity, the mini-visualization will provide an option to return to the most recent non-distracting activity.

Main Window

  1. The app will have a main window.
  2. The main window will allow users to log in to their accounts.
  3. The main window will allow users to follow each other.
  4. Users will be able to enter milestones from the main window.

Distraction Level Visualization

  1. The main window will show a visualization of the user’s distraction level over the past day.
  2. The visualization will include the distraction level of followed users.
  3. Milestones (including those from followed users’) will be visible on the visualization.

Activity Visualization

  1. The main will include a visualization that compares the distracting and non-distracting activities the user participates in over the day.


  1. When the distraction level falls below a certain threshold, the app will prevent access to distracting applications. Users must be able to bypass the intervention.