Four Philosophies behind Technology Choices
This week I have been watching some very enlightening introductory lectures on philosophy. I didn't know much about philosophy, so I found that by contrasting some of the philosophical theories, I gained an insight not just into the meaning of different belief systems, but the reasoning that underpins them. Highly recommended.
While posting to a discussion thread about my current technology stack, I thought about how philosophical theories could help to explain the rationale behind how different people make technology choices. Thus, I present to you: The Philosophy behind Technology Choices.
1. Utilitarian (Webformsianism)
A utilitarian believes that when asked to make a technology choice, the right tool is the one that maximises the result. They are much less concerned with the intrinsic qualities of the technology, and more about the results the technology can bring them. Technology is a means to an end.
A utilitarian will choose whatever technology they think will maximise their result, and have no qualms choosing "lesser" technologies like Web Forms or Silverlight. They aren't afraid of drag-and-drop tools, and they rarely stop to refactor code. If it ain't broke, don't fix it.
You can spot a utilitarian by their use of copious amounts of third-party UI control libraries and messy code organisation.
2. Paternalist (Redmondism)
Paternalists believe in the power of big vendors to provide. The reasoning behind their choices isn't based on subjective evaluation of the intrinsic qualities of each technology, but rather where it came from. While they may still need to make a choice from vendor solutions, their scope of possible options will be limited.
If asked to choose, for example, an ORM, a paternalist will see their options as being limited to Entity Framework, DataSets or Enterprise Library Data Access Application Block. The paternalist would prefer to use poor quality, slow, un-testable technologies while they wait for the Vendor to provide in the next framework release. They may end up with the same conclusion as the other philosophies, but for different reasons.
You can spot a paternalist by examining their NuGet packages folder, which will only contain Microsoft-produced packages.
3. Libertarian (Githubianism)
The opposite of paternalists, libertarians reject the idea of heavy influence from the Vendor. They believe that the Vendor exists to serve them, rather than the other way around. They think developers should be self-sufficient and should be trusted to make good choices without needing to be coerced by the vendor. They see dependence on the vendor as dangerous.
To a libertarian, just as important as the technology choice is the freedom to choose in the first place. When no choice exists, they are happy to write their own. A libertarian would prefer to find open-source solutions to their problems before becoming dependent on a vendor.
You know you are looking at a libertarian because the only Microsoft-produced references in their project are for the .NET framework (and only because they haven't had time to test on Mono).
4. Kantian (Unclebobism)
Followers of Kantianism are the opposite of utilitarians. They believe that a technology choice is right because of the nature of the technology itself, rather than the results it achieves. That is, they believe that some choices are inherently right, and some are inherently wrong, and it doesn't always "depend". While the utilitarian sees technology as a means to an end, Kantianism followers see technology as both an end and a means.
Kantianism followers have a well defined system for evaluating technology: the SOLID principles. They will choose ASP.NET MVC over Web Forms not because MVC is more productive (a utilitarian reason), nor because it is being hyped more by the vendor (the paternalist's reason), but because MVC is much closer to the SOLID principles, and is therefore right (the Libertarian, by contrast, would choose an open source alternative).
When a look at the technology stack behind a project, it's important to understand that there are many possible motivations behind the technology choices. A choice might be justified by its expected results alone, by preference for a vendor, by a preference for retaining control and mistrust of vendors, or by inherent value that we judge to be in the technology regardless of the results. More often than not, any choice is going to be influenced by more than one of these factors.
Which of these theories had a role in your current technology stack? What does it look like? Did we miss any important motivators?
Welcome, my name is Paul Stovell. I live in Brisbane and work on Octopus Deploy, an automated deployment tool for .NET applications.
Prior to founding Octopus Deploy, I worked for an investment bank in London building WPF applications, and before that I worked for Readify, an Australian .NET consulting firm. I also worked on a number of open source projects and was an active user group presenter. I was a Microsoft MVP for WPF from 2006 to 2013.