Requirements, User Stories

== Requirements gathering for WebHob ==
Here's what we've come up with in gathering requirements and writing user stories in the London team for Web Hob 1.3. Right now the stories are broken up by role, with also the main function labelled alongside to make it easier to track where it is in the flow.
=== An explanation of user stories ===
We've written the requirements in the form of (agile) user stories. This is helpful from a design perspective to understand who needs to do something, what they need to do and why they need to do it. This is evident in the examples we've come up with below and gives context to each feature or function, making determining its validity and value a lot easier to justify.
In general, it follows this format:
As a role, I can feature so that reason.
Here's an example:
As a user, I want to search for my customers by their first and last names so that I can find other people easier.
http://en.wikipedia.org/wiki/User_story
Here's an article about the method:
http://www.codesqueeze.com/the-easy-way-to-writing-good-user-stories/
=== An explanation of roles ===
For the user stories we've come up with a number of roles that would be users of Web Hob. Most of them are pretty straighforward:
* Image Builder - A regular user of Web Hob how uses the tool to create images
* Image Builder New to Linux - A user who would like to create images using Web Hob but is new to Linux and its methods and conventions
* Architect - A systems architect who decides the direction of a project or product
* Team Member - A member of the team or group that is collaborating on creating images with Web Hob or related tasks
* Engineer
* Project Manager - The leader of a project using Yocto who is charge of the planning and delivery of the project
* Sysadmin - A systems administrator that manages the infrastructure for Web Hob and which resources and how much image builders can access.
== Comments ==
Please put comments in user story form in the table below. It would be extremely helpful if you could add an ID number to the first column as well.
If there are any additional comments that don't fit into the table or the format provided, please put them below.
== User Stories / Requirements ==
ID	Role 	Function 	Story 	New feature	Not in Hob 	Web Hob Requirement reference	Credit
1 	Image Builder 	Layers 	As an image builder I want to add my own layers so that I can create heavily customised images to suit my project. 	 	 	 	London team
2 	Image Builder 	Layers 	Ad an image builder I want to be able to add external layers so that I can get support for devices/software outside of the core metadata 	 	 	 	London team
3 	Image Builder 	Build an image	As an image builder I want to quickly create an image from default options so that I don't need to worry about customisation. 	 	 	 	London team
4 	Image Builder 	Projects 	As an image builder I want to save my image configurations so that I can reuse them at a later stage. 	 	Not in Hob 	 	London team
5 	Image Builder 	Testing 	As an image builder I want to be able to run a qemu* image after the build so that I can tell that it works. 	 	 	 	London team
6 	Image Builder 	Deployment 	As an image builder I want to be able to write images to removable media easily so that I can test the image on the real hardware (this can be hard to do manually). 	New 	Not in Hob 	 	London team
7 	Image Builder 	Build an image	As an image builder I want to be able to add things (functionality) so that I can customise my image to my needs. 	? 	 	 	London team
8 	Image Builder 	Recipes 	As an image builder I want to see the relationships between the recipes/packages so that I can better refine the contents of my image. 	 	 	 	London team
9 	Image Builder 	Dashboard 	As an image builder I want to be able to see the status of the build in real time so that I know what the progress is at any time. 	New 	Not in Hob 	 	London team
10	Image Builder 	Deployment 	As an image builder I want to download my image files so that I can deploy them and/or store them locally. 	 	 	 	London team
11	Image Builder 	Dashboard 	As an image builder I want to be able to see an overview of current and recent activities when I first login so that I can see if I need to do something again or what went wrong. 	New 	Not in Hob 	 	London team
12	Image Builder 	Logs 	As an image builder if an unattended build fails I want to see the build log when I login again with the error clearly highlighted and any relevant info so I can figure out what went wrong. 	? 	 	 	London team
13	Image Builder 	Notifications 	As an image builder I want to be able to send failure output (logs, other relevant info) to a 3rd party in case I can not fix the problem myself. 	New 	Not in Hob 	 	London team
14	Image Builder 	Configurations	As an image builder I want to be able to go back after a build completes and edit selections / config in case I forgot something. 	 	 	 	London team
15	Image Builder 	Notifications 	As an image builder I want to be able to get notifications (email?) when a build completes so I know when that happens what the result was briefly. 	New 	Not in Hob 	 	London team
16	Image Builder 	Scheduling 	As an image builder I want to be able to schedule builds so that I don't have to run them immediately. 	New 	Not in Hob 	 	London team
17	Image Builder 	Scheduling 	As an image builder I want to be able to run or schedule more than one build to run in parallel in order to save time and make maximum use of resources. 	New 	Not in Hob 	 	London team
18	Image Builder 	Dashboard 	As an image builder I want to see understandable explanations of machines and whether they are real or virtual so that I can make the right decisions. 	 	 	 	London team
19	Image Builder 	Build an image	As an image builder I want to be able to choose as a config option whether or not the build should continue when an error occurs so I can get as much of the build done as possible. 	 	 	 	London team
20	Image Builder 	Build history 	As an image builder I want to see the history of my builds so that I have access to any output I've created in the past - history is classified per project. 	New 	Not in Hob 	 	London team
21	Image Builder 	Configuration 	As an image builder I want to name my images for the same configuration so that I can easily identify them (but do not use naming for keeping separate configs). 	New 	Not in Hob 	 	London team
22	Image Builder 	Configuration 	As an image builder I want to have multiple configurations within each project so I can have similar settings for different target machines for the same project. 	New 	Not in Hob 	 	London team
23	Image Builder 	Templates 	As an image builder I want to be asked to save a template if the build was successful So I can save time on my next build 	New 	Not in Hob 	2.c.i. 	Shane Wang
24	Image Builder 	Templates 	As an image builder I want to be able to manage (delete) saved templates So that I can focus on templates I need 	New 	Not in Hob 	2.c.ii. 	Shane Wang
25	Image Builder 	Build an image	As an image builder I want to start from previous successful steps which does not have a build yet (history max 5) So that I don't waste time on unsuccessful builds. 	New 	Not in Hob 	2.d. 	Shane Wang
26	Image Builder 	Dashboard 	As an image builder I want to be able to stop the process of parsing recipes and then select another machine So that I don't waste time on builds I don't need 	 	 	4.a. 	Shane Wang
27	Image Builder 	Dashboard 	As an image builder I want to see a progress bar so that I can see how far along I am in the process So that I don't waste time. 	 	 	4.b. 	Shane Wang
28	Image Builder 	Build an image	As an image builder when an error occurs I want to see an error dialog pop up and be brought back to the build selections so that I can make changes. 	 	 	4.c. 	Shane Wang
29	Image Builder 	Build animage 	As an image builder I want to be able to select a base image so that I can build without any customisation andgo to a complete build directly. 	 	 	5.1. 	Shane Wang
30	Image Builder 	Build an image	As an image builder I want to create my own image so that I can add more recipes on base images, build packages and then select a package. 	 	 	5.2. 	Shane Wang
31	Image Builder 	Build an image	As an image builder when viewing package list and it is incomplete or inaccurate I want to be able to be told about it so that I can create buildswith minimal error. 	 	 	5.3. 	Shane Wang
32	Image Builder 	Build animage 	As an image builder if I don't want to view the package after seeing a warning dialog I can go directly to select package so that I can skip a step. 	 	 	5.3.2. 	Shane Wang
33	Image Builder 	Build packages	As an image builder I want to be able to stop the process of building packages and simply stop at the current page so that I don't get an image I don't need. 	 	 	6.a. 	Shane Wang
34	Image Builder 	Build an image	As an image builder I want to download the image (URL provided) So that I can deploy the image 	New 	Not in Hob 	8.a. 	Shane Wang
--	Image Builder 	Build an image	As an image builder I want to be using the latest sources for the metadata, so that I have the latest and most stable functionality. 	New 	Not in Hob?	 	London team
--	Image Builder 	Build an image	As an image builder, I want to understand what's inside the image I am going to build, and how elements relate to each other, so that I can make informed customisation decisions 	New 	 	 	London team
--	Image Builder 	Build an image	As an image builder, I want to access the source files and scripts used to build my images, so that I can fully comply with the GPL license terms. 	New 	 	 	London team
 	 	 	 	 	 	 	
