15 January 2017

You live you learn.

A quick look into my internet presence the past year could be enough for a casual observer to determine that I have met with my fate. And that's true, and ill fate it is.

As some would know (not sure who I'm talking about), I am a man with many interests. I am hyped about playing games making games computer programming electronics general engineering and recently just MATH. I also enjoy wasting my time as indicated by my blog and my youtube channel ( this is a plug so click on the link you bastards ). Unfortunately for me though I am also a full grown man with responsibilities and a job and what can only be described as shit. So all my hobbies and interests are balanced with my real world things.

Let me get to the point. Besides my 9 to 5 I do some freelance programming. So, freelancing has basically been sucking the life and any free time out of me for the last 1 year. It was 2 clients and 3 failed projects, but the issues in all cases are overlapping so I will summarize my pain in a few (maybe 2 or more ) brief points.

Communication.
You know what you know and the client knows what he knows. Do not agree to anything until you have equalized the information between the parties. Face to face meetings are important but in any meeting just get a piece of paper (if you millennials even know what that is) and write anything relevant down. Make sure all major points discussed in a meeting are confirmed in e-mail later. But don't just send an "Are you sure?" and make yourself be perceived as a retard. Instead just send a list of questions requiring clarification a.k.a. nail down the specifics while you reiterate the major point. That way you force the client to revisit the issue in a communication session that allows a more thought out response, and you have a log of the communication. E-mail is probably the best way to discuss a complex topic, use it. If something "bears repeating" repeat it. Before and after initiating communication or responding make sure you revisit past messages and take your time composing the message. Try to keep it brief and to the point but don't omit specific details.

I had an issue of payment miscommunicated, that resulted in a loss of time and money for both parties and is the reason the project was canceled. You can do a ton of small projects without going overboard on communication but... the more complex and exotic it is the more important information is. I'm not talking about wordpress theme/plugin lowest common denominator javascript development.

Planning.
So I stopped writing blog posts and making youtube videos, I cut gaming, raging alcoholism and some other things. I did that because this type of side project is by definition done on borrowed time. If you are young and strong and still have it in you to forgo sleeping and leisure activities, good for you. I apparently am not. So when planing a project such as this I was required to free the schedule as much as possible, that included declining some other small freelance opportunities (loosing money). One of the rules of time management is to make sure that you not only have time but that you have time every day, without giving away your whole weekend. Don't grind on a project take it little by little but be persistent and work at least a bit every day. Do small things during the week and accomplish one big thing on saturday, rest on sunday.

Before you get to the time management point however, you need to have a clear idea of what exactly needs to be done. Sit down and write down all the major parts of the project, the big broad strokes. Then under each major point make sub points listing all relevant steps, and write a few word notes on each and every element. The point is do a project writeup and structure it, that gives you a measure of the work and without that you can't do estimates about time/cost. Do that before you commit to the job and use it as a plan/schedule for the work process.

Give yourself time, after doing the time estimate apply the formula `estimate*pi`. It sounds weird but nothing hard was ever done before the deadline. Again, if you are writing something simple in a field you have experience with, you know how much time it will take. But for the exotic stuff, surprises, problems and delays are the regularly scheduled program.

Billing.
Never evaluate your work based on anything except how much you want. Do no work for less than the amount you want for it. I made the mistake to consider the situation of the client, the cost of the project up to that point and factored future opportunities in determining the rates. Never do that. The more exotic (that word again) the project the less "standard" rates are applicable.

Consider what you want and what you are happy with. Consider only that, and add 20%. If the client thinks the price is high just cut half of the 20%. That way the client gets a compromise on the billing and you get 10% moar than what you wanted, you're welcome!

Expertise.
EXOTIC EXOTIC EXOTIC. Say somebody needs a piece of software that does X. If there is no ready solution on the market for X, somebody will hire you to write it. Good. Before you LEEROY JENKINS into the project make sure there is no good reason that there is no such software on the market. If nobody has up to that point written software for X, what is it about X that nobody wants to write code about. Is X a lost cause, does it smell funny.

The exotic nature of the projects I had this past year is not something I want to give details about. That said, as a professional (psh) you can write anything that can be written. If there are gaps in your knowledge then great, you have a good reason to close some gaps. But if X is not just a clean coding exercise you will be presented with the need to acquire expertise in an unfamiliar field. I know nothing about cows and if X is some sort of specialized cow software. Ahh.... Exactly, I didn't have the required cow expertise to model the cow's world into working code.

Another way to run into a room and die is to take over a big piece of working software written by another freelancer. Say that the previous freelancer working on the project was say... hit by my car and then kicked. And say that he is the type of gentleman that never comments his code and gets punched in the throat. Then the project isn't only a coding exercise but a reverse engineering and hitting his kneecaps with my hammer exercise. Say that even if the previous developer was capable of giving information about his work, he wasn't willing. Enough said.

In conclusion, be careful. Make sure you know what the client wants, think about how you are going to accomplish it and make sure you are happy with the compensation you are getting. Otherwise risk loosing a whole year of free time and a bag of money, like a certain idiot whose name is somewhere on this page.