Developers spend a lot of time discussing and comparing the programming languages and technologies we use. Why wouldn’t we? Writing code is what we do all day long. However, we rarely talk about the specific strengths and weaknesses of our tech with non-programmers, either because we feel no one else is interested, or because we think it’s too technical.
In a cross-disciplinary digital agency this attitude is flawed. After all, there’s a lot riding on the technology an agency adopts. Designers can be limited or empowered by it. Account managers have to sell it and explain it. Strategists need to plan around it. Content creators are required to work with it. And most importantly, clients have to be happy with it.
In terms of backend technology, a lot of what we build at Hardhat is constructed in a programming language called Ruby, using a framework named Rails (aka Ruby on Rails). We also employ technologies like .NET and PHP to take advantage of content management systems and automation software provided by applications like Sitecore and Wordpress.
But what are these things? And why do we choose to use them?
Before we answer those questions, let’s first take a look at a few concepts required to discuss backend technology.
A low-level programming language is one that is “close to the hardware”. This means it maps efficiently to machine language, which is what the physical machine actually understands. Low-level languages can therefore run very quickly and are good for software with high performance requirements, such as gaming or graphics software.
They are not typically used for web development for a number of reasons, including the fact that they can be difficult and time consuming to work with, and they are not generally part of the ecosystem of website technologies. However it’s import to know they exist, in order to understand the benefits we get from using high-level languages.
When compared to low-level languages, high-level languages prioritise usability over performance. High-level languages are more abstract and are often built from low-level languages (or in some cases, other high-level languages). Ruby, for example, is built with a lower-level language called C.
Almost all websites are constructed using a high-level language. High-level languages allow programmers to focus on quickly building maintainable programs, without having to focus on low-level concepts like memory management.
Frameworks are another level of abstraction above high-level languages. Frameworks are usually constructed from high-level languages, and they provide structure for a program: they give developers things “for free” by providing a kind of scaffold to build around.
A good framework greatly increases the speed of development and the maintainability of a project.
Examples of web frameworks include Rails (built in Ruby), Django (Python), and Laravel (PHP).
Applications are fully functioning programs designed to perform specific functions or tasks.
In the context of website development, developers can configure or build upon an existing application to augment, or even produce a website.
WordPress is an example of a common application developers leverage. At its most basic, WordPress allows non-technical users to create and manage a website or blog, but it is built in a way that developers can customise or modify what it does. This flexibility gives the developer a degree of control over the resulting website.
Examples of website applications include WordPress, Shopify, and Sitecore.
So why do we use the technologies we do?
Ruby on Rails
Website developers definitely have strong preferences regarding which languages they prefer to use. For example, one developer might prefer the expressiveness of Ruby syntax, while others prefer the directness of Python syntax, but the reality is they can both be used to build great (even outwardly identical) applications.
However, when deciding how to build a website, the question of “which language to use” is rarely the right question. Usually the decision is made based on the things that may come with a language, such as a particular framework or application.
Things you want to think about when choosing your tech stack are:
size of the developer community
For Hardhat, it’s not so much Ruby, but Rails, that regularly ticks the right boxes, and empowers us to build great web applications.
Rails is a very popular open-source framework that focuses on convention over configuration. This focus on convention allows any developer to sit down at a project and understand how the codebase is structured, even if that developer has never seen the project before.
Rails also has a huge developer community supporting it, meaning it is constantly evolving and there are a lot of resources available to help us do our job. It allows developers to build quickly and in a way that is very flexible and scalable. Clients can get exactly what they want, with very few limitations imposed.
Rails has been used to construct massive websites like Twitter, Shopify and SoundCloud.
Most of the web apps Hardhat builds are bespoke, we build them from the ground up to suit the needs of our clients. Often that involves using Ruby on Rails, but we like to think of ourselves as agnostic in terms of our tech stack: we choose the right technology for the job, rather than being devoted to one stack.
In the past, we’ve used PHP to construct applications using WordPress. But WordPress can impose limitations in terms of scalability, security and flexibility that make it hard to build large, customised websites. As such, we now use it infrequently.
Some large corporations desire a well-established proprietary content management system and a predefined set of marketing automation tools for their websites. For organisations like this, Sitecore can make a good option.
Being proprietary, there is a financial cost associated with implementing Sitecore (unlike an open-source framework like Rails, which is free to use), so it’s not for everyone. But along with a sophisticated suite of built-in tools and features, it also comes with service level agreements and other assurances that can make it appealing.
The importance of constant experimentation
If there’s one thing website developers need to get used to, it’s the constant evolution of our technology. The things we built five years ago already seem like ancient artifacts. You can’t get too attached to a particular tech stack: just because Hardhat is currently using Ruby on Rails, doesn’t mean we’ll be using it in two years’ time.
This is why continual, controlled experimentation is so important and we are constantly building prototypes from new technologies. For example, we just deployed a small, working application built in a new language called Elixir. We’re not ready to use Elixir for a full production website just yet, but before that time comes, we’ll definitely be talking about it with whoever will listen.