IE11 died and nobody noticed
I found a conditional comment in a template last week. It still isn't quite over.
Today’s the day. Internet Explorer 11 is out of support, and on most machines launching it now redirects you to Edge.
I opened a client template last week, on a site we still maintain, and found this about 11 lines down:
<!--[if lt IE 9]>
<script src="/js/html5shiv.min.js"></script>
<script src="/js/respond.min.js"></script>
<![endif]-->
A shim to make the browser recognize <section> and <article> as elements, and a polyfill so it would honor media queries. Behind a conditional comment, which is a syntax that stopped working ten years ago in IE10 and which I typed from muscle memory for years.
That block has been on that site since 2014 and has done nothing at all since about 2016. Deleting it was the only ceremony I had planned.
What actually ends
Not just a browser. A model.
IE was the last major browser that shipped as a component of an operating system, on the operating system’s schedule. You didn’t update it, you updated Windows, or your IT department did, or nobody did. Which is why versions of it hung around for a decade: it was furniture rather than software.
Everything else updates itself now, silently, every few weeks. That’s the actual change, and it happened years ago, and today is a formality.
And with it goes a body of knowledge that a generation of us carried around and can now let go. The double-margin bug on floated elements. zoom: 1 to trigger a rendering mode nobody could explain. The clearfix. Flexbox with a prefix and a different property name and about six behavioral bugs. Grid with -ms- and no auto-placement. Polyfills for promises, for fetch, for Array.from, for object-fit, for classList. A whole second stylesheet for the layout that couldn’t use the layout.
I could still write most of that from memory. I would rather not have to.
I could still write the clearfix and the double-margin fix from memory, and that fact is not a skill, it's a scar.
The bill
I’ve been trying to work out what it actually cost, and the honest answer is that nobody can, because it was never a line item anywhere.
My rough estimate, over the last decade of front-end work I’ve been near: somewhere between 5 and 15% of the effort on any project with a design in it. Not a tax you paid once. A tax on every layout, every form, every interaction, every release, forever.
But the bigger cost wasn’t the workarounds, it was the delay. Grid shipped in three engines in March 2017 and I wrote a very excited post about it, and then most of my client work didn’t use it properly until about 2020, because there was a fallback to build and a browser to check and it was easier not to. Custom properties, the same. Three or four years of a better way of working, available and declined, across an entire industry, because of one browser’s presence in a support matrix.
That’s the thing I’d want somebody to weigh next time. The visible cost of supporting an old browser is the code you write for it. The invisible cost is everything you don’t do at all.
Except it isn’t over
Now the deflating part, and it’s the reason for the title.
Enterprises still have internal applications that only work in IE, thousands of them, built between about 2003 and 2013 by consultancies that no longer exist, and those applications still run the county offices and the hospitals and the logistics firms I was writing about in 2019. Nobody is rewriting them.
So the compatibility mode inside Edge continues, and Microsoft have committed to supporting it for years yet. The engine is still there. It’s just in a room now, behind a policy, for specific sites on a list.
Which is a genuinely good piece of engineering and it’s also why the death isn’t clean. The browser is gone from the consumer web and the burden has been enclosed rather than removed, and there are developers whose entire job is inside that enclosure and who will be there for a decade.
Being fair to it
There’s a version of today that’s just dunking, and I’ve done plenty of that over the years and don’t feel like it now.
IE6, when it came out, was a strong browser. It shipped things nobody else had. The problem wasn’t that it was bad, it was that it won completely and then stopped, for five years, because there was no commercial reason to continue. That’s a business decision, made by people, and the developers who’d built it were mostly reassigned.
And Microsoft’s conduct since has been better than it had any obligation to be. They built a new engine, they adopted somebody else’s, they contributed to the standards process properly, and at one point their own security lead published a post telling the world not to use their browser as a default. That last one was useful to me in client meetings and I’ve never seen another vendor do anything like it.
What I’d keep
One thing, and I mean it.
Supporting a browser that couldn’t do what the others could is what taught me progressive enhancement, and not as a philosophy. As a method, with a base layer and enhancements on top, because there was no alternative. Every site I built had to work in something underpowered, so I learned to build the working version first and decorate it afterward.
That discipline is why the sites I build now don’t fall over when a script fails to load, and it wasn’t virtue, it was IE. I’d worry a little about the people learning this in an environment where every target browser can do everything, because the failure cases haven’t gone away, they’ve just stopped being represented by a browser with a name.
Twelve lines, including a blank one
That’s what the conditional comment came to. I deleted it.
There’ll be someone starting this year who never writes a single line for it, and that’s the real ending, rather than today. Not a retirement date. The moment nobody in the room remembers why the clearfix is called that 🥲