Firefox OS/Spark: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
 
(11 intermediate revisions by 2 users not shown)
Line 1: Line 1:
='''README'''=
='''Overview'''=
This document contains all public information about ''Spark'' v0.1. 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 foxfooders.
* [https://docs.google.com/document/d/19mt0QaSklkRh_qekEtcQom7pvA29J30Uvaiq1zgWqSA Spark Standup Logs]: Our daily standup notes.
 
There is no longer any document for ''Spark'' v2, as it is not scoped yet, but more information will be available soon.


==Contacts==
Have a question, comment, or suggestion that isn't covered anywhere else? Like all other Mozilla efforts, you can discuss in public on mailing lists, edit this wiki, or whatever else is best for you.
If you'd like to contact someone directly, the following people can either help you, or get you in contact with whomever you're seeking:
* [mailto:drs@mozilla.com Doug Sherk (:drs)]
* [mailto:cserran@mozilla.com Candice Serran (:cserran)]
* [mailto:jgong@mozilla.com Jean Gong (:jeangong)]
='''Overview'''=
==Why?==
==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, however it has yet to capture 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.
Currently ''Firefox OS'' is missing tools to fully leverage these advantages. Developer tools for ''Firefox OS'' and web apps in general leave much to be desired, and impact the overall quality of the web ecosystem, so it is vital we make steps to change this.


==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.
 
We plan to iterate rapidly on the Spark feature set. The first release is just a set of basic building blocks and a framework that we can then build upon.
 
==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.
 
==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==
As part of the ''Ignite'' initiative, ''Spark'' is a priority and should be the focus post any 2.2 work. Work on it should be viewed with the same importance as any foxfooding 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 v0.1 release, and then follow that up with Spark v0.2, v0.3, etc. iterative releases which are 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 foxfooders to find, report, and perhaps even fix issues.
 
==Call for Contributors==
We'd love to have you contribute! If you're interested, we need help in the following areas:
* '''Testing'''. Our QA team needs your help finding bugs. You can install Spark onto your Firefox OS device and foxfood it. Finding and reporting bugs is tremendously valuable to us.
* '''Development'''. You can find any bug in the [[#Bugs]] section and take it. We'd be happy to mentor you.
* '''Evangelizing'''. Talk about the new cool Spark features at a conference, or with your friends. We want others to see the power of the web.
* '''Ideas'''. Have you got a cool idea for how we can use the web to empower developers and users? We'd love to hear from you! You can post publicly in any Mozilla forum, or see the [[#Contacts]] section to contact someone directly with your idea.
 
='''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 v0.1 - 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 v0.1===
* Custom app for editing, applying, and sharing themes.
* [https://github.com/fxos/studio App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133768 v0.1 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 v0.1===
* Custom app for editing other apps.
* [https://github.com/fxos/customizer App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133943 v0.1 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 v0.1===
* 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 v0.1 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 v0.1===
* Custom app for sharing apps, add-ons and themes to people located nearby.
* [https://github.com/fxos/sharing App Repo]
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1133984 v0.1 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.
 
<bugzilla>
    {
        "blocks":["1133984"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>
 
=='''Minor Apps'''==
 
===Add-On Manager v0.1===
* 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 v0.1 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>
    {
        "blocks":["1133990"],
        "priority":"P1",
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>
 
===Bugzilla Lite v0.1===
* Custom app for reporting foxfooding bugs.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1134701 v0.1 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.
 
<bugzilla>
    {
        "blocks":["1134701"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>
 
===Foxfooding App v0.1===
* Custom app for viewing information about the Foxfooding program.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1155938 v0.1 Foxfooding App Meta]
* Component: Gaia::Foxfooding
* Owner: Hubert Figuière (:hub)


<bugzilla>
==Mission Statement==
    {
We believe that web technologies empower mobile devices to be hackable and customizable in a way never seen before.
        "blocks":["1155938"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Customizer Launcher v0.1===
==High-level goals==
* Launcher for the Customizer add-on.
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:
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1160235 v0.1 Customizer Launcher Meta]
* Empower customization of devices in whatever way our users desire.
* Owner: Punam Dahiya (:pdahiya)
* Make customization and hacking delightful.
* Peers: Justin D'Arcangelo (:justindarc)
* Leverage the power of the web to create an experience that native platforms can't.


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.
==Spark v0.1 Retrospective==
<big>Main article: [[Firefox_OS/Spark/v0.1|Spark v0.1]]</big>


<bugzilla>
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.
        "blocks":["1160235"],
* Breadth in features was favored over depth. The intention here was to try a series of flows and see what stuck with users.
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
* 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.
</bugzilla>


===Achievements v0.1===
==Spark v0.2 Core Themes==
* Achievements system to reward the user for completing fun and useful tasks.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1156786 v0.1 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.
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.


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.
=Phases=


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.
==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":["1156786"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


=='''Supporting Efforts'''==
* Write recruiting criteria. Background, interests, understanding, passionate about phones.


===Aries Device Issues===
Here are some of the questions that we will ask:
* Assignees: Alexandre Lissy (:gerard-majax)
* What is your background? Interests? Understanding of mobile space? Technical background? What are you passionate about?
<bugzilla>
* (If they know about Firefox OS) What do you think of Firefox OS?
    {
* (If they know about Spark) What do you think of Spark?
        "blocks":["1162197"],
* What is something about your phone that you wish was different?
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
** Colors, layout, functionality, apps, system, hardware.
    }
** What apps do you use the most? What do you do with them?
</bugzilla>
* (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?


===Gaia Build===
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.
* 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 last 2 weeks.
* 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===
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]].
* All bugs related to UI polish for 720p+ screens.
* [https://bugzilla.mozilla.org/show_bug.cgi?id=1158985 Spark 720p Polish Meta]


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


===Metrics===
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.
* 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 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.
    {
        "blocks":["1161650"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===WebIDE Improvements===
This phase will take 2 weeks.
* 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===
==Iteration==
* Universal flashing tool that will have a simplistic UX for anyone to easily flash their device with a FxOS build.
* Owner: Alexandre Lissy (:gerard-majax)
* Peers: Fabrice Desré (:fabrice)


This will likely be descoped from Spark.
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.


<bugzilla>
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.
    {
        "blocks":["1166276"],
        "include_fields": "id, summary, status, resolution, component, assigned_to, depends_on, blocks, whiteboard"
    }
</bugzilla>


===Developer Mode===
This phase will take the remainder of the release.
* Toggleable relaxed permissions model for more interesting app and feature possibilities. Set using WebIDE and/or the Settings app.
* Owner: Fabrice Desré (:fabrice)
* Support: Paul Theriault (:pauljt), Frederic Braun (:freddyb), Alex Poirot (:ochameau)


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


=Developers=
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.
As part of Spark, developers will now have access to several new API's and features.


==Add-ons==
=Appendix=
'''More information is available in the [https://developer.mozilla.org/en-US/Firefox_OS/Add-ons Firefox OS Add-ons article on MDN].'''


Add-ons can now be created, which target an app or set of apps. When enabled, add-ons inject JavaScript and CSS into a targeted app, allowing the add-on some degree of control over the app. Add-ons are stored just like any other app, but they can't be run stand-alone, and don't show up on the Homescreen.
==Task Builder Idea==


==Developer Mode==
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.
'''More information is available in the [https://developer.mozilla.org/en-US/Firefox_OS/Developer_Mode Developer Mode article on MDN].'''


One of our goals in Spark is to open the door to greater customization and hacking. The current Firefox OS permissions model precludes modification and installation of certified apps, which makes some device API's completely unavailable to Marketplace and web apps.
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.


The solution for now is to allow the user to indicate that they'd like to relax the permissions model through a "Developer Mode" group of preferences. This can be set using either the Settings app, or WebIDE.
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.


Once set, the user receives the following benefits:
These tasks and triggers would be backed by add-ons.
* Apps can create add-ons for themselves using the "import-app" activity.
* Certified apps can be installed from anywhere.
* All developer-related prefs and settings are enabled, such as certified app debugging, web components, etc.

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.