Embracing Pragmatism Without Losing the Craft

06 Dec 24 Colette Wilson Wyatt

SHARE:

I recently watched an episode from the YouTube series, Bad at CSS, where Adam Argyle touches on the idea of crafters vs installers. He describes needing a fence built and realising there are two types of contractors: crafters and installers – each with entirely different approaches, outputs, and even choices in material.

The crafter, for example, might choose wood for its warmth and traditional appeal, while the installer may favour a manmade composite for its durability and cost-effectiveness. Adam uses this analogy to describe creators of the web. The crafters are the ‘artisans’ of the web. They use the web’s raw, fundamental materials to create bespoke solutions. Installers, by contrast, leverage existing frameworks and packages to prioritise speed and efficiency.

He rightly concludes that we need both types of people building the web, and that got me thinking about our approach here at Tilt.

I tend to see myself as a crafter but the truth is, in most contexts, it’s far less binary than Adam’s original premise suggests. Most developers don’t neatly fit into either one category or the other. When you work under the constraints of deadlines and budgets, necessity demands a balance between the two approaches.

Even so, I like to believe that I – and all of the devs at Tilt – have a crafter mentality, which leads me to a new idea: the pragmatic crafter.

The Pragmatic Crafter

Finding the balance between crafting and delivering projects on time and to budget is a challenge that I think will resonate with a lot of developers. So, you might be asking, “What is a pragmatic crafter?”

Honestly, I’m not sure. I came up with it to justify allowing myself to take shortcuts, either because of time constraints or because, in some situations, it just feels unnecessary to “reinvent the wheel” as the saying goes.

Lately, I’ve been reflecting on the crafter philosophy and what it means to be a crafter. It implies a certain mastery of practice, characterised by quality, and suggestive of a level of time and care invested in the making. The outcome is often a thoughtful and well-engineered display of competence – the intersection of experience, care, and capability.

I might even go further, saying, it is a mindset rooted in curiosity, a desire to build from the ground up, and a focus on understanding the detail: qualities held in high regard across the different disciplines at Tilt.

For years platforms like WordPress and Squarespace have made it easy – even for non-technical people – to create a website in just a few clicks. The result can be exactly what some small businesses and individuals need: a functional space to direct customers towards.

Crafting, however, looks beyond fulfilling a need at its most basic level. Those who craft strive to elevate the experience by creating something that is not only functional but also feels intuitive and tailored to its specific purpose. It is a commitment to creating something of quality.

Crafting Within Constraints

Whether it’s healthy or not – a topic perhaps for a different blog – a significant part of my identity is wrapped up in being good at my job, or at least trying to be. For me, that means striving to keep my knowledge up-to-date and continually pushing myself to be better at my craft. However, in a fast-paced agency environment ‘crafting’ is not always practical. Agency work often demands efficiency, and taking the time to build everything from the ground up is not an option.

A harsh reality is that clients often aren’t particularly concerned with the mechanics behind a thing. Only that it meets their needs. Of course, if asked directly, most people would agree that they want their product to be well-built, but the truth is clients are often time-poor and in need of a solution as quickly as possible – if not sooner.

Of course, adopting an installer mentality doesn’t have to mean abandoning a crafter mentality.  As a result, I’ve embraced a hybrid approach; a workflow that sits somewhere between crafting and installing. I’m certainly not touting this as groundbreaking advice, I don’t doubt that most developers already work in a similar way. This blog is simply an introspective account of our process.

By recognising our existing skills and knowledge and reflecting on our priorities, we identified where a ready-made solution, such as Next.js, might be the best choice. Leveraging a framework that handles some of the more tedious and time-consuming aspects of developing a web app allows us the freedom to focus on the areas where crafting can add the most value. Instead of solving infrastructure challenges like routing and static generation, we can concentrate on writing bespoke CSS, refining the user experience or – in the case of a recent project – developing custom, interactive, and fully accessible data visualisations.

But what is a priority for me may not necessarily be a priority for you. This blog isn’t about outlining a prescriptive set of steps for implementing my setup. Instead, it’s a gentle encouragement to reflect on your own priorities and to ask yourself: is your process allowing you to focus on what truly matters to you?

With all that being said, there is a sea change coming in the form of AI. To be clear, I am certainly not avoiding AI; ChatGPT and I have become very well acquainted. But I do approach it with caution.

What Does AI Mean for Web Crafters?

The topic of AI’s challenges and opportunities for web crafters deserves a dedicated blog. But it would feel remiss not to touch on it here.

In his recent blog post, On Not Using Copilot, Tom MacWright discusses (not in this specific context) the “crushing weight of complexity” that has become an accepted part of modern development. Large Language Models (LLMs) not only reflect but also contribute to this ever-growing complexity. With reference to Paul Ford’s article in Wired, Tom makes the point that AI is shameless, writing code with little regard for conciseness.

When coupled with another well-documented quirk of AI – the hallucinating chatbot, dishing out false information with the unreserved confidence of my 5-year-old niece insisting that her friend Phoebe’s name is spelt with an F – we start to see that leaving AI to write our code unchecked is, at best, ill-advised. Or – to borrow a Tilt favourite – sub-optimal.

Incidentally, this is something Leonie Watson picked up on in her FFConf talk last month, AI and Accessibility: the Good, the Bad, and the Bollocks.

Then there’s this: Tom laments how his sense of direction has suffered at the hands of GPS. It’s a skill he no longer uses and, as a result, no longer possesses. He speculates that AI will have a similar impact on his ability to write code. According to him, LLM assistants will drive us to think more like managers than engineers, micro-managing a service by continually refining and clarifying our ask in order for it to generate the desired outcome.

While there are benefits too – improved productivity for one – I’m not quite ready to give up a skill, or at least aspects of it, I‘ve spent over a decade learning and refining. That said, I suspect this might not be such a new challenge after all. The question of how AI fits into our workflow is a continuation of the question we started with: how does installing fit into our workflow?

In the end, it’s not about committing to one uncompromising approach over another. You don’t have to be all-in on crafting, installing, or AI. They’re all simply tools at our disposal to use or not as and when it makes sense.