Hello Andreas and the Mozilla phone team,

Thanks for all the great work making the "Boot to Gecko" idea into the
real phone I have in front of me! The real Firefox OS, for all the
criticism I level below, is a fantastic platform for the future. The
amount of work you have put in is huge so you all deserve a great thanks
for pulling it off.

Yet there is still a long way to go to turn the existing platform into a viable and vibrant system able to produce a great experience for users, a viable infrastructure (and business?) for developers, and a competitive alternative to the other phone systems. That's what this mail is about.

Andreas, this is addressed to you since we met in Montevideo during the
launch and I figure you might have input into the overall process. It is
sent to the list as well since the individual comments about the apps might be of use to those writing the Gaia apps and might elicit other discussion.





Users are the ultimate key to making the project a success. If users
hate the platform, it is sunk; if they love it, they will leave room for
the inevitable mistakes and errors made along the way.

I worry for the users of 1.1. I doubt any of us is dogfooding v1.1; it is too painful. The clock app which only tells the time does not make any sense on a phone that gives you the time in the top right corner. The browser was not even up to the level of the early versions of Firefox for Android. Fortunately 1.2 is better all over. So we need to get users past 1.1 as quickly as possible.

=> Mozilla needs to publish the upgrade story.

Mozilla should be putting out very clear signals about how those users will get to upgrade. If Mozilla moves past 1.3 and I am stuck on 1.1 and all I hear is ... nothing, I get frustrated. Even if upgrades are out of Mozilla's hands, Mozilla should be coordinating with the device manufactures and the telephone service provides to put out a very clear story on the situation. From the point of view of a frustrated user, they ought to see Mozilla on their side trying to get upgrades done, not as part of the problem.





