The Second Age of Web Development
Tags: webdev, javascript, frontend
Published: 2021-01-01 21:36:45

---
title: The Second Age of Web Development
series: From Classicism to Metamodernism — A Short History of Web Development
published: true
description: This article covers the Second Age of Web Development, the period that spans between the First and Second Browser Wars
tags: webdev, javascript, frontend
cover_image: https://i.pinimg.com/originals/4f/8b/ed/4f8beddce0eb03808a88045f752e23a0.jpg
---

_Cover image: A sketch of primate origins from Charles Darwin's notebook, dated 21 April 1868_

The Second Age of web development is the period that spans between the [First][first-browser-war] and [Second Browser Wars][second-browser-war], at a time when Microsoft Internet Explorer was the dominant web browser (1998-2012).

<!-- References -->

[first-browser-war]: https://en.wikipedia.org/wiki/Browser_wars#First_Browser_War_(1995%E2%80%932001)
[second-browser-war]: https://en.wikipedia.org/wiki/Browser_wars#Second_Browser_War_(2004%E2%80%932017)

## The First Browser War and the Dark Ages

Lack of standardisation, compatibility issues between browsers, incomplete support for the young [CSS] standard, and creeping featuritis with vendor-specific HTML tags ([BLINK](https://en.wikipedia.org/wiki/Blink_element)!!! [MARKEE](https://en.wikipedia.org/wiki/Marquee_element)!!!) led to the [First Browser War][first-browser-war] between the two major web browser providers, [Netscape] and Microsoft. The original vision of the Web as a content creation and distribution was lost. Instead, the Web was now seen as a mere distribution channel for desktop-esque enterprise apps and online minigames. And let’s face it, when it came to enterprise- and consumer-oriented software development, the Web standards were simply too immature and unstable to compete with full-featured authoring tools such as [Macromedia Flash][flash] (which, ironically, used its own dialect of JavaScript called [ActionScript]) or professional software platforms such as [Java Applets][java-applet] or Microsoft [ActiveX]. Web pages became static shells for Flash ad banners, online minigames, and proprietary software plugins. HTML became an output target for WYSIWYG editors such as [Macromedia Dreamweaver][dreamweaver]. JavaScript got its lasting reputation of a slow, memory-hungry, crash-prone toy language for hobbyists. Only fools and die-hards would still hand-code their pages, or so said Serious People. The web was regressing to the benefits of proprietary software.

Milestones:

- [HTML 4.0][html-4.0] (1997)
- [XHTML][xhtml] (2000)

Core value: territorial conquest

Key features:

- Web pages as a software distribution medium/application container/output format

Emblematic software:

- [Macromedia Flash][flash]
- [Macromedia Shockwave][shockwave]
- [Macromedia Flex][flex]
- [Macromedia Dreamweaver][dreamweaver]
- [Microsoft Frontpage][frontpage]
- [Microsoft ActiveX][activex]
- Browser plugins
- [Altavista search engine][altavista]

<!-- References -->

[java-applet]: https://en.wikipedia.org/wiki/Java_applet
[java-servlet]: https://en.wikipedia.org/wiki/Jakarta_Servlet
[netscape]: https://en.wikipedia.org/wiki/Netscape
[html-4.0]: https://www.w3.org/TR/1998/REC-html40-19980424/
[xml]: https://en.wikipedia.org/wiki/XML
[xhtml]: https://www.w3.org/TR/xhtml1/
[css]: https://en.wikipedia.org/wiki/CSS
[flash]: https://en.wikipedia.org/wiki/Adobe_Flash
[shockwave]: https://en.wikipedia.org/wiki/Adobe_Shockwave
[flex]: https://en.wikipedia.org/wiki/Apache_Flex
[dreamweaver]: https://en.wikipedia.org/wiki/Adobe_Dreamweaver
[frontpage]: https://en.wikipedia.org/wiki/Microsoft_FrontPage
[activex]: https://en.wikipedia.org/wiki/ActiveX
[altavista]: https://en.wikipedia.org/wiki/AltaVista
[actionscript]: https://en.wikipedia.org/wiki/ActionScript
[3tier-architecture]: https://en.wikipedia.org/wiki/Multitier_architecture#Three-tier_architecture

## The Renaissance Period

The post-browser war era was a period of stagnation, dominated by [Microsoft Internet Explorer 6][ie6] whose market share remained unchallenged for over half a decade. The web standards efforts led by the W3C were so moribund that Microsoft decided to push their own proprietary [tools][wpf] and [formats][xaml] for application development, deeply integrated into their Windows operating system. Fearing the death of the Open Web envisioned by its creators, a group of community members formed the [Web Hypertext Application Technology Working Group (WHATWG)][whatwg] in 2004 to work on a new [HTML5] standard, improve and enrich existing standards with common practices (including proprietary ones such as Microsoft [XMLHttpRequest]), and open a new era of community-driven progress. This 15-year effort led to the contemporary web that we all know and cherish. This didn’t go without pain, though, as the dominance of the Microsoft Internet Explorer and its substandard [Trident Engine][trident] plagued the life of web developers with interoperability issues for many years. The launch of [Mozilla Firefox][firefox] in 2004 was the first serious effort to challenge Internet Explorer's hegemony, but it was the creation of [jQuery] in 2006 that really opened the era of widespread frontend development with backward-compatible, browser-agnostic APIs for DOM manipulation and web service communication.

The increasing complexity of web applications led to the development of full-stack frameworks with heavy emphasis on the backend and close integration of the frontend, following the [layered 3-tier architecture model][3tier-architecture]. [J2EE][j2ee] then [JSF] extended the Java backend [servlet][java-servlet] model with component models inspired by monolithic desktop applications. On the other side of the spectrum, [Ruby on Rails][ruby-on-rails] aimed at simplifying the development of standards-based full-stack applications, centered on the [convention-over-configuration] philosophy and on design patterns such as [Model-View-Controller (MVC)][mvc].

Milestones:

- [WHATWG][whatwg] (2004)
- [SVG][svg] (2001)
- [SOAP][soap] (2003)
- [DOM Level 3][dom3] (2004)
- [Ajax][ajax] (2005)
- [Acid2][acid2] (2005)
- [jQuery][jquery] (2006)
- [HTML5 living standard][html5] (2007)
- [CSS][css] [Level 2][css2] (1998) / [Level 2.1][css2.1] (2011)

Emblematic software:

- [Microsoft Internet Explorer 6.0][ie6]
- [Mozilla Firefox][firefox]
- [Bootstrap]
- [jQuery] and [jQuery UI][jquery-ui]
- [script.aculo.us]
- [MooTools]
- [Ruby on Rails][ruby-on-rails]
- [Symfony]
- [Laravel]
- [Django]
- [J2EE]
- [JSF]
- [Eclipse]
- [Google Search][google-search]

### The Renaissance Web model

The Renaissance Web is a universal application model where all layers operate on web standards without any reliance on proprietary technology. Web pages are built using standard HTML5, JavaScript and CSS, with [Graceful Degradation][graceful-degradation] in mind. The [AJAX] model built on the [XMLHttpRequest] API allows asynchronous communication with web services hosted on applicative or third-party servers. Whenever possible, full page reloads induced by standard web forms and links are replaced with dynamic AJAX calls and partial page updates for a better user experience. Web services can use structured, object-oriented protocols such as [SOAP], or simple payload formats such as [JSON] or [XML]. Application logic is still mostly implemented on the backend, but the frontend is increasingly more complex and reliant on third-party libraries for interactivity, dynamic DOM generation, and GUI components. Frontend and backend development complexity tend to converge.

Core value: open community

Key features:

- Frontend libraries
- Asynchronous client-server communication
- Web service protocols
- Graceful Degradation
- Full-stack and component-based frameworks
- Monolithic applications

<!-- References -->

[ie6]: https://en.wikipedia.org/wiki/Internet_Explorer_6
[wpf]: https://en.wikipedia.org/wiki/Windows_Presentation_Foundation
[xaml]: https://en.wikipedia.org/wiki/Extensible_Application_Markup_Language
[whatwg]: https://en.wikipedia.org/wiki/WHATWG
[html5]: https://en.wikipedia.org/wiki/HTML5
[xmlhttprequest]: https://en.wikipedia.org/wiki/XMLHttpRequest
[json]: https://en.wikipedia.org/wiki/JSON
[trident]: https://en.wikipedia.org/wiki/Trident_(software)
[firefox]: https://en.wikipedia.org/wiki/Firefox
[jquery]: https://en.wikipedia.org/wiki/JQuery
[j2ee]: https://en.wikipedia.org/wiki/Jakarta_EE
[jsf]: https://en.wikipedia.org/wiki/Jakarta_Server_Faces
[ruby-on-rails]: https://en.wikipedia.org/wiki/Ruby_on_Rails
[convention-over-configuration]: https://en.wikipedia.org/wiki/Convention_over_configuration
[mvc]: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
[whatwg]: https://en.wikipedia.org/wiki/WHATWG
[svg]: https://en.wikipedia.org/wiki/Scalable_Vector_Graphics
[soap]: https://en.wikipedia.org/wiki/SOAP
[dom3]: https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
[ajax]: https://en.wikipedia.org/wiki/Ajax_(programming)
[acid2]: https://en.wikipedia.org/wiki/Acid2
[jquery]: https://en.wikipedia.org/wiki/JQuery
[html5]: https://html.spec.whatwg.org/
[css2]: https://www.w3.org/TR/1998/REC-CSS2-19980512/
[css2.1]: https://www.w3.org/TR/CSS21/
[bootstrap]: https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework)
[jquery-ui]: https://en.wikipedia.org/wiki/JQuery_UI
[script.aculo.us]: https://en.wikipedia.org/wiki/Script.aculo.us
[mootools]: https://en.wikipedia.org/wiki/MooTools
[symfony]: https://en.wikipedia.org/wiki/Symfony
[laravel]: https://en.wikipedia.org/wiki/Laravel
[django]: https://en.wikipedia.org/wiki/Django_(web_framework)
[eclipse]: https://en.wikipedia.org/wiki/Eclipse_(software)
[google-search]: https://en.wikipedia.org/wiki/Google_Search
[graceful-degradation]: https://en.wikipedia.org/wiki/Graceful_degradation

## The Modernist Period

With the rise of [jQuery], Web developers began to envision a model where the Web client would no longer be limited to a thin presentation layer, but become a full-featured application platform. But complex application development requires structure, and the jQuery model was simply not structured enough for this purpose. The release of the first frontend frameworks such as [Knockout] and [Backbone.js], soon followed by [AngularJS], [Ember.js] and [React], opened the era of the [Single-Page Application model (SPA)][spa] with client-side routing, as an alternative to traditional Multi-Page-Applications (MPA) with server-side routing.

As the web standards gained in maturity and adoption, [developers and users started to revolt][youtube-conspiracy-against-ie6] against the still-dominant Microsoft Internet Explorer. The [Acid3] test, implicitly aimed at IE, became the de-facto standard for feature comparison and standards adoption between browsers. When Google launched their own browser [Chrome] in 2008, IE had 70% of the browser market share. Four years later, this share had dropped to 35% while Chrome finally took the lead in the browser race. Browser vendors stopped distributing their software with strict versioning schemes in favor of auto-updates that kept them in "[Evergreen][evergreen-browsers]" state with the latest web features and security fixes. Soon browser competition would drive innovation again.

The rise of the rich-client model drove an opposite movement on the server-side. As the frontend responsibilities increased, the backend responsibilities shrank to become more [API-centric][web-api]. The full-stack Renaissance Web model was no longer fashionable, and frontend and backend technology stacks started to diverge. [NoSQL databases][nosql] became viable alternatives to traditional [SQL relational databases][sql] thanks to their more flexible model and their native support for [JSON].

Launched in 2009, the first version of [Node.js][node.js] (re)introduced JavaScript as a general-purpose language for server environments (earlier server software such as [Netscape-Enterprise-Server] had this capability). Based on the same [V8 engine][v8] as the Chrome browser, this was the first time since the beginnings of the Web that the same runtime environment was widely and consistently available on both client- and server-sides, with tools like [Browserify] and [webpack] bridging the gap and turning JavaScript from a simple client-side scripting language to a full-stack development environment. The [Node Package Manager (npm)][npm] soon grew as the _de facto_ dependency manager and distribution network for the JavaScript ecosystem. In a strange inversion of History, JavaScript had become a server-side language used to produce client-side and full-stack Web applications.

Milestones:

- [REST][rest] (c. 2000)
- [JSON][json] (2002)
- [Chromium V8][v8] (2008)
- [ECMAScript 5][es5] (2009)
- [Node.js][node.js] (2009)
- [npm][npm] (2010)
- [ECMAScript 5.1][es5.1] (2011)
- [Evergreen Browsers][evergreen-browsers] (2013)

Emblematic software:

- [Mozilla Firefox][firefox]
- [Google Chrome][chrome]
- [Bower]
- [Node.js]
- [NPM]
- [Mustache]
- [Knockout]
- [Backbone.js]
- [AngularJS]
- [Ember.js]
- [React]
- [Vue.js]
- [gulp]
- [Browserify]
- [webpack]
- [Express.js]
- [MongoDB]
- [Apache Cassandra][cassandra]
- [Spring Framework][spring]

### The Modernist Web model

The Modernist Web is a complete reversal of the [Classical][classical-period] and [Post-Classical][postclassical-period] Web development models, shifting the complexity from the backend to the frontend. The Modernist Web relies on powerful but complex toolchains and frameworks that provide the technical foundations for the development of applications with strict separation of concerns at every level.

The typical Modernist Web client is a self-contained [SPA] that communicates with an API server using authenticated JSON-based protocols. Client-side scripting is no longer optional but an essential runtime environment for the frontend, to the point that the main page is often an empty HTML page with framework bootstrap script. UI generation, routing, web service orchestration, state management, etc., are the responsibilities of the frontend. The client code is asynchronous and uses template data-binding. Applications target [Evergreen Browsers][evergreen-browsers] and the newest Web standards, with polyfills for older clients. Web assets served to the clients are no longer authored directly by frontend developers, but are instead produced from source files by an elaborate build process that involves configuration, transpilation, minification, and bundling.

With the shift from [Server-Side Rendering (SSR)][ssr] to Client-Side Rendering (CSR), the backend becomes an API server whose main responsibilities are data management and business rules, In the simplest cases, backends are thin [CRUD] layers over a data storage engine, an architectural pattern known as ["Thin Server Architecture"][thin-server-architecture]. Low-traffic applications continue to use traditional server technologies, high-traffic applications (such as mobile consumer applications) often adopt stateless event-driven models for scalability.

Core value: separation of concerns

Key features:

- Node.js-based ecosystem and toolchains
- Frontend MVC frameworks
- Single-Page Applications with client-side routing and rendering
- Stateless web service protocols
- UX-centric, responsive frontend
- API-centric backends
- CRUD or NoSQL databases

<!-- References -->

[spa]: https://en.wikipedia.org/wiki/Single-page_application
[knockout]: https://en.wikipedia.org/wiki/Knockout_(web_framework)
[backbone.js]: https://en.wikipedia.org/wiki/Backbone.js
[angularjs]: https://en.wikipedia.org/wiki/AngularJS
[ember.js]: https://en.wikipedia.org/wiki/Ember.js
[react]: https://en.wikipedia.org/wiki/React_(web_framework)
[vue.js]: https://en.wikipedia.org/wiki/Vue.js
[acid3]: https://en.wikipedia.org/wiki/Acid3
[chrome]: https://en.wikipedia.org/wiki/Google_Chrome
[evergreen-browsers]: https://yeti.co/blog/evergreen-web-browser-a-web-browser-that-automatically-updates-itself/
[web-api]: https://en.wikipedia.org/wiki/Web_API
[sql]: https://en.wikipedia.org/wiki/SQL
[nosql]: https://en.wikipedia.org/wiki/NoSQL
[node.js]: https://en.wikipedia.org/wiki/Node.js
[netscape-enterprise-server]: https://en.wikipedia.org/wiki/Oracle_iPlanet_Web_Server
[v8]: https://en.wikipedia.org/wiki/V8_(JavaScript_engine)
[browserify]: https://en.wikipedia.org/wiki/Browserify
[webpack]: https://en.wikipedia.org/wiki/Webpack
[npm]: https://en.wikipedia.org/wiki/Npm_(software)ications.
[rest]: https://en.wikipedia.org/wiki/Representational_state_transfer
[v8]: https://en.wikipedia.org/wiki/V8_(JavaScript_engine)
[es5]: http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262%205th%20edition%20December%202009.pdf
[es5.1]: https://www.ecma-international.org/ecma-262/5.1/
[bower]: https://bower.io/
[mustache]: https://en.wikipedia.org/wiki/Mustache_(template_system)
[gulp]: https://en.wikipedia.org/wiki/Gulp.js
[express.js]: https://en.wikipedia.org/wiki/Express.js
[mongodb]: https://en.wikipedia.org/wiki/MongoDB
[cassandra]: https://en.wikipedia.org/wiki/Apache_Cassandra
[spring]: https://en.wikipedia.org/wiki/Spring_Framework
[ssr]: https://en.wikipedia.org/wiki/Server-side_scripting
[crud]: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete
[thin-server-architecture]: https://en.wikipedia.org/wiki/Single-page_application#Thin_server_architecture
[classical-period]: https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-classical-period
[postclassical-period]: https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-postclassical-period
[youtube-conspiracy-against-ie6]: https://www.androidpolice.com/2019/05/02/the-story-of-how-a-conspiracy-inside-youtube-helped-kill-internet-explorer-6/