Begin

I grew up around people drawing, sewing, building, gardening, etc. I admired crafts and trades — it’s cool when people create and design things by hand. And not just by hand, they put skills into it, attitude, sometimes pride or love. In a way, they go beyond “just doing something” and tap into art territory.

Years ago, when I stepped onto the IT path, I expected software engineers to be like craftsmen (like watchmakers or woodworkers, for instance). But recently, I realised I’m in the world of fast fashion.

Between industry and craft

I understand we’re a few industrial revolutions away from the original crafts. We’re in a start-up world with a low germination rate. We MUST be fast or someone else will eat our part of the cake.

I understand that modern watches and wooden furniture are rarely made by hand. Most apartments I’ve been to in Berlin looked like IKEA catalogues.

But I’ve seen beautifully crafted furniture and watches. My question is: Where is beautifully crafted code?

I’m guilty of this myself. Just look at the recent Gleam video: on multiple occasions, I leave shitty code and a promise to fix later. I wasn’t always like this. I used to be a better engineer just a couple of years ago. These days, I’m a “better engineer” but only for the business — I deliver faster and know what to focus on (as far as business is concerned). But why don’t I focus on the craft anymore? And it’s not just me — I notice this in others more and more.

Some of it is industry’s fault, but some is our own.

Not built to last

Memes about rewriting stuff to Rust are funny, but it’s not funny that we normalized rewrites for no major reason.

A watchmaker can service a pocket watch from 1887, a woodworker can service a mid-century modern chair, both are likely to enjoy the process, and the results will last for years. There is admiration for well made older (vintage) stuff.

And what do we do in our industry? We label code “legacy” the moment it leaves our local machine. What else do we do? We make “quick prototypes” that are never planned well but always end up in production… stay there for years… until we “rewrite it”. Of course, it rarely goes well and we never learn from our mistakes.

🖼️ 1st system with cut-corners that’s hard to extend barely scales vs. bloated and over-engineered second-system

There is hope: “Software you can love”

Not picking the right tool for the job

One might say: “But what if the language we picked for prototyping 5 years ago doesn’t scale any more?!” Is it? Is it the language’s fault? Maybe it’s a couple of small design decisions’ fault? Or your whole architecture’s? Or maybe, by Conway’s law, your entire organization is to blame?

Sure, there are right tools for the job.

For some jobs — for example, to cut some simple dowels — one can use a hand saw or a circular saw. It doesn’t matter much.

For some jobs — for example, to make a short straight cut — a skilled worker can do a better job with a hand saw than a junior with a jig saw.

For some jobs — for example, to make a long straight cut — using a hand saw is a stupid (or an impossible idea).

In other words, why are we wasting time brawling ****with go/java/haskell/whatever experts who pick their language of choice to do another web service? And when will we stop pretending there is no difference between writing a script to use once and maintainable code for years to come?

Not studying masters

If history books are true, apprenticeship with a master was a common practice. These days, it’s more of a luxury or exception, so some artisans defer to master studies. For example, when you want to improve drawing and painting skills, you can study Michelangelo drawings, Stepan Kolesnikoff’s use of color, Dean Cornwell’s compositions, and so on.

I don’t think bootcamps or seniors teaching juniors come anywhere close to that. The main goal of these is not to hone in software-engineering skills, it’s to get newbies to contribute good-enough code as soon as possible.

Also, every time I onboarded someone or was onboarded by someone, the senior person had to do a walk of shame either around architecture decisions, developer experience, or code practices. I've never seen a code base someone was proud of.

In good news, we have open source. It’s not easy to navigate and distinguish good from bad. But there are still some enthusiastic people who share good code and some are even happy to tutor others. Recently I’ve learned about The Architecture of Open Source Applications, which is pretty good. So, overall, a pretty hopeful area.

💡 Also, see Software Carpentry nonprofit

Not mastering tools

It takes time (sometimes a lifetime) to become great at anything. It’s an obvious fact to anyone who tried to learn and perfect something.

I don’t care about overpaid and over-self-confident juniors and middles. What worries me is that we promote the best, most valuable engineers out of their craft. Instead of using their hard-learned skills, they waste time sitting in meetings, writing documents nobody reads, or running after people trying to persuade other already-overloaded teams to do more things and improvements.

illusion of free choice: manager path and principal path

FP part

At this point, I was going to bring it back to functional programming, but whatever I wanted to say I already did in the video on values (Do your Values align with FP Values?) and on labels (On “superiority” of (functional) programming and other labels). So, let’s wrap it up.

End

You can say that it’s a bit unfair, because our industry is still young and immature, while people have been building furniture for thousands of years and watches for centuries…

But. We’re in the LLM age now. Regardless of what you think of llms, and if you think that they're going to replace all, some, or none of the jobs, they are here and they are part of the industry. So, how much more “new” code and values can we even contribute? In this month, year, or maybe two? Will we fly high into the craft of engineering or dive deeper into the fast-fashion industry?


If all of this sounds unfamiliar, you’re in the minority. If you are a part of the community or a company of craft-engineers, please share. I’ve heard of https://softwareyoucan.love/ and a few other exciting things. But would love to learn about more. This question is not for youtube engagement or anything like that, you can DM me anywhere else.