Polyglot Language Use
Why? It is not a wow this is nice feature, but the ability to use new popular languages expands knowledge and helps define services clearer. The languages themselves are built of common constructs, but each has its own strengths and weaknesses
Point 1 - JavaScript is used everywhere and in all browsers, we also leverage React and various JavaScript libraries to work on the client side. Expanding knowledge of JavaScript for those inclined to build APIs and work with them builds familiarity with the available tools and patterns as well as increases the talent pool of experienced developers that could work with us.
Point 2 - Languages may be general purpose, but most are targeted to a particular set of problems Erlang concurrency (but it's not widely supported so maybe Golang). Golang inspired other languages to adopt things like single binaries across multiple platforms and Docker is written in Go so there is a wealth of information, libraries and focus that would guide use to success with infrastructure. Perhaps less scripts and more compiled cross platform tools.
Point 3 - Using different languages forces oneself to think clearly about messages and boundaries. Say I am communicating with a .NET service using JSON from a python client. I simply cannot re use the model dll from .NET I need to construct the DTO and familiarize myself with the authentication and security meaning I will think clearly about shortcuts, serialization formats, and content. These boundaries promote more robust data exchange and tests that are validated properly on client and server side and discussions about protocols and content negotiation that naturally fall out of API design.
Options to implement
- Use NodeJS based API, heavily favoring hapi as it has a coherent design and dependencies.
- Use golang for infrastructure tooling drop in for any complicated scripts as needed Python Tornado project when there is a need for high performance non blocking communication.
- Use a nice batch processing system like Luigi for integrating with Hadoop or some other large data processing set
Way to achieve
- Open source some projects and work on them at different times? Dedicate 10 - 20 % time for building things? Other large companies do this to avoid having conflict of should I try this out and experiment even if I know how to do it one way already?