Avoiding Crappy Clients, and Crappy Jobs - Part 1
The vast majority of the posts here seem to be explaining some sort of technology that a Google search could explain, in order to boost the mentor's visibility and to promote them as a 'thought leader.' I've noticed that the clients on codementor I've seen tend to be either junior level programmers at a job, or freelancers starting out. This is the post I wish I had access to when I was in that position - not something that stackoverflow and google could solve.
I run a successful software company. I have two other programmers working for me, a designer/project manager, and an intern. This is not quite living the dream, but it means I have progresed past the point of a busy freelancer. While getting there, I learned a lot about crappy clients, and crappy jobs.
As a graduate student studying computer science, I had an internship where people < 5 years out of college were talking about retirement all the time. Not in the sense like "Hey, you should have an individual retirement account to avoid taxes, here are the ways I'm investing, and the company matches our contributions!" but more like "Man, I cannot wait to retire. Only 27 more years!" This is a huge warning sign that you should not accept a full time job at a place, or if you have one, look for another job. People are not looking forward to challenges of their job, interactions with coworkers, or basically anything other than punching a clock, for years, until they can finally be happy.
Another actual job I had involved the owner of the company telling me my salary requirements were a joke, despite having tons of hard evidence to back them up based on my education and experience. After I told him that he was free to hire someone with less education, and experience, he agreed with me. This interaction during our interview basically set the confrontational tone of employment all thoughout. People want to show you how they are - it's almost impossible to hide yourself from someone else for extended periods. Ask yourself, during an interview, if you'd like to work for that person. Ask yourself this, in addition to the question "Would I like to get PAID for doing this job?" I focused on the cool challenges, interesting coworkers, and other aspects and failed to pay attention to the rough boss. Of course, I (and everyone else) had problems with this boss.
I've had far, far more clients than bosses. Bad bosses, and bad places to work, are similar between many industries, and there are typically laws in place to protect you from them. Bad clients are far more interesting, and dangerous. Once you have decided to become a freelancer, there are far fewer laws in place to regulate your interactions with a client, than there were in place to regulate yor interactions as an employee to the employer.
To paraphrase Tolstoy:
"Good customers are all alike; every terrible customer is terrible in its own way." 1
Having No Money
There are many, many ways a customer can be terrible. Probably the number one way is to not have any money, and thus not technically be a customer. One of the wonderful things about platforms like this is that they typically escrow money, making sure that clients actually have money ahead of time, before becooming a client. Some key phrases to listen for which will help you detect this type of terrible client are:
- equity agreement
- revenue split
- investment opportunity
- investment discussions
- any use of the word, 'investment' at all
- waiting on my rich uncle
- not able to pay you at this point
- IOUs
Basically, if it is not COMPLETELY clear to you as a freelancer (or employee!) how your client (employing company?) makes money, DON'T DO WORK FOR THEM. You should have a written agreement in place, with a deposit, BEFORE you start work. I gave a talk on writing proposals that I might turn into a blog post, if this one is popular. If a client pays you once (with a non-refundable deposit) then it is much more likely that they will pay you a second time.
Dictating Technology
My friend Michael says "A customer is always right - a client pays me to tell them when they are wrong." I try and find clients, not customers. The difference here is that a client respects your expertiese, and is paying you for advice since you have been through the type of problem they are having many times, and generally do what you say, since, you're the expert. The biggest warning sign here is when a customer tells you "I want you to build me a website using NNNN technology" then, when you ask them why they want NNNN, they say something like "because my friend told me that NNNN was cool." Or another reason that literally makes no sense, and completely fails to account for technical trade-offs, your level of expertise, your team's level of expertiese, long-term maintainability, availability of libraries to accomplish exactly what they want, or my personal favorite, easy interoperability with their existing systems.
I had a client that I like to think of as the less-successful, Hispanic, Steve Jobs. Suprisingly, this client was less successful than Steve Jobs, and he also happened to be Hispanic. I realized that the relationship was starting to sour when he started "recommending" all sorts of 'helpful' technical solutions, rather than talking about his goals. He then failed to act on any of my recommendations. The problem with this is that he believed he was the expert - he thought his ability to evaluate specific technologies in regard to solving his problems was greater than mine. This was in addition to general indecision on his part and an inability to delegate effectively (organizational problems) that ultimately killed the relationship.
Remember, you are getting paid because of your expertiese. When you can no longer maintain a professional level of respect in a relationship it is time to leave if you are already there, and to try and avoid these encounters as quickly as possible.
As a counterexample to the less-successful Hispanic Steve Jobs, my customer Conner is someone that starts off like this. Conner is suggesting different technologies because he researched them, and is interested in understanding whatever solutions my company comes up with. However, after I tell Conner what I believe is a superior solution, and why, he almost always agrees with me and then authorizes my company to act on this decision. This might not happen immediately, but it happens eventually.
Dictating technology is different than saying the solution needs to integrate well with a legacy system, and be maintainable using a certain skill set - there are good reasons to dictate technology. These are two good reasons.
Please let me know if this post is helpful in getting started as a freelancer, or an employee. I am writing this to the version of myself ten years ago, as if I had learned these lessons from a blog post, I could have saved myself some pain.
Let me know if you're interested in contract code development, or any kind of consultatative advice. It's fun getting paid for my strong opinions.