I begin this short rant by making something clear: I’m quite grateful that not only do I have a steady stream of great clients, but that they’re very vocal in recommending my services, and I haven’t had to advertise. Ever. This is, ultimately, a luxury problem to some, but is an important – perhaps even spiritual dissonance for me.
Say you’re a WordPress developer. If you’re reading this, chances are pretty high that you’re in some way experienced with WordPress. So let’s say you have this client. They say they need 8 complicated, conditional forms, the ability to accept and send query strings, and integration with…the Freshbooks API! Don’t even need a syntax editor for this one.
But how do you start?
Hand code every form, then abstract the static form structure into some type of accessible plugin UI in wp-admin? Hack it into Contact Form 7, essentially re-writing the entire plugin? Download the PHP API for Freshbooks from Google Code and brew a pot of coffee?
Fire up the sites’ dashboard, install Gravity Forms and get to work? Damn right.
As developer colleagues at my day job know all too well, I’m very strongly against willy-nilly installing WordPress plugins, for very good reasons. This isn’t about that, though. More clever folks than I have written on that topic to exhaustion.
I’m talking about assembling other people’s code. It’s time-consuming to audit someone else’s code, so whenever possible, I like to roll my own solution. However, end-users – site owners – when they grasp the power of the plugin repository, they go a little crazy, as you know, and then boom! You get the call; “I broke it, please help.”
So in that case, you’re dealing with bad code, and cleaning it up. But that’s a small part of it; there are many amazing plugins, of course.
But in the example of Gravity Forms, we all know it’s great. That team consistently builds new features, provides adequate deprecation notices, has documentation, backwards compat, etc. I know I don’t have to meticulously pick apart every update, check the solidity of every new hook – it’s all good. Install and build. I know that, at the very least, it’s going to work.
So now, say you get 30 or 40 of these projects in a row, of varying size and complexity. One is solved with Gravity Forms and a few custom functions. Another needed some WooCommerce single-product templates made. Maybe you had to throw create some shortcodes for a portfolio site.
Concerning development, what have we learned in these projects?
It’s the same thing, over and over. Sure, you’re communicative to the client, listen to them, and they’re happy.
Business-wise, things are fine.
They’re not aware of the deep, existential crisis that’s building within you as your career ages day after day, without you making contributions to any repos, or finishing that shortcode plugin you started last summer. And why would you? This is not a conversation to bring up to a client.
There’s no right way to say “Well, the practical thing to do is use [existing, cost-effective solution], but I’ve been bored at work lately, so I’d love to try out this [more expensive custom thing] instead.”
Lately, for the past 6 months or so, it’s been mostly that. Although every solution has involved a great theme framework, a great plugin, what I’m using them for is, essentially, fluff.
There’s little actual development that I’m doing.
So, what am I doing? I’m assembling.
Taking bits and pieces of code and putting them together, maybe customizing them a bit. It’s boring, and I learn nothing.
Many would count their blessings and move on, grateful for the ongoing work. But I’m faced with my own mortality in that regard:
Is this where my time is best spent?
Can I do this for another year? Two years? Five? Twenty?
If you’re not being challenged at your job, you will never grow. You will either slack off to work on cool stuff unrelated to your job – and eventually get in trouble (or lose business), or you’ll let it continue forever, deepening your embrace of the gray purgatory in which your mind now resides for every minute you’re at work.
Want to learn? Write code. Write it from scratch. Follow tutorials that really dig deep. Make mistakes, ask stupid questions. I do these things, especially the stupid questions, every day.
BOY do I ask some stupid questions.
As I steer the company toward a product-based source of revenue (instead of project-based), we still have to take these projects, and keep the money flowing in – so you have to give a little.
Always remember to learn. Or don’t; I’m not the boss of you.