Below are the raw requirements approved by the client. This includes both client-side and server-side changes. Let's split this up into incremental changes.
After the requirements, I included some design considerations.
Core
Requirements
ID
Group
In order to...
as a...
I want to...
#R01
In order to centralize user accounts
as a publisher
I want my users to use a single Goliath account shared accross all apps
#R02
In order to play Triominos
as an existing player
I want my account to remain the same, only being rebranded a "Goliath" account
#R03
In order to play Triominos
as a new player
I want to register a new Goliath account
#R04
In order to understand Goliath accounts
as a Triominos user
I want minimal explaination on the login and signup screens
#R05
In order to play Word Search
as a Triominos player
I want to use my existing Goliath account
#R06
In order to play Word Search
as a new player
I want to register a new Goliath account
#R07
In order to activate Goliath accounts
as Triominos publisher
I want to submit a Triominos update
#R08
In order to play Triominos
as a Word Search player
I want to use my existing Goliath account
#R09
In order to understand Goliath accounts
as a Word Search user
I want minimal explaination on the login and signup screens
#R10
In order to appear the same on all apps
as a user
I want my avatar to be shared accross apps
#R11
In order to login with Facebook
as a Triominos user
I want to approve the Triominos facebook app
#R12
In order to login with Facebook
as a Word Search user
I want to approve the Word Search facebook app
#R13
In order to share data accross apps
as a user
I want my facebook connections from Triominos and Word Search to be linked together
#R14
In order to be incentivized to play Word Search
as a Triominos user
I want to receive triominos' gold coins when I login for the first time in Word Search
#R15
In order to change/recover my password
as a user
I want to receive an email with a new random password
#R16
In order to understand what is being said
as a user
I want to see all languages (including my own) next to each others in the email I receive
Everything that isn't in the list above hasn't been quoted for. Those are the only requirements.
NON Requirements
The below are things that we thought of as requirement. Those requirements added complexity might have a major impact on cost and schedule. They have been substitued with simpler solutions (even though less optimal).
ID
In order to...
as a...
I want to...
#Nr01
In order to benefit from my coins
as a Triominos user
I want to use Triominos coins from Word Search (and vice versa)
#Nr02
In order to change/recover my password
as a user
I want to receive an email with a link to a reset-password page
#Nr03
In order to change my password
as a user
I want the reset-password page to ask me twice about the new password
#Nr04
In order to feel confident
as a user
I want the reset-password page to have a minimum of style
#Nr05
In order to understand what is being said
as a user
I want the email I receive to be in my native language
Ground Work (#F0)
Many features below require a general upgrade of user profile handling:
an new version of the Edit Profile screen, that will allow to:
edit the username, email, country..
fill those in to upgrade from a guest to a registered account
new servers API for profile edition
upgraded general server management to allow change of username, emails, changes of guest status...
We do not want to duplicate the Ground Work cost on every feature that needs it. So it is extracted and only indicated as a required dependency for the features that needs it.
Guest Upgrade (#F1)
This feature allows a user to be promoted from a guest to a registered user, thus being able to make purchases and login from a new device with his account.
Requirements
ID
Group
In order to...
as a...
I want to...
#R49
#F1a
In order to edit in my account info
as an user
I want to use a form similar to the sign-up form
#R20
#F1a
In order to become a registered user
as a guest user
I want to see an "Upgrade Your Account" dialog when I click the profile button (see below)
#R21
#F1b
In order to fill in my account info
as an upgrader(*)
I want to use a form similar to the sign-up form
#R22
#F1b
In order to accept a guest upgrade
as a shareholder
I want the user to fill-in in their email address
#R45
#F1b
In order to prevent data loss
as an upgrader
I want to wait for the migration to be complete before using the newly registered account
#R46
#F1b
In order to prevent inconsistencies
as an upgrader
I want the app to forget everything it knew about the old "me" (the guest)
Notes:
(*)upgrader: guest user willing to upgrade to a registered account
Feature #F1 requires #F0
"Upgrade Your Account" dialog
It is a dialog opened when clicking the "profile" button from home screen. Here's the content:
As a guest user, you don't have a profile
Upgrade Your Account
Log Out
Cancel
More Fields (#F2)
Requirements
Notes:
Feature #F2 requires #F0
Group #F2a - Core & Signup Screen
ID
Group
In order to...
as a...
I want to...
#R17
#F2a
In order to reach users the correct way
as a shareholder
I want to force my users to fill in their country from the sign up form
#R18
#F2a
In know more about the users
as a shareholder
I want them to optionnaly fill in their year of birth from the sign-up screen
#R19
#F2a
In order to enforce valid input
as a shareholder
I want the country to be selected by the user from a list of options (see below)
#R47
#F2a
In order to enforce valid input
as a shareholder
I want the year of birth to be selected by the user from a list of options (see below)
Group #F2b - View Profile Screen
ID
Group
In order to...
as a...
I want to...
#R33
#F2b
In order to view my info
as a user
I want to see my country in the profile screen
#R34
#F2b
In order to view my info
as a user
I want to see my year of birth in the profile screen
Group #F2c - Edit Profile Screen
ID
Group
In order to...
as a...
I want to...
#R31
#F2c
In order to update my country
as a user
I want to access a form where I can edit my country from the profile screen
#R32
#F2c
In order to update my year of birth
as a user
I want to access a form where I can edit my year of birth form from the profile screen
#R48
#F2c
In order not to repeat my location twice
as a user
I want the current version's free-text 'location' to be replaced by the country selector
Group #F2d - Facebook Import
ID
Group
In order to...
as a...
I want to...
#R43
#F2d
In order to know Facebook users country
as a shareholder
I want to fetch locations from the users Facebook profile
#R44
#F2d
In order to know Facebook users year of birth
as a shareholder
I want to fetch dates of birth from the users Facebook profile
List of Countries options
BELGIE / BELGIQUE
CANADA
DEUTSCHLAND
ESPANA
FRANCE
NEDERLAND
POLAND
PORTUGAL
U.K.
U.S.A.
OTHER COUNTRY
Each country's name will be writen in the country's main language (or slash separated, like BELGIE / BELGIQUE).
Design will be similar to the language selection screen.
Editing the location from the profile screen will switch from a free-text to the country selector.
Year of Birth entry
The year of birth will be selected from a list of years (ranging from current year to 120 years ago).
Design will be similar to the language selection screen.
Edit Profile
This will open a screen similar to the Sign Up screen with the following differences:
password field replaced with a "change password" button
sign up button replaced with a "save profile" button
Note: "Country" will now replace the current "Location" field that used to be a free text in the profile screen.
NON Requirements
Changing the web admin interface to display users' country and year-of-birth
Exporting of users metadata
Change of Username (#F3)
ID
Group
In order to...
as a...
I want to...
#R39
#F3a
In order to change my username
as a user
I want to access an edit username form from the profile screen.
#R50
#F3a
In order to realize the importance of my decision
as a renamer(*)
I want to see a confirmation dialog before my change is submitted
#R41
#F3b
In order to invite a renamer(*)
as a player that used to enjoy playing with him
I want to user either the initial username (that I remember) or the new username (after I remember it)
#R24
#F3b
In order to keep my games
as an renamer(*)
I want in-progress games to be migrated to my new username
#R27
#F3b
In order to keep my invitations
as an renamer(*)
I want pending invitations to be migrated to my new username
#R28
#F3b
In order to keep my chat history
as an renamer(*)
I want it to be migrated to my new username
#R29
#F3b
In order to keep my coins and upgrades
as an renamer(*)
I want them to be migrated to my new username
#R30
#F3b
In order to keep my games archive
as an renamer(*)
I want them to be migrated to my new username
Note:
(*)renamer: user willing to change his/her username
E-mail with MailChimp (#F4)
ID
Group
In order to...
as a...
I want to...
#R35
#F4x
In order to opt-in for e-mail notifications
as a user
I want to tick a check a box in the sign up screen
#R36
#F4x
In order to send e-mail notifications
as a marketer
I want to use MailChimp
#R37
#F4x
In order to save time
as a marketer
I want opted-in users emails to be added to a MailChimp list automatically
#R40
#F4x
In order to protect my MailChimps' API access
as a shareholder
I want the link to MailChimp to be setup on the server
#R42
#F4x
In order to know Facebook users email
as a shareholder
I want to fetch emails from the users Facebook profile
Cross Requirements
Those are requirements to add when multiple features from above are wanted.
ID
Group
In order to...
as a...
I want to...
#R23
#F5a
In order to accept a guest upgrade
as a shareholder
I want the user to fill-in their country and (optionnally) date-of-birth
#R25
#F5b
In order to select a personnal username
as an upgrader(*)
I want a editable username field in the "Upgrade Your Account" form
#R26
#F5b
In order to keep my username
as an upgrader(*)
I want the username field in the "Upgrade Your Account" form to be prefilled with my current username, I can keep it unchanged
#R38
#F5c
In order to send targeted emails
as a marketer
I want opted-in users to be saved in my MailChimps list with their location
Feature Group #F5a - Guest Account + More Fields
Feature Group #F5b - Guest Account + Change of Username
Feature Group #F5c - More Fields + Mailchimp
Notes:
MailChimp expects GPS coordinates for the location (not a country), we will store the center point of the capital city of their country as a location.
Design considerations
Account sharing across apps
My idea is to have multiple ganomede-users servers with parent-child relationships.
Here are some illustrations.
server receives a request to change the usermeta country
if country is listed among parent metadata,
request is forwarded to the defined parent metadata server.
if country is not listed among parent metadata,
request is handled as usual, i.e. read/write from Redis usermeta
server receives a request to create an user account
if a parent account server is defined, forward it the request
if no parent account server is defined, handle the request (read / write from CouchDB)
server receives a request to validate an authentication token
if a parent auth server is defined, forward it the request
if no parent auth server is defined, check from Redis authdb
server receives a request to login with facebook
if a facebook application is configured
validate the facebook authentation token
fetch user data from facebook (including email)
connect with the account with given email (cf login/create account examples)
if no facebook app is configured, forward the request to the parent account server
This will allow to create complex settings with data specific to an app, shared across all app, or shared with just a group of apps.
Below are the raw requirements approved by the client. This includes both client-side and server-side changes. Let's split this up into incremental changes.
After the requirements, I included some design considerations.
Core
Requirements
Everything that isn't in the list above hasn't been quoted for. Those are the only requirements.
NON Requirements
The below are things that we thought of as requirement. Those requirements added complexity might have a major impact on cost and schedule. They have been substitued with simpler solutions (even though less optimal).
Ground Work (#F0)
Many features below require a general upgrade of user profile handling:
We do not want to duplicate the Ground Work cost on every feature that needs it. So it is extracted and only indicated as a required dependency for the features that needs it.
Guest Upgrade (#F1)
This feature allows a user to be promoted from a guest to a registered user, thus being able to make purchases and login from a new device with his account.
Requirements
Notes:
"Upgrade Your Account" dialog
It is a dialog opened when clicking the "profile" button from home screen. Here's the content:
As a guest user, you don't have a profile
More Fields (#F2)
Requirements
Notes:
Group #F2a - Core & Signup Screen
Group #F2b - View Profile Screen
Group #F2c - Edit Profile Screen
Group #F2d - Facebook Import
List of Countries options
Each country's name will be writen in the country's main language (or slash separated, like BELGIE / BELGIQUE).
Design will be similar to the language selection screen.
Editing the location from the profile screen will switch from a free-text to the country selector.
Year of Birth entry
The year of birth will be selected from a list of years (ranging from current year to 120 years ago).
Design will be similar to the language selection screen.
Edit Profile
This will open a screen similar to the Sign Up screen with the following differences:
Note: "Country" will now replace the current "Location" field that used to be a free text in the profile screen.
NON Requirements
Change of Username (#F3)
Note:
E-mail with MailChimp (#F4)
Cross Requirements
Those are requirements to add when multiple features from above are wanted.
Notes:
Design considerations
Account sharing across apps
My idea is to have multiple ganomede-users servers with parent-child relationships.
Here are some illustrations.
server receives a request to change the usermeta
country
country
is listed among parent metadata,country
is not listed among parent metadata,server receives a request to create an user account
server receives a request to validate an authentication token
server receives a request to login with facebook
This will allow to create complex settings with data specific to an app, shared across all app, or shared with just a group of apps.