35	Image builder new to Linux	Build an image	As an image builder new to Linux I want to understand the selections I'm making so that I'm not confused when learning to use Web Hob 	 	 	 	London team
36	Image builder new to Linux	Build an image	As an image builder new to Linux I want to see recipe and package descriptions in terms of functionality so that I don't need to be a Linux wizard to customise my image. 	 	 	 	London team
 	 	 	 	 	 	 	
--	Developer 	Deploy 	As a developer I want to select the output format(s) of my image (e.g. jffs2, tar.gz, ubi etc), together with output specific options (like jffs2 eraseblock size etc) through a text field or image type specific form. 	 	 	 	Frans Meulenbroeks
--	Developer 	Build an image	As a developer I want to control or select image features. 	 	 	 	Frans Meulenbroeks
--	Developer 	Build an image	As a developer I want to select machine as well as libc version, etc. 	 	 	 	Frans Meulenbroeks
--	Developer 	Build an image	As a developer I want to select specific versions of a recipe. 	 	 	 	Frans Meulenbroeks
 	 	 	 	 	 	 	
37	Architect 	Configuration 	As an architect I want to be able to control the level of customisation available to team members so that I have control over the project. 	New 	Not in Hob 	 	London team
38	Architect 	Create user 	As an architect I want to create Web Hob users and give them access to projects so that I can manage my resources. 	New 	Not in Hob 	 	London team
 	 	 	 	 	 	 	
