I attended a tech meeting yesterday where I had my first experience of an angry developer complaining to me about "HTML5 is utterly broken" just because I work at Mozilla.
YAY! #achievementunlocked, as they say nowadays.
I couldn't really figure out the exact details of what happened to this person, no matter how hard I tried. He had probably drunk a little bit too much wine, and wouldn't stop repeating something about old flex box model, new flex box model something something, and having to update broken sites afterwards.
I tried to guessexplain to him that maybe he had been using prefixed properties, which he probably shouldn't have done for client work, and that luckily browser makers are steering away from the whole prefixed stuff workflow because of the issues it brings with it, but I don't believe I was loud enough to be authoritative, or that he wanted to listen either. In any case, this got me thinking. As developers and tinkerers with new and shiny stuff, are we being CLEAR ENOUGH that this thing we just released using new and exciting prefixed stuff is built using something akin to plasticine and it might break next week?
We need to be responsible about code we release in the wild, because maybe someone less experienced will look at it, and copy it while thinking that it is a good model, or even more, the way of doing things, because it works on his browser.
Of course I just don't buy his argument that "OMG HTML5 is broken! Things are in flux! This is a massive fuck-up! The biggest fuck-up since the times of HTML 1! We won't be able to sell HTML5 to a client until 2020!". A developer doing client work needs to be aware of what is in development and what is not, and be prepared to assume the risks of using unfinished work---the plasticine might melt, so to speak. It has happened to me before, but I responsibly accept my part of the blame.
And that is why I am terribly happy that browsers are now hiding shiny stuff being preferences. This way we'll avoid cases like the one above, where a client is sold something that works on his browser as of now, but doesn't two years later because the spec has changed and browsers have been updated accordingly. Under this scenario, a developer willing to experiment can play with unfinished functionalities, but can't sell them because his client won't have enabled the feature in his browser.