Everyone who does freelance work should have a basic set of requirements for prospective clients up front. These are things that will be in the contract if the relationship gets that far — they’re also things you need to know in the beginning.
This is important because it saves time and helps create a clear, honest, and open relationship with your client, right from the start. It also helps filter out clients that are just not right for you.
One of the prerequisites on my list, along with an insistence on using Slack for all client communications, is that I require that all code I deliver be licensed under the GNU General Public License (GPL).
I do this for a lot of reasons. It helps me deliver better work, keeps budgets reasonable, and it also acts as a way to throw up an early red flag with clients that I probably don’t want to work with anyway. In this article, I’m going to share why this is so important to me, and why I think it is important to clients.
I should point out that I don’t do “enterprise-level” work and hardly ever do full-site projects. I tend to do custom plugins, custom integrations, importers, and other architectural type work. My projects are billed in the thousands, not the tens of thousands. Some people reading this may do enterprise work and I won’t presume to tell you how that should be done. My goal here is to speak to those who are looking to strike a balance between efficiency and delivering quality work, and want to mature their own libraries, common patterns, and plugins or themes along the way.
It’s Not Just About Efficiency
Being able to reuse code between projects creates a more efficient workflow. Efficiency allows me to get the work done faster. This means that it is possible for me to quote work within someone’s budget, when a totally original solution would price me out of the job. It may also mean that I can do more for the client with the same budget.
Of course, efficiency and saving time is meaningless if the work is subpar as a result of the efficiency. But, I expect that part of the expertise someone is hiring me for is to know when I can do better by reusing someone else’s code and when it’s not worth it.
This discussion isn’t just about using third-party libraries. It’s about reusing my own code between projects. The more actual uses I have for my own code, the more opportunities I have to improve on that code. When I’m using a dependency manager, such as Composer, it makes it very easy to share those improvements between projects and, as a result, everyone wins.
It’s For Everyone’s Protection
People often talk about the GPL in terms of the risks. They say, “but someone can just steal my code!” They’re ignoring the fact that you can’t steal something you have been granted permission to take.
The beauty of the GPL is that its virality protects you. Let’s say I find a cool function from Genesis that I want to reuse in my project, as long as my project is GPL, I am protected. As soon as I try and claim my project is proprietary then I’m in trouble.
Most contracts have clauses assigning liability for violations of intellectual property law. That’s smart but also scary. Avoiding lawsuits is a very good thing. Sticking with the GPL helps keep them away, and I like that.
It’s A Filter
Right now I know you might be thinking, “Josh, what if they say no?” I completely understand that concern, but that’s part of the point — they might say no. I personally don’t want to work with someone whose worldview is so radically different than mine that they think they can have exclusive rights to software written to work with free software.
Aligning worldviews with clients shouldn’t be taken to an extreme. You can hire me and not think Bernie Sanders should be the next president, that’s fine. But, I’ve put a lot of effort into getting to the point where I only work with people I enjoy working with and can get behind what they are doing.
The more selective I am about choosing clients, the more I tend to enjoy my work.
Free software is very important to me and respecting that is relevant to what they are hiring me to do.
Be Smart About It
When a client agrees that the work I do for hire is GPL-licensed, I could turn around and release it or sell it the next day. But, in general, I don’t. The GPL provides a minimum acceptable behavior. What you can do should never be confused for what you should do. Personal ethics are important.
Not all code has to be publically released after all.
In some cases, I make plugins for clients with the explicit goal of releasing them, or for the client to release them. That’s all well and good, but most client work — except my clients that are looking for help with their own plugins — is too distinct to a particular site or project to release anyway.
Every situation is unique. The GPL grants freedoms. Like any other freedom, what you do with it is up to you. Freedom can be messy, however — it can be used to exploit loopholes or as a way to ensure you are seen as someone who acts with integrity.
Client Work Can Be R&D For Your Own Work
If you’re like me, and are using client work to “keep the lights on” while you transition to developing and selling products, client work can seem like a drain on your most valuable resource — time. But if your finances are in a state that requires client work, you need to make the most of it.
By that I mean that, you can use your client work as an opportunity to develop new features for your own products. If you’re a theme developer, you can use client work to add new features to your personal theme framework or add-on plugins for it. That is great if you use, or plan to use that framework to create commercial themes.
In fact, a lot of the time clients are hiring me to integrate my products or other plugins I’ve contributed to, with their site. Likely, the reason they need to hire me is that the plugin is missing a feature or two. The first responsibility is getting the client’s site working, but if the same code, or code based on it can be used in the original plugin, that’s a big win for everyone. It means the client gets what they want, you get a better product, and the site is easier for your client to maintain.
The fact of the matter is that the transition from client work to product work is hard. It takes time to scale product work. Selling your services implementing or extending your products can be a good revenue stream to help you scale that also helps mature the products. And when you mature your products that’s good for all of their users, including the ones who are hiring you for custom work.
It’s About Goals
Very few people choose WordPress for the GPL. They choose it because it fits their needs and will help them reach their goals. Of course, WordPress wouldn’t be what it is without the GPL.
People come to you, as a developer, not because you love free software, but because you can use it to help them reach their goals. It’s on you to leverage those freedoms, intelligently and responsibly, to ensure they achieve those goals.