The Hugo Tech Stack: Language
We use JavaScript at Hugo as our primary language. That means that we use JavaScript on the backend, JavaScript for command line scripts, and JavaScript for all of our frontend coding. When and if we build mobile applications, we will definitely start with JavaScript (and then evaluate from there).
Our goal is to build an expert level core competency in JavaScript across every engineering hire we make and, just as importantly, we are not afraid to teach, dialog, and evolve.
Proactively Choosing a Language
Often times, languages are chosen more for convenience than strategic reasons. All too often, I have found myself using a language because it was what the code base founders knew, what the industry recommended, or what was easy to hire for.
The three facets of Hugo engineering decisions (simplicity, transparency, and ease of use) were used when weighing our options. I have been fortunate enough to write production code in a wide array of languages (C, C++, C#, Java, ActionScript, JavaScript, etc.) and, more importantly, have always been a heavy contributor in every code base I have worked in (meaning that I end up having a wide taste of the language, its capacity and nuances, etc.). Just as importantly, I have taught several programming languages both at the university level and for a private FinTech company.
Why JavaScript
When it came time to choose a core language for Hugo, I decided on JavaScript for a few reason:
- The language gets out of your way — Fundamentally, JavaScript is a “simple” language (very few types, very little syntax, follows C-family conventions), meaning that the code is easy to read, mutate, and maintain.
- Wide community support — As the language of the web, JavaScript is ubiquitous, with an ever growing mass of libraries published across distribution networks. Just as importantly, JavaScript has been around for a long time and there are no signs that it is going away anytime soon (a critical aspect when making a decision that will heavily impact overall infrastructure).
- Easy to test — Creating and injecting mocks, spies, stubs, etc. in JavaScript is very straightforward and apparent and there are many mature testing frameworks (and linters, static analyzers, etc.).
- Ever improving — The JavaScript ecosystem evolves at a rapid clip, gaining new libraries, new engine versions, and generally constantly becoming a better, faster language with more sophisticated capabilities. This is a huge advantage for a company making a deep bet like a core programming language.
- Full stack — Finally, JavaScript can be executed across the entire stack. JavaScript is, arguably, the most versatile language in existence, as it can effortlessly (yes, effortlessly) run within micro-services, scripts, in the browser, on mobile, and on embedded systems (see: Esprino). This means less training, it means engineers have more capacity to work across the entire stack, and it means learnings apply to every line of code written at the company.
Why not a language that degrades to JavaScript? The track record for languages that eventually transpile to JavaScript is filled with dead or dying projects. At the end of the day, we know JavaScript is here to stay.
Conclusion
At Hugo, we might not always write JavaScript. There is no way to predict the future and, as with all of our tech choices, this is an ongoing discussion open to new opinions, data points, and needs. But, we feel that it is a pretty safe bet that JavaScript will be around for a good, long time and will enjoy a place in our core competency for equally long.
JavaScript might not be the right language for you (depending on your needs); but, when it comes to building inherently complex systems (like on-demand car insurance) with a small, dedicated, and highly skilled team, we felt that JavaScript was the best solution.
You can find more about the rest of our tech stack here.
Want to know more? Feel free to reach out to me.
And, as always:
We’re hiring! Come work with us.