ad1

Saturday, December 20, 2014

Spring Framework as a Form of Embrace, Extend, Extinguish

Whether planned or not, premeditated or otherwise, the Java Spring Framework effectively followed/follows an "Embrace, extend, and extinguish" path.

From Wikipedia: also known as "Embrace, extend, and exterminate",[2] is a phrase that the U.S. Department of Justice found[3] and was used internally by Microsoft[4] to describe its strategy for entering product categories involving widely used standards, extending those standards with proprietary capabilities, and then using those differences to disadvantage its competitors.


The strategy

The strategy's three phases are:
Embrace: Development of software substantially compatible with a competing product, or implementing a public standard.
Extend: Addition and promotion of features not supported by the competing product or part of the standard, creating interoperability problems for customers who try to use the 'simple' standard.
Extinguish: When extensions become a de facto standard because of their dominant market share, they marginalize competitors that do not or cannot support the new extensions.


This can also apply to open source projects as with the Java Spring Framework. Spring originally embraced the J2EE standard for the purpose of "fixing" its shortcomings by extending the standards using its own annotations and following its "convention over configuration" tactic. The framework followed this tactic instead of working to change the standard until Spring built applications were so far from being compatible with standard Java Enterprise framework that those shops which embraced it could not afford to not continue to use it and the tools built to support it. Then Spring was touted as "cutting edge" while those that stuck with the standard were backward.


Anytime a tool dictates design such that it becomes required for further changes and future design, you are trapped. You are then the tool.