Firefox OS/Spark: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(→‎Enter, Spark: some small rewrite and double quotes replaced for italics.)
 
(30 intermediate revisions by 5 users not shown)
Line 1: Line 1:
='''README'''=
='''Overview'''=
This document contains all public information about Spark v1. More information is available from these sources:
 
* [https://docs.google.com/document/d/1hEYlSV8IWCxyD_fRvkU6MV7wOWXd81Enpcva6ciM3sk Spark NDA Information]: There's very little here, don't worry. We're working to make this public, but we can't yet.
* [[Firefox_OS/Spark/Foxfooding_Guide|Spark Foxfooding Guide]]: Guide for dogfooders.
 
There is no longer any document for Spark v2, as it is not scoped yet, but more information will be available soon.


='''Overview'''=
==Why?==
==Why?==


The mobile ecosystem is in danger of becoming a set of completely walled gardens. The two biggest OSs in mobile right now are iOS and Android, neither of which is really “open” in any sense of the word. Firefox OS is meant to stand against these and bring the web and web technologies to mobile, but so far, it hasn’t captured the hearts of developers.
As mobile platforms move closer to a strict "walled garden" ecosystem, ''Firefox OS'' strives to stand against this trend by bringing the open web to mobile.


There are several key advantages to the web. It is portable and standards-driven, thus it can run anywhere with the same experience. It is ubiquitous, thus there are many websites that already work on it, and almost every organization has a web presence already. It is open, thus anyone can publish to it.
There are several key advantages to the web. It is portable and standards-driven, thus it can run anywhere with the same experience. It is ubiquitous, thus there are many websites that already work on it, and almost every organization has a web presence already. It is open, thus anyone can publish to it.
What’s lacking in Firefox OS is leveraging of these advantages. Developer tools for Firefox OS and web apps in general leave much to be desired, which have contributed to a generally weak ecosystem.


==Enter, Spark==
==Enter, Spark==


''Spark'' is a set of tools, customizations, and features built on top of the next generation of the ''Firefox OS'' platform and is a subset of the ''Ignite'' initiative. ''Spark'' is intended to empower users to customize their experience, hack whatever they want to, and make their devices truly theirs. It can be seen as analogous to desktop's ''Firefox Developer Edition'' browser, except that it has many more new features and apps, and isn’t just a reskin. The intention is that we will leverage web technologies for real-time hacking, as other platforms rely on native binaries that are difficult to edit once compiled. Sharing web apps and hacks is also easier as they are more portable and standards-driven.
''Spark'' is a set of tools, customizations, and features built on top of the next generation of the ''Firefox OS'' platform and is a subset of the ''Ignite'' initiative. ''Spark'' is intended to empower users to customize their experience, hack whatever they want to, and make their devices truly theirs. The intention is that we will leverage web technologies for real-time hacking, as other platforms rely on native binaries that are difficult to edit once compiled. Sharing web apps and hacks is also easier as they are more portable and standards-driven. We plan to iterate rapidly on the Spark feature set.
 
==Teasers, Examples==
Imagine that you want a button in your Dialer that says “Call Mom”, and does exactly as you would think. Using tools from Spark, you could do any or all of:
* Open on-device developer tools to script your own new button that gets added to the app every time you open it.
* Open the app in WebIDE and make your changes there.
* Download a new Dialer app off of Hackerplace which does what you want, and replaces the existing app.
* Share the new app, or customization, to people nearby using the Sharing app, or by submitting it to Hackerplace.
* Use the Theme Editor app to change app themes, so that the rest of the Dialer fits in with the color that you want the “Call Mom” button to be.
 
==High-level Goals==
 
===Primary===
* Inspire Mozillians to create new cool things, and “foxfood” (our term for dogfooding).
* Make development and hacking first-class citizens in Firefox OS.
* Provide users with tools for sharing and discovering customizations.
 
===Secondary===
* Get novice users interested in hacking and customizing their devices.
* Make Firefox OS more webby; take advantage of things that only the web platform can do, instead of trying to copy Android/iOS.
 
==Features==
Spark either already has, or will have, the following features:
* Add-on support. This allows injection of JS and CSS files into any app. An add-on manager is included in the Settings app.
* “Customizer”, a tool that can be summoned in any app using a two finger gesture or launcher app, similar to desktop Dev Tools, but with better controls for mobile. This can be used to learn about apps, change them, and save your changes so that the app is however you want it from that point on.
** The Customizer can be used to create an entire app from scratch, should you so desire.
** It comes with templates that you can start your work on, and widgets that you can embed into your apps.
* “Hackerplace”, a marketplace for more experimental apps and add-ons that have not yet been approved for Marketplace. It focuses on cool hacks that community members have built, and replaceable apps.
* “P2P Sharing”, an app for quickly discovering people nearby, and sharing apps, add-ons, and themes with them via WiFi and WiFi Direct.
* “Theme Editor”, an app for managing your device themes, i.e. changing text, background, and component colors across the device.
* “Firefox Hello”, a WebRTC client for making calls with other users, including those on desktop. Doesn’t require a SIM or data plan.
* “Bugzilla Lite”, a lighter version of Bugzilla bundled into the build. This is used for reporting foxfooding bugs and getting updates on their status.
* “Achievements”, a system for rewarding users for completing developer-related tasks and experimenting.
* “BuddyUp”, a service for asking questions and getting answers from community members. You can also be on the other side, and answer questions for users.
* A “Foxfooding” app, with news and updates on the foxfooding program, feedback we’ve received, and issues that we’re dealing with.
* All system-level apps, such as the Dialer, Messages, Contacts, etc. apps are replaceable.
* All app permissions are unlocked with developer mode enabled.
* Improvements to WebIDE, including the ability to debug over WiFi, create and edit add-ons.
* Automatic OTA (over-the-air) updates straight from Mozilla.
* Achievements for accomplishments, such as creating your first customization, publishing it on Hackerplace, etc.
* Bundled social apps, including Twitter, Facebook, Yammer, and others to be announced.
* MozVR demos and news. More Mozilla initiatives may be coming.
* WebGL mobile games.
* Built-in IRC client.
* Branding enabled by default.
* Cool new default theme and wallpaper.
 
==Priorities==
Spark takes priority over everything except for blockers for impending releases, e.g. v2.2.. Since Spark has well-defined milestones and a device launch, it requires focus. Spark is not a prototype, nor is it in ideation stages. Work on it should be viewed as being as important as any dogfooding program.
 
==Milestones==
Spark will follow a release pattern similar to the one that Firefox OS currently uses. It will be comprised of:
* Feature landing. The step where features are built and are not necessarily stable enough to go into production yet.
** All new apps built for Spark should have their features complete by the end of this phase.
** Any bundled apps and customizations should be included by the end of this phase.
* Feature complete. At the end of this stage, the build should be completely stable, and ready for release.
** No new apps, bundled or otherwise, are accepted in this phase.
* Code complete. During this stage, only critical and essential fixes are accepted. The release should be completely done.
We will begin with a Spark v1 release, and then follow that up with a Spark v2 release which is not well-defined right now.
 
===Dates===
See the [[Release_Management/B2G_Landing#Versions_and_Scheduling|B2G Landing wiki page]] for more info on milestones.
 
[[File:Screen Shot 2015-04-28 at 2.55.32 PM.png]]
 
==Technical Strategy==
 
===Repos===
Development is currently taking place in a variety of places:
* The new custom apps, Customizer, Hackerplace, Sharing, and Theme Editor, are all in separate repos on GitHub under the “[https://github.com/fxos fxos]” organization. See each of their sections for more details.
* We are making heavy use of web components from the “[https://github.com/gaia-components gaia-components]” GitHub organization.
 
===Localization and Automated Testing===
Currently, the new Spark features and apps lack localization and any automated testing at all. We are relying heavily on dogfooders to find, report, and perhaps even fix issues.
 
='''Bugs'''=
 
=='''Blockers'''==
 
===Spark Blockers===
 
<bugzilla>
    {
        "cf_blocking_b2g":"spark+",
        "include_fields": "id, summary, target_milestone, component, status, resolution, assigned_to, depends_on, blocks, whiteboard, cf_blocking_b2g, last_change_time" 
    }
</bugzilla>
 
===Spark Nominations===
 
<bugzilla>
    {
        "cf_blocking_b2g":"spark?",
        "include_fields": "id, summary, target_milestone, component, status, resolution, assigned_to, depends_on, blocks, whiteboard, cf_blocking_b2g, last_change_time" 
    }
</bugzilla>
 
=='''All Features'''==
 
===Spark V1 - Essential Features List===
 
<bugzilla>
    {
        "whiteboard":"spark",
        "whiteboard_type":"contains",
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard, cf_feature_b2g, cf_blocking_b2g"
    }
</bugzilla>
 
===Spark P2 - Nice To Haves===
 
<bugzilla>
    {
        "whiteboard":"spark",
        "whiteboard_type":"contains",
        "priority":"P2",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard, cf_feature_b2g, cf_blocking_b2g"
    }
</bugzilla>
 
=='''Major Apps'''==
 
===Theme Editor V1===
* Custom app for editing, applying, and sharing themes.
* [https://github.com/fxos/studio App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133768 V1 Theme Editor Meta]
* Component: Gaia::Theme Editor
* Owner: Etienne Segonzac (:etienne_s)
* Peers: Fabrice Desré (:fabrice), Hubert Figuière (:hub)
 
The Theme Editor app is the entry point for regular phone users looking to customize their experience, and/or take baby steps towards hacking.
 
<bugzilla>
    {
        "blocks":["1133768"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>
 
===Customizer V1===
* Custom app for editing other apps.
* [https://github.com/fxos/customizer App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133943 V1 Customizer Meta]
* Component: Gaia::Customizer
* Owner: Justin D'Arcangelo (:justindarc)
* Peers: Doug Sherk (:drs)
 
The Customizer is a suite of developer tools that can be opened in any app, for inspecting and making changes to content. It allows saving these changes so that they are persisted when apps restart.
 
The Customizer is an add-on which is injected to every app on load. It loads only a stub, which watches for the open gesture (2 fingers from bottom of screen to middle). Once it detects the gesture, it lazy-loads the rest of the Customizer code and opens the tool panel.
 
When a change is made and saved, another add-on is created by the Customizer, which targets only the edited app.
 
<bugzilla>
    {
        "blocks":["1133943"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>
 
===Hackerplace V1===
* Custom app for downloading specialized Ignite replaceable apps and add-ons.
* [https://github.com/fxos/directory/ App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133975 V1 Hackerplace Meta]
* Component: Gaia::Hackerplace
* Owner: Mike Henretty (:mhenretty)
* Peers: Doug Sherk (:drs)
 
Hackerplace is a simpler version of the Firefox Marketplace. It contains experimental new apps and add-ons, as well as replaceable versions of some of the stock apps, such as the Dialer and Camera apps.
 
Users can submit new apps and add-ons to Hackerplace using GitHub pull requests, which the app contains a link to.
 
<bugzilla>
    {
        "blocks":["1133975"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===P2P Sharing V1===
==Mission Statement==
* Custom app for sharing apps, add-ons and themes to people located nearby.
We believe that web technologies empower mobile devices to be hackable and customizable in a way never seen before.  
* [https://github.com/fxos/sharing App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133984 V1 P2P Sharing Meta]
* Component: Gaia::P2P Sharing
* Owner: Doug Sherk (:drs)
* Peers: Justin D'Arcangelo (:justindarc)


The Sharing app allows users to share apps, add-ons, and themes to others who are in the area. It discovers peers using the connected WiFi network, as well as ad-hoc WiFi Direct connections in the area.
==High-level goals==
Firefox OS in general is going to get back to the basics of great hackability, great privacy, and great experience. Spark is focused on the hackability aspect. We will:
* Empower customization of devices in whatever way our users desire.
* Make customization and hacking delightful.
* Leverage the power of the web to create an experience that native platforms can't.


<bugzilla>
==Spark v0.1 Retrospective==
    {
<big>Main article: [[Firefox_OS/Spark/v0.1|Spark v0.1]]</big>
        "blocks":["1133984"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


=='''Minor Apps'''==
Development and design of Spark v0.1 was marked by the following core tenets:
* Product design was driven heavily by engineering. This was exacerbated by the lack of a dedicated product manager. It was posited that this was acceptable given that the traits of the target user for Firefox OS going forward, early adopters, theoretically have a lot in common with engineers.
* Breadth in features was favored over depth. The intention here was to try a series of flows and see what stuck with users.
* Spark and Foxfooding were tied together very intimately, which prevented the team from really focusing on Spark as the project got closer to release.
* When development began, there was no roadmap; just some ideas and very high-level goals. As a result, product design happened very rapidly and iteratively without a plan from the beginning.


===Add-On Manager V1===
==Spark v0.2 Core Themes==
* Custom extension to Settings app for enabling/disabling, viewing, and uninstalling add-ons.
* https://github.com/mozilla-b2g/gaia/tree/lightsaber/apps/settings Lives in “lightsaber” Gaia branch Settings app]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133990 V1 Add-On Manager Meta]
* Owners/Peers: Refer to owners/peers of the Settings module.
* Assignees for this feature: Yura Zenevich (:yzen), Arthur Chen (:arthurcc), David Flanagan (:djf)


<bugzilla>
The overall approach for Spark v0.2 will be a significant departure from that of Spark v0.1. We will keep the following tenets in mind:
    {
* Product design will be driven by solving a problem for the end user. We will clearly state that the target user is the early adopter / tech enthusiast. We will take an empathic approach to this design, favoring user feedback over speculation.
        "blocks":["1133990"],
* We will start with a user research phase where we interview our target users, propose solutions and gather feedback on them, then build paper prototypes. Only after this phase is complete will we begin engineering work.
        "priority":"P1",
* Product design will favor depth over breadth. We will be very focused on a small set of use cases, and solving them very well. Features will be cut ruthlessly if they are shown to be either unfeasible or not beneficial to the user.
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
* Interaction design will begin when a problem and potential solution have been identified. Engineering will begin only after the interaction design has reached a soft consensus.
    }
* The product will be continuously tested on users, and be iterated on where needed.
</bugzilla>
* We will not constrain ourselves to past designs and engineering work unless there is a very compelling reason to do so, e.g. it makes sense for the future, it aligns well with what users want, or we determine that the trade-off of engineering work is worth a slightly worse user experience.
* Deadlines will be of relative, rather than absolute importance. We will focus on the long-term vision, and treat releases as check-ins.


===Bugzilla Lite V1===
=Phases=
* Custom app for reporting foxfooding bugs.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1134701 V1 Bugzilla Lite Meta]
* Component: Gaia::Bugzilla Lite
* Owner: Dale Harvey (:daleharvey)
* Peers: Doug Sherk (:drs)


Bugzilla Lite is a replacement front-end for Bugzilla, intended to be used for filing bugs on mobile devices.
==User Research==


<bugzilla>
The focus during this phase will be on gathering and parsing data from users. We will conduct interviews, the purpose of these being to figure out what exactly users want to be able to customize. We will be careful to be unbiased, and to help interviewees break free of the constraints of native platforms in their answers without directly mentioning this.
    {
        "blocks":["1134701"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Foxfooding App V1===
* Write recruiting criteria. Background, interests, understanding, passionate about phones.
* Custom app for viewing information about the Foxfooding program.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1155938 V1 Foxfooding App Meta]
* Component: Gaia::Foxfooding
* Owner: Hubert Figuière (:hub)


<bugzilla>
Here are some of the questions that we will ask:
    {
* What is your background? Interests? Understanding of mobile space? Technical background? What are you passionate about?
        "blocks":["1155938"],
* (If they know about Firefox OS) What do you think of Firefox OS?
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
* (If they know about Spark) What do you think of Spark?
    }
* What is something about your phone that you wish was different?
</bugzilla>
** Colors, layout, functionality, apps, system, hardware.
** What apps do you use the most? What do you do with them?
* (If they're not foxfooding) What is something about Firefox OS that you wish was different?
* If you could customize your phone in some way, what would you do?
* Is there anything that you wish you could do with your friends and their phones?
* What do you think of the web?


===Customizer Launcher V1===
The goal of this phase is to come up with a problem, and 1-3 very specific use cases to build a solution for. We will also consider this phase a success if we come up with a potential high-level solution for this problem.
* Launcher for the Customizer add-on.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1160235 V1 Customizer Launcher Meta]
* Owner: Punam Dahiya (:pdahiya)
* Peers: Justin D'Arcangelo (:justindarc)


The Customizer is not very discoverable right now, so to make it more visible, we will build a launcher app for it. This will appear on the Homescreen as a “Customizer” app.
This phase will last 2 weeks.


<bugzilla>
===Contingencies===
    {
        "blocks":["1160235"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Achievements V1===
This phase may not yield enough information for us to make an informed and well-thought out decision in our timeframe. If this happens, we will be prepared to field questions about [[#Task_Builder_Idea|the task builder idea]].
* Achievements system to reward the user for completing fun and useful tasks.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1156786 V1 Achievements Meta]
* Owner: Yura Zenevich (:yzen)


Hacking and customizing your device should feel rewarding. But these rewards shouldn’t get in the way of experienced developers. Thus, we introduce Achievements.
==Design==


Achievements will be rewarded when the user either follows a path that we want them to experience at least once, or accomplish something meaningful. When an achievement is awarded to the user, a notification will appear at the top of the screen, with an icon, title, and description.
The next phase will involve narrowing in on an actual solution for the identified problem and use cases. The goal will be to have a soft consensus, e.g. most people agree, on a path forward. We will build paper prototypes and test these on potential users, iterating as needed until we're satisfied that we're solving a real pain point.


An advantage of achievements is that they allow us to gently guide users into our new apps and add-ons, by rewarding them when they try new things, but without punishing them if they don’t. They will be non-intrusive, as they will be granted only once, and only when performing “fun” things like creating an add-on. Monotonous and common tasks like placing a phone call will be unaffected.
We will not aim to have completed specs at the end of this phase. As long as everyone understands the path forward, we can begin on engineering work and discuss with UX and UI as needed.


<bugzilla>
This phase will take 2 weeks.
    {
        "blocks":["1156786"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


=='''Supporting Efforts'''==
==Iteration==


===Aries Device Issues===
This phase will involve actual building of the solution. It is called "iteration" and not "engineering" or "building", because it is more focused on getting the solution right, than on having a very concrete and specific design and end state envisioned right at the onset. As we build the solution out, we will test it out on users, and iterate further where needed. We will always favor cutting features over serving something to users that is subpar.
* Assignees: Alexandre Lissy (:gerard-majax)
<bugzilla>
    {
        "blocks":["1162197"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Gaia Build===
In keeping with the train model, we aim for the results of each sprint to be releasable. Thus, we will build the solution with l10n and tests from the get-go. However, we will abstain from heavy testing on the front-end, to keep us nimble and adaptable to changes from user testing.
* Assignees: Dale Harvey (:daleharvey), Doug Sherk (:drs)
<bugzilla>
    {
        "blocks":["1162181"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Platform - Add-ons===
This phase will take the remainder of the release.
* Assignees: Fabrice Desré
<bugzilla>
    {
        "blocks":["1162200"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===OTA Updates===
===Contingencies===
* Assignees: Wander Costa (:wcosta)
<bugzilla>
    {
        "blocks":["1162203"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===720p UI Polish===
We will evaluate progress half-way through this phase. If it we are not satisfied that it will be completed on-time and well, we will abandon it and pick up the Sharing app. We will then focus on writing tests for this app and adding l10n support, perhaps even squeezing in media sharing support.
* All bugs related to UI polish for 720p+ screens.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1158985 Spark 720p Polish Meta]


<bugzilla>
=Appendix=
    {
        "blocks":["1158985"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Metrics===
==Task Builder Idea==
* Tracking bug for supporting work from the Metrics team to track success of the foxfooding program.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1161650 Spark Metrics Meta]
* Assignees: Tamara Hills (:thills)


<bugzilla>
We believe that Spark v0.1 was onto something with its customization potential, but that it didn't solve a real problem for the end user in an effective way.
    {
        "blocks":["1161650"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===WebIDE Improvements===
The web is uniquely positioned to run arbitrary code on runtime in a way that other platforms can't. It's also well-positioned to establish client-server interactions, regardless of what the actual devices on each end of this relationship are.
* Owner: Alex Poirot (:ochameau)
<bugzilla>
    {
        "blocks":["1157889"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===New Flashing Tool - TBD===
Thus we propose iterating on the Customizer to make it a task-focused code builder. At a high level, it will allow modification of apps using simple prose, e.g. "<when I receive a call>, <send myself an email>". As alluded to, this could also operate on phones and other devices in the area.
* Universal flashing tool that will have a simplistic UX for anyone to easily flash their device with a FxOS build.  
* Bugs to be created soon
* Owner: Alexandre Lissy (:gerard-majax)
* Peers: Fabrice Desré (:fabrice)


This will likely be descoped from Spark.
These tasks and triggers would be backed by add-ons.

Latest revision as of 18:19, 15 July 2015

Overview

Why?

As mobile platforms move closer to a strict "walled garden" ecosystem, Firefox OS strives to stand against this trend by bringing the open web to mobile.

There are several key advantages to the web. It is portable and standards-driven, thus it can run anywhere with the same experience. It is ubiquitous, thus there are many websites that already work on it, and almost every organization has a web presence already. It is open, thus anyone can publish to it.

Enter, Spark

Spark is a set of tools, customizations, and features built on top of the next generation of the Firefox OS platform and is a subset of the Ignite initiative. Spark is intended to empower users to customize their experience, hack whatever they want to, and make their devices truly theirs. The intention is that we will leverage web technologies for real-time hacking, as other platforms rely on native binaries that are difficult to edit once compiled. Sharing web apps and hacks is also easier as they are more portable and standards-driven. We plan to iterate rapidly on the Spark feature set.

Mission Statement

We believe that web technologies empower mobile devices to be hackable and customizable in a way never seen before.

High-level goals

Firefox OS in general is going to get back to the basics of great hackability, great privacy, and great experience. Spark is focused on the hackability aspect. We will:

  • Empower customization of devices in whatever way our users desire.
  • Make customization and hacking delightful.
  • Leverage the power of the web to create an experience that native platforms can't.

Spark v0.1 Retrospective

Main article: Spark v0.1

Development and design of Spark v0.1 was marked by the following core tenets:

  • Product design was driven heavily by engineering. This was exacerbated by the lack of a dedicated product manager. It was posited that this was acceptable given that the traits of the target user for Firefox OS going forward, early adopters, theoretically have a lot in common with engineers.
  • Breadth in features was favored over depth. The intention here was to try a series of flows and see what stuck with users.
  • Spark and Foxfooding were tied together very intimately, which prevented the team from really focusing on Spark as the project got closer to release.
  • When development began, there was no roadmap; just some ideas and very high-level goals. As a result, product design happened very rapidly and iteratively without a plan from the beginning.

Spark v0.2 Core Themes

The overall approach for Spark v0.2 will be a significant departure from that of Spark v0.1. We will keep the following tenets in mind:

  • Product design will be driven by solving a problem for the end user. We will clearly state that the target user is the early adopter / tech enthusiast. We will take an empathic approach to this design, favoring user feedback over speculation.
  • We will start with a user research phase where we interview our target users, propose solutions and gather feedback on them, then build paper prototypes. Only after this phase is complete will we begin engineering work.
  • Product design will favor depth over breadth. We will be very focused on a small set of use cases, and solving them very well. Features will be cut ruthlessly if they are shown to be either unfeasible or not beneficial to the user.
  • Interaction design will begin when a problem and potential solution have been identified. Engineering will begin only after the interaction design has reached a soft consensus.
  • The product will be continuously tested on users, and be iterated on where needed.
  • We will not constrain ourselves to past designs and engineering work unless there is a very compelling reason to do so, e.g. it makes sense for the future, it aligns well with what users want, or we determine that the trade-off of engineering work is worth a slightly worse user experience.
  • Deadlines will be of relative, rather than absolute importance. We will focus on the long-term vision, and treat releases as check-ins.

Phases

User Research

The focus during this phase will be on gathering and parsing data from users. We will conduct interviews, the purpose of these being to figure out what exactly users want to be able to customize. We will be careful to be unbiased, and to help interviewees break free of the constraints of native platforms in their answers without directly mentioning this.

  • Write recruiting criteria. Background, interests, understanding, passionate about phones.

Here are some of the questions that we will ask:

  • What is your background? Interests? Understanding of mobile space? Technical background? What are you passionate about?
  • (If they know about Firefox OS) What do you think of Firefox OS?
  • (If they know about Spark) What do you think of Spark?
  • What is something about your phone that you wish was different?
    • Colors, layout, functionality, apps, system, hardware.
    • What apps do you use the most? What do you do with them?
  • (If they're not foxfooding) What is something about Firefox OS that you wish was different?
  • If you could customize your phone in some way, what would you do?
  • Is there anything that you wish you could do with your friends and their phones?
  • What do you think of the web?

The goal of this phase is to come up with a problem, and 1-3 very specific use cases to build a solution for. We will also consider this phase a success if we come up with a potential high-level solution for this problem.

This phase will last 2 weeks.

Contingencies

This phase may not yield enough information for us to make an informed and well-thought out decision in our timeframe. If this happens, we will be prepared to field questions about the task builder idea.

Design

The next phase will involve narrowing in on an actual solution for the identified problem and use cases. The goal will be to have a soft consensus, e.g. most people agree, on a path forward. We will build paper prototypes and test these on potential users, iterating as needed until we're satisfied that we're solving a real pain point.

We will not aim to have completed specs at the end of this phase. As long as everyone understands the path forward, we can begin on engineering work and discuss with UX and UI as needed.

This phase will take 2 weeks.

Iteration

This phase will involve actual building of the solution. It is called "iteration" and not "engineering" or "building", because it is more focused on getting the solution right, than on having a very concrete and specific design and end state envisioned right at the onset. As we build the solution out, we will test it out on users, and iterate further where needed. We will always favor cutting features over serving something to users that is subpar.

In keeping with the train model, we aim for the results of each sprint to be releasable. Thus, we will build the solution with l10n and tests from the get-go. However, we will abstain from heavy testing on the front-end, to keep us nimble and adaptable to changes from user testing.

This phase will take the remainder of the release.

Contingencies

We will evaluate progress half-way through this phase. If it we are not satisfied that it will be completed on-time and well, we will abandon it and pick up the Sharing app. We will then focus on writing tests for this app and adding l10n support, perhaps even squeezing in media sharing support.

Appendix

Task Builder Idea

We believe that Spark v0.1 was onto something with its customization potential, but that it didn't solve a real problem for the end user in an effective way.

The web is uniquely positioned to run arbitrary code on runtime in a way that other platforms can't. It's also well-positioned to establish client-server interactions, regardless of what the actual devices on each end of this relationship are.

Thus we propose iterating on the Customizer to make it a task-focused code builder. At a high level, it will allow modification of apps using simple prose, e.g. "<when I receive a call>, <send myself an email>". As alluded to, this could also operate on phones and other devices in the area.

These tasks and triggers would be backed by add-ons.