As I’m sure you know by now, I am a freelance web application developer. I’m not a designer, a flash developer, an HTML/CSS coder or a user experience expert. Each of those things are disciplines in their own right. My focus is pretty narrow. In a nutshell, other people decide what the thing is supposed to do and I make it work. Paint it whatever color you want. I’m a software developer. I write programs. I am not an artist. I’m a craftsman. I’m finally making a decent living at it, so I thought I’d share some of the things I’ve learned.
There are two main ways to make a living if you write software. The first and most obvious is simply selling software. Write a piece of software and sell it to someone. Simple, easy to remember. The problem with this approach, for me, is that it distracts me from my very narrow focus: making things that work. The very best software is useless if it’s not implemented correctly. While there is some appeal to doing not much and collecting license fees for my work, it’s really not that simple. When you sell software, you have to support it. You have to fix bugs, make improvements, etc. I could of course offer support contracts, but then I’d be married to every piece of software I sold for the rest of my life. Not a terribly attractive prospect.
The second way to make a living with software is to make something useful out of it and sell that. What I’m doing now is providing a service. I’m taking software that I either write or reuse and integrating it into a working web site. The price of this service based on what it is worth. Note that I did not say “what it costs”. Cost and worth are two very different ways of determining price.
Cost is determined by counting up the resources it takes to create or implement something. “Resources” in this case means “development hours”. If a project takes me 50 hours, I take my hourly rate (which includes some markup, presumably) and multiply by 50 and that’s the price. That’s fine if you’re reinventing the wheel every time you do a new project, but I very heavily reuse things I’ve done before. This means that unless I lie about how long things take, I make less money on jobs where I can reuse things I’ve done before. In essence, I punish myself financially for being more efficient. This does not make a ton of sense to me.
This also creates the paradox of having to estimate how long something will take before I’ve done it. As this is nearly always impossible to determine, I will almost always get beat up in terms of money doing estimates. If I don’t, it’s luck. I don’t really like gambling with my livelihood. Cost-based estimating also puts me in a position where I am constantly trying to sell people hours of work. I don’t know about you, but I’d rather sell people things that work and spend less time working.
Worth is how much someone is willing to pay for something I’ve done. I implement a feature, from scratch or by reusing something I’ve already done and the price is X. Cost is my problem, not my client’s. I do not estimate, I quote. If it takes me 2 hours or 2 months, the price does not change. There is no negotiation on the price. If a client cannot afford to pay for said feature, they don’t get it. Remember, the relationship between me and my client is that I provide them with useful things and they pay me for that service. If they don’t pay me for that, then they aren’t really a client, but a recipient of my charity. This is not to say that charity doesn’t have its place, but that place is not in the client/contractor relationship.
Worth-based quotes eliminate problems. Cost-based estimates invite them. I am very up front with prospective clients about my policies in this area. A successful (and fun) project depends on a good client/contractor relationship. Arguing about how much things cost creates animosity between me and my client before the project even begins. If a prospective client is unwilling to pay for things based on what they are worth, it’s not in anyone’s best interest for me to work for them, even if it means turning down a paying gig. I’d rather spend the effort working with someone else that sees the value of what I do in terms of the useful things they get and not the dollar amount.
So I don’t sell software, I sell useful things. What about the software itself, then? Easy. I open source it. This means anyone could take the software I’ve spent lots of hours producing and use it to do exactly what I do. This means that potentially, someone could take my work and use it to compete with me for jobs. Why would I put myself in this position? Also easy. I’m not a software company.
By making my work open source, I do a few important things. First, I retain copyrights on everything I do. I never, ever, ever sell source code to clients. This means that I can reuse code from any client project on any other client project without issue. Clients get source code, of course, because the source code is open source. Everybody wins.
Making useful software available to everyone means that more people will be able to implement that software. If the software is useful, easy to extend and lots of people implement it, it can become a de facto standard. Others can contribute to and enhance the software in ways I didn’t even think of or didn’t have the resources to do.
Doing things this way is a huge selling point for freelancers and clients alike. I’m not rolling my own, I’m using something that’s freely available and well-documented that lots of people know how to use. This provides long-term peace of mind for clients and for me, because the application in question is not subject to our continued relationship. There are other people who know how the thing works. Everybody has options.
Can other people use my work to do what I do? Sure. Can they do it as well as I can? Some can, some can’t. I leave that decision to my potential clients. I am, after all, selling a client the implementation of useful things. If they believe I can do what I say, they will pay me to do so. If they believe someone else can do it better, they’ll hire the other person. I’m in this position with any prospective client. It’s called a free market economy. The software in question matters very little, all other things being equal. Why should I be scared to compete on a level playing field?