Which brings me to the User experience itself. I'm working from v1.2
because that's what I have on my phone today.

    The Browser - You all had the gall to call this thing 'Firefox OS'
    and then you come up with this browser!
        You all know perfectly well that phoenix was started to break
    away from the monolithic suite being pushed by Mozilla. Firefox
    (born phoenix) was a project started outside Mozilla which aimed
    to do one thing only and well, web browsing. That it eventually
    dominated the integrated suite pushed by Mozilla insiders should
    have prevented you from re-using the name for this insider driven,
    "let's make the browser do everything" project. But, you squatted
    the name anyhow. Well, now you better live up to the name!
        So make the browser great. I know you have great plans for the
    future but releasing this phone named after the browser with a
    browser this trivial was bad marketing. (Yeah, go ahead, try using
    the browser v1.1 for your browser needs for a day, I challenge you.)
    Do better, make this great now, it is in the phone's name. Okay, in
    v1.2 the browser is at least becoming 'painfully usable' but it
    ain't worthy of the Firefox name and reputation.
        The browser is not key to a phone, but you've taken the name so
    now you have to make it GREAT, and quickly.

    Phone - works well so far. Cool.

    The Clock - v1.2 adds the Alarm clock and a Timer. Great, now it is
    actually an app. The Alarm sounds leave a lot to be desired. Are any
    of you willing to be heard in a meeting emitting these sounds when
    the alarm goes off to remind you you have to go pick up your
    sister's kids? The alarm actually survives long term, unlike
    the timer which dies when opening another app (or two). That is
    actually dangerous, since an obvious use is timing things on the
    stove. Also, when I overcook my pasta because of a crummy Clock app,
    I blame the phone, which is exactly what we want to avoid.

    Contacts - It's starting to be usable. The backup to sdcard saved me
    lots of work when downgrading from v1.3 to v1.2 (which hosed the
    contacts and SMS messages for some reason). So, good.
        Adding a contact is less obvious. The UI is all backwards where
    I have to look deep into the block to know what it is about. Can
    any of you tell me what "Perso..." is going to be about? Oh, okay
    this is an email field, and it is preset to not be 'work' and has
    chosen something like 'Personal' as the text but doesn't fit. Having
    that 'Company' field as the second entry is irksome, suggests this
    has been developed by corporate land. Then in the phone number there
    is this 'Carrier' thing which is puzzling. In Belgium, France, and
    Uruguay, everyone knows the carriers by how the numbers start. In
    the US, it does not seem to matter so much since you get charged up
    the wazoo no matter who you call. So that field seems highly
    detailed for the initial presentation on a general purpose phone.
        So what's a good layout? Well say you just met steve in the
    hallway and you're both late for class, so he gives you his email to
    chat later. You want store 'Steve' the email adress and 'school'
    quickly. You want something like:

             | ContactName   |   |         |
             | Last Name     |   |  Photo  |
             | First Name    |   |         |

             | phone number  | [&details]  +

             | email         | [&details]  +

             | tags                        |

             ...
    When you have lots of time, you can worry about the details, but, by
    then, it does not matter if they are a bit buried, you have time. As
    for the big red minuses, they should not appear until there is
    actually something to subtract; otherwise they are just raining on
    my day. At the end of adding a contact, you are faced with
             |X| Add Contact                                   |Done|
    Well, I keep clicking on the 'Add Contact', don't I? Oh yeah, after
    a while I learn that the middle part is just a title and the right
    part is the button, but by then, I've lost Steve's contact, hein?
    Bummer, I kind of wanted to talk to Steve again.
        As for editing a contact, oh lord. You edit, then are faced with
             |X| Edit Contact                                  |Update|
    but wait, is that big, bad X going to delete the thing? Man, I
    clicked on that head and shoulders with a pencil icon just to see
    what would happen and now I really don't want to delete Silvia's
    address. I don't dare do anything. Oh, well, home button it is. Grr,
    that didn't help. Well here goes nothing...X. oh, it survived. Cool.
    But what about deleting a contact, how do I do that? I can't. hmm,
    oh well. (yes, it is possible, buried way down at the end of the
    Edit dialog. You can delete a phone number block before you enter
    anything into it but deleting a contact requires you to scroll way
    past the details of a contact to find a button floating all on its
    own. Strange UI.)

      => the |X| dialog dismissal button should always be a < back or
      an escape symbol like up and left arrow. The |X| has too much
      semantic baggage: you need to know what you are ex-ing, the dialog
      or the content. (Same is true when editing SMS messages, for
      example.)

    Messages- Works pretty well.
        Well except when you are typing messages in languages other than
    your locale which is an exercise in total frustration. Let alone
    what a non-monolingual human being does which is write in several
    languages at once: english with a quote in french, spanish but with
    english directions, ... Have yet to find how to disable the
    auto-correct. (Auto-correct has to be very, very, very good to be
    better than no correction. As it is, I have to fight auto-correction
    the whole way which is a pain.)
        I keep hitting the 'home' button when trying to type the space
    bar. At least the message survives when I reopen the app---nice.
        Why is the 'Edit messages' which means deleting them, three
    dots with a check mark? Very strange iconography.

    Clock - Why is bringing me back to the clock an 'Alarm' tab? 'Alarm'
    is the clock, 'Timer' is where I set the timer, and 'Stopwatch' is
    where I use the stopwatch. There's a severe lack of parallelism.
        Still, if you all fix the timer so it survives until it rings
    like the alarm does, then the rest is usable.

    Radio - Is cool. When you can separate out the 'need a headset as an
    antenna' from the 'plugging in the headset means sounds come out
    that way' it will be better.

    Music - Is getting better. Not sure why some albums are four times
    the size of others--seems gratuitous. And since much of my music is
    songs, not albums, they get lost. Remember 45's? But, I'll give that
    a pass since organizing music effectively is a *hard* problem and
    everyone has their own ideas.

    Gallery - works and will get better. Editing should be clear if it
    will make a copy or modifying the existing photo (never).

    Camera - awful. But I was spoilt, just before dogfooding this phone,
    by the cutting edge Google App which had finally gotten to be
    usable finally and had some gimmicks beside (panoramas, 3D).
        It's hard to get this right: how to let users specify what to
    focus on and what to measure for exposure, how to let them quickly
    change the exposure (and fix it across a series of shots, like in a
    panorama wihtout ruining the next day's pictures), how to mess with
    the white balance (and fix it across a series of shots).
        Surely you all know this and are working on it. Not sure how
    limited you are by the hardware. There's a long way to go to make
    the camera solidly usable for snapshots, but also usable as a basic
    but truly functional camera.

    Calendar - I killed the app because it keeps waking up and killing
    all other backgrounded apps, i.e. the GPS logging app I am writing.
    I suspect it loads itself periodically to check if any notifications
    are needed to be sent, as a work around to missing API allowing the
    backgrounding of small tasks.

    Email - I have not dared to try to use this. I'd rather use web
    mail anyhow from a phone.

    Marketplace - Have not gotten too far with that. It works, the apps
    suck. (A calculator is not crazy hard to write but a good
    calculator does require a bunch of work to get working perfectly.)

    Settings - Works well overall.
        What is the Geolocation setting, since I am going to be asked
    whenever any app wants to access Geoloc? Is this a global over-ride?
        Move Developer Settings into its own top level rubric already.
    You all must know it's absurd to bury 'remote debugging' as a
       scroll -> tap -> tap -> scroll -> tap -> scroll -> tap
    option.
        Also 'software updates' and 'About' should be top level.
    Neither are 'information about the device;' both are worth exposing.

So, as all the dogfooders know, the current experience is a mixed bag.
Things work; AMAZING! There are lots of rough edges; sniff. This was unfortunately not a well planned review, because, after all that text, my mail is really about developer concerns.






Developers! Developers! Developers! ... the CEO yelled on the stage to
the point where his voice cracks and everyone is embarrassed, because it
was the mantra of the day. Still, it's not entirely wrong. Firefox OS is
a platform for which you hope a lot of web apps will be developed. If
so, then let's clarify some work Mozilla could do to help us developers on our way.

1. Provide developer bundles

Andreas, you really ought to have a deal with your in-country partners
to provide Developer bundles. It's very little work for a big gain. You
sell the phones for $20 dollars more if you have to and the bundle has a phone, a T-shirt and some docs, hopefully the contact point of your
developer outreach folk in country or of some local developer group.
More importantly, the phone actually works for development: i.e. it is rooted (unlocked too would be polite), and runs at least v1.2 so we can plug it into the App Manager. (Even better is if every phone is a developer phone but I gather there is tradition against that.)

As a developer, I want to feel like Mozilla has got my back. A developer bundle does that.


2. Let us make backups

You need a real backup story. The easiest would be to put a small
amount of work to make the recovery image be able to backup and restore
to and from the SDcard. CyanogenMod and others have shown the lead on
this. Right now the backup story is:
   1. (((({{ Magic }}))))) Find a rooted boot.img file.
   2. boot into the bootloader (buttons or adb reboot-bootloader)
   3. 'fastboot boot rooted_boot.img'
   4. 'adb shell'
   5. copy the partitions to a file on the sdcard
   6. copy the partitions from the sdcard file to a safe place
