CoffeeScript is untyped and so is Javascript. This becomes a problem when you have a large code base. There can be hidden errors not covered by unit tests. Refactoring and making modifications is harder. Also, editors can give bettercode completion with typed languages. How shouldyou go about makingtheswitch? In my opinion, the best thing to do is to transition gradually. Rewriting your entire codebase is an enormous project. It can slow down the pace of new features and create endless merge conflicts. +1 as well here, but I don't agree with the foreign looking/not-readable point either. Coffeescript have very clear rules about how it translates to Javascript, and it is fairly easy to recognize the compiled code. The rules are right there, on the frontpage of coffeescript.org. CoffeeScript.compile(code, {transpile: {presets: ['@babel/env']}}). You can also transpile CoffeeScript’s output without using the transpile option, for example as part of a build chain. This lets you use transpilers other than Babel, and it gives you greater control over the process.