I’ve almost always been a technical person. When I was a kid, in the late ’80s and early ’90s, I could program VCR timers, and operate land-line telephones like a boss. When the web came along, I periodically found myself drawn to more sophisticated technologies. I started with a Geocities website, where I used framesets to help template my site’s layout. After Geocities, framesets weren’t good enough: I just had to use SSI. Later, when PHP became an option, SSI wasn’t good enough.
…I didn’t want to become a “real programmer”—I’ve only ever wanted to be a designer.
Beneath the surface, I think the motivation for this was a sense of perfectionism—a desire to be a craftsman at everything I do. Or perhaps, conversely, I was driven by a fear of mediocrity—of being told I’m doing it wrong.
The more I used the web as my creative outlet, I found that learning to write code made it easier to do more creative work. Code empowered me to have grander creative visions. Programming made me a better designer. However, I didn’t want to become a “real programmer”—I’ve only ever wanted to be a designer.
This puts me in a tricky position. How do I keep myself in a position to only let code empower me, creatively, before I let code take over, and turn me into a “real programmer”?
Today, I’m working on an iteration of this site that runs on an MVC app built with Scala, the Play Framework, and a MySQL database I made from scratch. I’ve come a long way from templating my layouts in framesets on Geocities.
What makes craftwork beautiful
I’d probably be a happier person if I could accept that nobody’s perfect. Wouldn’t you?
When I see other people do good work, it’s so intuitive to say: “That person did good work. I just have to make my work look like their work, and I’ll do good work, too.”
It never turns out that simple.
That’s what makes craft such a beautiful thing. Craft is the outcome of pouring hours of dedication into a project - meticulous obsessing over details, fretting over new questions, and driving to make a project the best it can be. Craft is elusive. Craft takes time.
The craft I want to make my biggest time commitment to is design. I love an approachable layout, with plenty of breathing room, gorgeous typography, and tasteful use of color.
But writing code is a craft, too. And it’s not easy.
Acknowledging limitations, and learning to be okay
I can admit that I think information security is fascinating, but do I want to become an expert at it? No, I don’t. Do I let that stop me from writing code, and executing it on the web? No.
Doesn’t that mean I’m doing it wrong?
I can admit that I think scalable web applications are fascinating, but do I want to become an expert at that? No, I don’t. Do I let that stop me? No.
Doesn’t that mean I’m doing it wrong?
I still try to write good code
I recently added Markdown support to the CMS I wrote for this site, and while it was easy to handle Markdown-to-HTML conversion in the views, I went out of my way to handle that conversion in the model, instead.
The even scarier part is the rationalization. I don’t need to become a perfect programmer, because my personal work isn’t important.
I don’t need to become an information security expert, because nothing on my website is valuable. I don’t need to become an expert at scalable web software, because I’m not a rockstar designer who draws in thousands of pageviews a week.
But that’s okay. I can be a mediocre programmer, and still make a website. Being a mediocre programmer doesn’t make me lazy, or a bad person.
When great programming becomes truly important (like, at a job, or doing volunteer work), I can delegate all the really hard programming work I don’t like to someone who will love doing that work as much as I love design. When everyone loves what they’re doing, everyone wins.
And there’s nothing mediocre about that—it’s just great.