or at least that is supposed to work. I did not get clean dumps that work as backups, which may have been because I did not have a clear
story of what I was trying to do. My hide was saved by a hacker in
Venuzuela who provided the Magic step above and has provided me more
recent builds, and another in Japan who wrote a hacking guide. It'd be
nice if Mozilla were part of that solution mix.


3. Explain your upgrade policy

Get a clean, documented policy on upgrades. (This needs to be done for
users as well, as stated above.) Apparently, for legal reasons you can't
distribute images. Maybe, I don' know for sure. As I get it, the key
might be that you can't distribute the binary blobs I already have on my
phone. Well, give me the policy and let's figure out what we can do. You
want me on 'master' because you want me submitting relevant bugs to your
developers. You also want me on 'master' so I don't have to trip up over
bugs that are fixed. I have real work to do like writing touch handling
code that can survive on this flaky hardware. You don't want me to waste my time writing a test app that shows that the canvas flips upside down in landscape mode on v1.2 if it's already fixed in 1.3. So let's all help each other and make it easy for app developers to follow the latest branches. At the very least, you want to get all developers onto version 1.2. That is what works with the Firefox App Manager and you want us working there so we are using the great work the Developer Tools folk.


4. Fix the docs

The docs, as you well know, are important. However, they are now an
accumulation of information which lack coherence and are partly out of
date. The build docs for instance, either start with a curl command
grabbing the bootstrap script from the source repo or with a git command
cloning the whole B2G repository. It takes a while to figure out these
are merely the same steps in a different order.

You need to schedule regular time for your developers to review or even
write the docs. (Or even be able to answer questions for those who would
be willing to pitch in and fix docs.) Probably this make sense at
the end of each release. Since developer.moz.org just changed over to a
new system, it will take time for your developers to get going on the new system. Regardless, schedule regular doc time.


5. Clean and split the build

Finally, the build is a monstrosity. It is massive in size, hides
gigabytes of repositories in the hidden .repo directory, uses a clutter
of tools cascaded into each other, mixes different output directories,
and generally reads like a long sequence of kludges. No sir, I don't
like it.

As I have deciphered it so far,
 * the setup step gets the required binaries,
 * the configure step
    1. downloads or updates all the repositories
    2. writes the .config file of environmental variables
 * the build step
    1. checks the repositories are up to date
    2. makes a backup of what is on the phone
    3. does the whole build
