The W3C Technical Architecture Group has made immeasurable progress this year since the original wave of reformist thought swept through it last election season. The extensible web agenda, which I’ve spoken about previously, has been adopted into their vision for the web’s foundations and informed recent spec work across the W3C. The TAG even moved its deliverables onto GitHub, allowing better collaboration with and transparency to developers.
But there’s always more to do. The web is slowly but surely coming into its own as a serious modern development platform—one which can compete with native apps across the board. New APIs, new primitives, and new tools are very much necessary to make our open platform as attractive to developers and users as it could be. To lure them away from the walled gardens of closed app stores and vendor-proprietary development platforms, we must provide something better.
The TAG is in a unique position to oversee these efforts, with its charter to steward the evolution of web architecture and coordinate with other relevant groups like Ecma TC39 and the IETF. As such, I’m excited to be running for TAG membership in this newest election cycle.
Over the last year of my increasing involvement in web standards, I’ve found two things to be paramount: developer involvement, and a focus on solid low-level primitives. Independent of any formal role in the process, I have and will continue to champion these causes. My nomination by the jQuery Foundation to serve on the TAG only allows me to advocate them in a more formal role.
As a web developer myself, I experience the joys and disappointments of our platform every day. Some of you might think it’s all disappointments—and I can certainly sympathize, given our day-to-day frustrations. But one of the more eye-opening experiences of the last few months has been working alongside an experienced Java developer, new to the web platform, and seeing his almost childlike glee at how easy it is to produce complex, interactive, and robust UIs. More generally, when I think on what I actually do for a living at Lab49—produce complex financial trading and analysis systems, built on the open web platform—it’s hard not to be amazed. We’ve come a long way from the time when only desktop apps were considered for serious work. Now all our clients want cross-browser and cross-device web applications, that they can access from any computer at any time, with shareable URLs and responsive experiences and all the other things that come with the web.
To enable developers to build such increasingly powerful experiences, we need to listen to them. That’s why I spend a lot of time speaking at and traveling to developer conferences, or being involved on Twitter, on IRC, and on GitHub, with the community. I recently gave a talk specifically on how to get involved in web standards, and have been working constantly to get developer feedback on missing features or in-progress specs since then.
Developers are a tricky bunch, as many have been trained to ignore standards bodies and simply hack together their own solutions. They’re used to being ignored themselves. But times are changing. The extensible web manifesto guides us to supply the web with the low-level features developers need, and then to listen to them and roll what they build back into the platform. The TAG’s role is helping to guide this overall process, and I hope to bring along my experience listening to and learning from the developer community.
Which brings us to the issue of low-level primitives. Node’s great success comes in a large part from its focus on providing such primitives: things like standard patterns for binary data, for asynchrony, or for streaming. On top of these they’ve built a standard library that should be the envy of any platform in both its small size and in its power.
Of course, the web platform must by necessity evolve via consensus, and so more slowly than Node. But this gives us the benefit of watching them run out ahead of us, make mistakes, and then come back with field reports on how it went. As such we are getting typed arrays instead of buffers; promises instead of error-first callbacks; and intelligently-designed streams instead of backward-compatible evolved ones. And it’s no coincidence that I’ve been involved in both the promises and streams efforts, as I’m very passionate about ensuring that these foundational pieces of the platform are solid enough to build on and have learned from experiences implementing them elsewhere.
But we’re still in our infancy when it comes to building on these primitives. We need to tie them together with the rest of the web platform. In short, we need to get to the day when the
http.get("http://example.com/video.mp4") .pipe(videoProcessingWebWorker) .pipe(document.query("video"))
example is not just a dream, but is reality.
In my view, it’s the TAG’s job to get us there. The cross-group coordination issues necessary to make visions like this a reality are a large part of the TAG’s charter. We can provide a high-level vision, fueled by our interaction with the developer community, for extending the web forward. And all the while, I’ll be down in the trenches, both gathering feedback to help shape this vision, and working on specifications and interfacing with implementers to make it happen.
If this sounds like progress to you, I’d appreciate your organization’s vote.