I think that completely depends on the flavour of code you write. If you mostly use imperative styles, then the large proportion of your declarations will be `var` and `let`. It definitely makes refactoring harder in the direction you mentioned.<p>Alternatively, for a functional style, you have to have a fairly good reason for using `var` or `let`. I find myself treating them like I&#x27;d treat atoms in Clojure. They end up being the mechanism you use to make controlled side-effects.<p>I&#x27;ll concede that `const` does have a complexity to understand...initially. However once you understand the distinction between assignment and value (you only have to understand it once), then you&#x27;re back to a level playing field between both.<p>From then on, `const` gives you a guarantee about the assignment. Objectively, this guarantee eliminates complexity, you can look at a variable anywhere in a scope and know that it has the same value as at time of declaration (same TDZ exceptions apply). I don&#x27;t see how this could be seen as backwards.