39	Team Member 	Projects 	As a team member I want to share my images and configurations with other team members so that we can better collaborate. 	New 	Not in Hob 	 	London team
40	Team Member 	Groups 	As a team member I want to be able to share packages with other team members so they don't need to build them again. 	New 	Not in Hob 	 	London team
41	Team Member 	Projects 	As a team member I want to share my images and configurations with other team members so that we can better collaborate. 	New 	Not in Hob 	 	London team
42	Team Member 	Packages 	As a team member I want to be able to share packages with other team members so they don't need to build them again. 	New 	Not in Hob 	 	London team
 	 	 	 	 	 	 	
43	Engineer 	Groups 	As an engineer I want to be able to create package groups by selecting packages individually so other team members don't have to. 	New 	Not in Hob 	 	London team
44	Engineer 	Groups 	As an engineer I want to be able to create package groups by selecting packages individually so other team members don't have to. 	New 	Not in Hob 	 	London team
 	 	 	 	 	 	 	
45	Project Manager 	Archiving 	As a project manager I want to archive a finished projects so that work can be preserved and recovered with minimum storage needs. 	New 	Not in Hob 	 	London team
 	 	 	 	 	 	 	
46	Sysadmin 	Groups 	As a sysadmin I want to be able to control how much of the available server resources each user can use so that there is fair sharing. 	New 	Not in Hob 	 	London team
47	Sysadmin 	Groups 	As a sysadmin I want to be able to invite guest users so that guests can login. 	New 	Not in Hob 	0. 	Shane Wang
48	Sysadmin 	Login 	As an admin I want actions to be recorded against individual users so that there is an audit trail. 	New 	Not in Hob 	1. 	Shane Wang
49	Sysadmin 	Groups 	As a sysadmin I want to be able to reserve available bitbake for userâ€™s requests so that I can fairly distribute tasks. 	New 	Not in Hob 	Multi-user 1. 	Shane Wang
50	Sysadmin 	Groups 	As a sysadmin when bitbake are all reserved I want to be able to randomly select one bitbake so that the user can configure the server 	New 	Not in Hob 	Multiuser 1.a. 	Shane Wang
51	Sysadmin 	Notifications 	As a sysadmin when bitbake are all reserved and a build request is submitted with build configurations into the build queue I want to be able to notify the user when the build is complete with an image URL or build failure with logs so that the user will be aware of the status of the build	New 	Not in Hob 	Multiuser 1.a.a 	
 	 	 	 	 	 	 	
52	Architect 	Groups 	As an architect I want to be able to control the level of customisation available to team members so that I have control over the project. 	 	 	 	London team
53	Architect 	Groups 	As an architect I want to create Webhob users and give them access to projects so that I can manage my resources. 	 	 	 	London team
== What's New ==
(Role) Image builders new to Linux
* Understanding the selections they're making so that they're not confused when learning to use Web Hob
* Seeing the recipe and package descriptions in terms of functionality
Deployment
* Write images to removable media easily to test the image on the real hardware (this can be hard to do manually).
Dashboard
* Able to see the status of the build in real time to know what the progress is at any time.
* Able to see an overview of current and recent activities when I first login to see if I need to do something again or what went wrong.
Projects
* Sharing images and configurations with other team members
* Able to share packages with other team members so they don't need to build them again.
* Create package groups by selecting packages individually so other team members don't have to.
* Control how much of the available server resources each user can use so that there is fair sharing. 
* Invite guest users so that guests can login.
* Reserve available bitbake for user’s requests to fairly distribute tasks. 
* Randomly select one bitbake so that the user can configure the server
* Create package groups by selecting packages individually so other team members don't have to.
Packages
* Share packages with other team members
Notifications
* Send failure output (logs, other relevant info) to a 3rd party
* Get notifications (email?) when a build completes
* Schedule builds
* Schedule builds so that I don't have to run them immediately.
Build history
* See the history of my builds - history is classified per project.
Configuration	
* Name my images for the same configuration so that I can easily identify them (but do not use naming for keeping separate configs)
* Have multiple configurations within each project so I can have similar settings for different target machines for the same project.
* Able to control the level of customisation available to team members
Templates
* Asked to save a template if the build was successful
* Manage (delete) saved templates
Build an image
* Start from previous successful steps which does not have a build yet (history max 5)
* Download the image (URL provided)
Create user
* Create Web Hob users and give them access to projects
Login
* Actions to be recorded against individual users so that there is an audit trail. 
Archiving
* Archive a finished projects
Notifications
* When bitbake are all reserved and a build request is submitted with build configurations into the build queue able to notify the user when the build is complete with an image URL or build failure with logs