Skip to content

jump the queue design

Helmke edited this page Oct 2, 2019 · 13 revisions
scene

Introduction

When visiting public (free) or private (paid) events there are often large queues creating significant waiting times. Ideally the organizer of the event would like to streamline the entry of people. That would be possible by allowing people privileged access or, alternatively, offer an incentive for people to arrive in time or to get into line more efficiently. A way of doing this would be to have a website or application which would allow visitors to "Jump the Queue". This document describes the design for such an application: “JumpTheQueue”.

Note

Note that the document is intended to reflect a hypothetical but real use case. The design reflects this by trying to be complete. But the implementation is simplified in order to serve as an example. Where implementation differs from design, this is noted with an icon or symbol like : ⇒ and a comment about the nature of the difference.

Visitor Stories

As a < type of user >, I want < some goal > so that < some reason >

Epic: Register Event

As a visitor to an event I want to be able to visit a website or use an app - called JumpTheQueue, which provides me with a code (and optional date/time) after registration so that I can get a privileged access to the event

User Story: register

As a user of JumpTheQueue, I want to register with my name, password, username, Phone number so that I comply with the requirements to obtain the access code

Acceptance Criteria

A full name is mandatory. username, name, password and telephoneNumber must be valid. Validation is a separate, asynchronous process.

US: terms and conditions

As a user of JumpTheQueue, I accept that the organiser of the event can store my personal data so they can send me commercial notices (“spam”)

Acceptance Criteria

As a user of JumpTheQueue, I want to accept the terms and conditions by using the corresponding checkboxes.

US: Join a queue

As a visitor of JumpTheQueue i want to be able to see the ticket number that is currently being attended and be able to join the queue.

US: List queued visitors

As a visitor of JumpTheQueue with a ticket, i want to see which ticket number is being attended and my ticket number. Optionally, I want to know the estimate time that remains in order to get attended.

US: Leave the queue

As a visitor of JumpTheQueue i want to be able to leave the queue.

Etcetera

As a user of JumpTheQueue, I have to confirm either Email or Phone number by replying to a message send to the account if entered so the data can be verified.

⇒ this is not further developed nor implemented

As a visitor , I want to go the the privileged access queue with my valid (i.e. validated) access code so I can get direct access.

⇒ this is not further developed nor implemented

UI

Flow

The basic flow of the application can be:

flow
  • Fill in a form to give your name and private data and then press a button with “Register”

  • In case of validation errors, an error message will be shown

  • If there are no errors then an Access Code will be generated which will be shown on a next page. The access code can optionally be provided with proposed access time.

  • From this page you can show a view of the current Queue, with the list of people queued

Mock-ups

mockups

Model

model
event

⇒ the Event item is not further developed nor implemented

Predicates

Definition
< function name > = < parameters > => < *pure* function >
or
< function name > = trivial : < trivial description >
isnull = (v) => v === null
notnull = (v) => !isnull(v)

isempty = (s: string) => s.length === 0
notempty = (s: string) => !notempty(s)

isEmailAddress = trivial: notnull + notempty + consists of <name>@<domain.toplevel>

isTelephoneNumber = trivial: notnull + notempty + consists of sequence of numbers or spaces (i.e. “4 84 28 81”)

Types

Definition
type < alias > :: < type defs > with predicated: < list of predicates >
or
type < alias > :: trivial: < trivial description >
type ID :: trivial: Unique Atomic Identifier

type NamedItem :: string
with predicates: notnull, notempty

type EmailAddress :: string
with predicates: isEmailAddress

type TelephoneNumber :: string
with predicates: isTelephoneNumber

type Option<T> :: None | T

type Result<T> :: Error | T

type Error :: trivial: Error information with code & error description

Entities & Value Objects

Visitor (Entity)

Field

Type

Id

ID

Username

NamedItem

Name

NamedItem

Password

NamedItem

PhoneNumber

Option<TelephoneNumber>

AcceptedComercial

boolean

AcceptedTerms

boolean

UserType

boolean

AccessCode (Entity)

Field

Type

Id

ID

Ticketnumber

NamedItem

StartTime

Option<DateTime>

EndTime

Option<DateTime>

StartTime

Option<DateTime>

Visitor

NamedItem

Queue

NamedItem

DailyQueue (Entity)

Field

Type

Id

ID

Name

NamedItem

Logo

NamedItem

AttentionTime

Option<DateTime>

MinAttentionTime

Option<DateTime>

Active

boolean

Customers

NamedItem

There must be a 1 - 1 relationship between a Visitor and an VisitorTicker.


Next chapter: devon4j Getting Started