Language Sprawl Considered Harmful

It’s a common scenario in software development: a new project is starting up, and the team is faced with the decision of which languages and tools to use. While it might seem like a good idea to let every team choose their own technologies, the long-term costs of this approach can be significant.

One of the main drawbacks of letting every team choose their own languages and tools is the lack of flexibility it creates within the organization. When each team is using different technologies, it becomes much harder to swap developers between teams. This can be a major hindrance to the organization, as it limits the ability to balance workloads and adapt to changing needs. For example, if a team is short-staffed, it can be difficult to find someone with the necessary skills to fill the gap if they are using a completely different set of technologies.

Another issue with this approach is the lack of common reuse. While microservices can certainly help with reuse, they are not a magic fix-all. Having shared languages and technologies across projects allows for greater reuse at the developer, function, pattern, and sanity levels. This can save time and effort, as developers do not have to constantly learn new technologies and can instead focus on building and improving upon existing systems.

In addition to the practical concerns, letting every team choose their own languages and tools can also have a negative impact on team morale. Imagine working in a company where every team is using a different set of technologies. It can be overwhelming and frustrating for developers to constantly have to learn new tools and languages, and it can create a sense of disconnection between teams. This can lead to a lack of collaboration and a decrease in overall productivity.

Ultimately, while it may be tempting to let every team choose their own languages and tools, the long-term costs can add up and become a hindrance to the organization. Having shared languages and technologies can provide flexibility, scalability, and reuse, all of which are critical for the success of any software development project. It’s important to carefully consider the long-term impact of technology choices and strive for a balance that meets the needs of the organization as a whole. So, it’s better to have a shared technology stack across the organization.