I just switched to being an employee (for the first time ever) at Mozilla last month, and due to some management switch-ups, I now also have a manager who has no familiarity with what I do (for the first time ever). Melinda and plinss and roc were all already involved in my day-to-day work, so there wasn't much to explain. So I figured I'd post an explantion here, since most other people don't know what I do or why, either.
Most of my career is defined by being an Invited Expert on the CSS Working Group. The decisions I make on what I work on and how I prioritize it all derive from the goal of making CSS solid, and enabling the CSSWG to be effective at standardizing it. Sometimes Mozilla perceives what I do to be in their interest, sometimes they don't and Microsoft does... I was originally sponsored by Hewlett-Packard, who gave me a lot of freedom in choosing what to work on, and once that contract ended I expanded that freedom and found other sponsors for it. I got to be the wildcard in the CSSWG, and all that implies.
Now that I'm an employee, I don't own my self-direction, I'm only granted it conditionally. I belong to the layout team at MoCo, and their priority is Gecko/Firefox: their CSS investment is informed by and channeled through Gecko's priorities. But since my CSSWG induction in 2004, that is not, and has not been, my priority: mine has been CSS, directly and primarily, and Gecko, also directly, but separately and secondarily. You could argue that my priorities fit well under the Mozilla Manifesto, but they don't always fit under the Firefox corollary. So I feel the need to justify not being on a leash, since I expect at times my priorities and management's priorities to diverge due to this difference. Both Mozilla and I owe our loyalty to the Web platform, but my team plays it on the browser field through Firefox and on the standards field through Gecko, while I play directly on the field of W3C, and I play as myself.
Things I've accomplished include:
- Opening up the CSSWG: shifting technical discussion from the internal list to www-style; starting and running the CSSWG blog; setting up the CSSWG wiki; and taking F2F and telecon record-keeping to the next level so our decisions and their rationale are recorded and available for public review and comment. CSSWG minutes read like a transcript because I set the bar there.
- Driving specs to completion: I took on (co-)editorship of Selectors Level 3, CSS Namespaces, CSS3 Backgrounds and Borders, CSS Style Attributes, and (unofficially) CSS2.1 and drove them to CR and beyond, in many cases not because they were exciting new works, but because they'd stagnated in a nearly-but-not-quite-finished-not-quite-stable limbo state for years. I wanted to finish them so we could close the case, put it under us to stand on, and move on to the next thing.
- CSS Modularization After the CSSWG resolutions to break apart CSS3 and create the snapshot model, I tried to articulate CSS's modularization strategy through the CSS Snapshots and have been guiding its implementation ever since.
- CSS Testing: After Hixie left to focus on HTML, I took ownership of CSS testing at W3C. As the CSSWG focus shifted to testing CSS2.1, I laid down a vision statement for what CSSWG test suites should be, and at this point I'd say we're maybe halfway there. It's not gotten any of my attention in the past 6 months, though, and deserves a dedicated owner.
- CSSWG-EPUB3 Liaison: As the CSSWG liaison to the EPUBWG, I helped to communicate CSSWG positions and operations to EPUB. I also shifted my own spec priorities to try to keep up with EPUB's demands and prevent EPUB from forking CSS with its own variations of features we hadn't finished, stabilizing as much of CSS3 Writing Modes and CSS3 Text (and CSS Speech) as possible by midsummer 2011. (This burned through most of what I had left after CSS2.1, so by mid-August I was running on fumes...)
Things I failed:
- CSS3 Paged Media is halfway between its current rather imprecise state and where it needs to be for a real LCWD. Melinda and I worked on it while we were at HP, but got sidetracked by trying to finish the behemoth that is CSS2.1.
- CSSWG Website Redesign I consider mostly a failure. The site is still a mess informationally, and if you compare Divya's original design to the current one, it still falls short visually (functionally as well as aethetically) as well. This is one thing I can't fix because not only do I not have the time, I'm denied the authority.
Things I'm still working on:
- CSS Internationalization: I own and co-edit CSS spec work for bidi, vertical text, and more advanced/internationalized typesetting.
- Catching up specs to mailing list discussions: Together with Tab Atkins, I'm working on finishing off Håkon's CSS3 Values and Units module, which is nearly done and just needs some final rounds of clean-up and issue resolution before a push to CR; and I've just completed a sweep through Selectors specs and comments, collecting outstanding feature requests into a new Selectors Level 4 draft. I also edit the non-gradient portions of CSS3 Image Values and Replaced Content, which are a collection of previously half-finished feature specs and unspecced WG resolutions from across the years.
- Restyling CSS specifications: Divya and Tab and I have a side-project to revamp the CSSWG-specific aspects of the CSS spec style sheets. You can see some work-in-progress on the CSSWG's module template.
I'm on the Layout team at Mozilla because one of my oft-neglected hats is that of a Gecko layout engine developer. I do write C++ code. (Slowly. Just like I write blog posts. Slowly. :) I like working on Gecko, and I like cleaning up its code and making it better. It's gratifying when dbaron says things are more understandable after I've patched them. And as a side-effect I fix bugs! :D (Or was it the other way around?)
Notable fixes during my contracting tenure at HP and Mozilla include:
- Paginating vertical overflow and absolutely-positioned elements
- Removing float continuation placeholders (i.e. remove some gnarly code in nsBlockFrame)
- Rewriting frame destruction (resulting in lots of crash fixes for net negative lines of code, yay)
Things I was supposed to fix but didn't get to:
- CSS2.1 page-break controls, which have been on my to-do list since 2007. :/
The hardest thing about working on Gecko is blocking out time for it. I'm so tangled up in spec work, it's hard to focus on coding.