but really, I got tired of trying to trace the build logic. That's the
script's job.

I imagine the build itself is actually six separate steps:
    1. Build the Android tools
    2. Build the kernel
    3. Assemble the root disk image
    4. Build the Gonk Components
    5. Build Gecko
    6. Build the Gaia apps
and somewhere it would assemble the kernel and root disk into the
boot.img, Gonk, the binary blobs, and Gecko into the system.img, Gaia
into the userdata.img, and the kernel, rootdisk and separate init script
into the recovery.img. But maybe it does not actually make images but
rather directly copies files to the device partitions; it is a kludge,
so surely it does the shortcut first and the clean build as an addon. And maybe my understanding of what image has what is wrong. Still, since it's going to fail along the way, it would be useful to know where it is failing. If failing in step 1, then I ought to be able to blast past it; I've found 'adb' and 'fastboot' binaries that work for me. If failing in the second step, I'd like to know if I actually care---for what do I need a newer boot.img (kernel and rootdisk) on this phone?

I would like the flashing step to be very, very, very clear about what
it is doing. There is a slight danger that it messes things up badly and
causes me to waste a lot of time fixing my phone so I want to be able to follow the flash.sh script to see exactly what it is going to do.
Really, I want to do it by hand first. (And having default behaviour be
to write into every partition on the phone is an approach only some well
paid coder using paid for hardware could have designed.)
    ./flash.sh
should just spout information not potentially brick my phone.
    ./flash.sh --all
can be brutal, the flag shows I know what I am asking for. Right now I simply won't run that script: the real script seems to start with a while loop on line 226 but the whole thing makes me nervous; I ain't giving it control of my phone.

Yes, I realize you are building on the 'repo' tool and the ASOP build.
That does not seem sufficient excuse for the current system. There must
be some way to make this all cleaner.
    Backup phone:
    Download/Update source:
    Compile in separate steps:
        tools, kernel, gonk, gecko, gaia.
    Assemble separately:
        tool binaries, boot.img, system.img, userdata.img, recovery.img
    Flash onto device each separately, or using fastboot.
I've documented what I have figured out so far on:
  https://developer.mozilla.org/
    en-US/Firefox_OS/Building_and_installing_Firefox_OS
    /Firefox_OS_build_overview
because that is the high level overview I would have wanted before
trying to build FxOS. However, on #b2g yesterday, I was told that
flashing whole images is not what I should be doing. So someone in the
know ought to clean up that page based on the reality of what is going
on, and then integrate it into the start of the 'Building' thread on the new dev.moz.org site so as to give developers a good understanding of what the build is going to be doing.


6. Improve Communication Channels

My experience this past month interacting with Mozilla is essentially of being completely ignored.

The IRC channel is mostly dead. Occasionally you talk amongst yourselves. If I ask a question there, at best I will get an answer many hours later. Still, thanks for the answers along the way.

Bugzilla reports get read quickly. Good. However, they do not get confirmed or denied. I am not sure when bugs are due to my setup and when they are actual bugs. That is frustrating. That first triage step should be happening daily, especially since you can probably close a bunch of these bugs immediately which both helps your bugzilla count and helps the submitter figure out what they did wrong. There are also what I would consider showstopper bugs which are apparently totally ignored. Poor users.

This is my first mail to the list, so we will see how this form of communication goes.

Obviously you all are busy. However, if developers are a key to success, you should have some regular mode of interaction with them. Perhaps that takes the form of a weekly developer hour (or three to span the global timezones). Mixed with fixing the docs, that makes for regular progress helping developers, makes them feel part of the process, helps them get their work done.




Well that's my feedback from a month of using and hacking on the platform. I wasted lots of time upgrading to v1.2, I got badly tripped up by the manifest switch to requiring absolute paths everywhere, I am stuck in portrait mode by the canvas flipping upside down in landscape mode bug, I lost time on the error 'unknown' when writing the SDcard, and now am in the middle of trying to handle touch events on flaky hardware. After that, I hope to get back to actually writing the GPS app I am trying to write in the first place.

So cheers for all the good work so far. It looks like you are on a fantastic path forwards. There are some tweaks needed. Primarily though there is a need for better communication. Let users know about upgrades, help developers get their work done. Let's put the web and its apps in everyone's pocket.

cheers,
  ~adrian
_______________________________________________
dev-b2g mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-b2g

Reply via email to