Freelancing at it's best
Tags: microservices, productivity, webdev
Published: 2020-03-05 14:02:27

I feel like I do really well when it comes to freelancing, not that I do it that often, but the way I do it however makes a lot of sense for me.

I believe it'll make a lot of sense for anyone who is not only doing freelancing but also a potential client.

## Quality of Product
Now a days when I build an application I make sure there's enough visibility. I send measurement data for each tasks, every edge case handled, every time user sends bad data, or wrong username/password combination, expired JWT etc, and I create a dashboard on Grafana which nicely shows this data in real time. I always have health-checks setup correctly, and make sure important things from Grafana actually have alerts.

Let's look at my auth service as an example, It implements JWT and uses private/public key JWT signing, which means public key can be used in my rest of services to verify, not only that, the key pairs are constantly rotated and private key never even enters a storage device like SSD or HDD, (unless OS decided to do a SWAP).


## Working while not being paid
I work on some apps even when I don't have a client, specially when I don't have a client, I work on things that I think will have more consumers, and when clients do come in, I simply do a `docker pull service` and start working on front-end so that I can deliver a good product and really fast.

## Breaking Even
Almost 99% of the clients need some sort of authentication, having my auth service ready to pull from docker hub helps a great deal.

I might have worked about 150 hours making this production ready, but I charge clients for 30 hours, this way I get paid for some part of my work, client is happy because he got production ready software with 1/5th the cost, in literally few minutes and I'm obviously happy because I just need 4 more clients to break even, after which I'm making money.

## Being Transparent
Obviously when you communicate with the client when you send your proposal, if you decide not to tell that you're pulling the service so you can charge them extra is just being an ass. Most of the people appreciate honesty, You can make a agreement in advance, and if the client would NOT pay for reusable service, maybe it's good if you just find a new client, Or if it's for some other issues, there's always an option to re-write the auth service maybe, I have never came across this situation so I don't know what's the right thing to do.

## Managing expectations
One thing which I learnt after I included auth service for the first time, despite having made clear, client missed the fact that I didn't actually have to do anything, just the front-end, but after you're done with all the components you have for pulling, then you still need to write code for the rest of the stuff, in my case my client was expecting me to deliver in the same pace in what I delivered before, which won't work of course, because remaining part of the project would have to be written from scratch, and they'll cost significantly higher as I'm not reusing a service, rather writing from scratch.

## Side Effects of this system
I always work hourly or with deliverable with milestones, when I make a proposal, I make abundantly clear to the client that we're gonna be pulling the service directly, and implementing a basic authentication system for front-end, almost no UI work, just basic forms. Once this is done, client is expected to pay some amount of money. This helps weed-out those non paying clients, or those who abandon the project or those who aren't serious about project. This means, even if you got a really bad client, you would have lost maybe 2-3 hours of work, and in my case not even that as I've already setup front-end demo project as well, I work 30 mins to make sure client is actually okay and won't dump the project when he has to pay, in client's perspective, project's one milestone was still delivered even though I didn't have to work on it.

Another thing I do is if I work hourly, I always send them an invoice after which I don't work on the project until client deals with the invoice and pays. That way in case something happens, you loose only the last invoice, at least not as bad as not having paid for anything when the project is over.

## Saying No
Every once in a while, I find some people saying, since you've already worked on it, and why not just let them get it for free and charge my future clients, or once one client even said, I'm not gonna pay for it, you might as well include it for free as I'd not get the contract if I wouldn't agree.

For all these kinds of clients, I simply say No, I'd rather not work on their project.

## Building Good Will
Sometimes you'll face that you do have a project, but you haven't actually tested it on production, you aren't sure how well it performs, OR sometimes you're building a project and you realize that you can use it later, in these cases I find myself in a good case of building good will.

The idea is simple, you simply tell your client that you will give it for 1/10th of the price instead of 1/5 because:
- you haven't tested this on production and them using it would help verify
- they have been a really good client and you want to offer them a one time discount
- OR WHEN they're making you build something you know you'll need later, in that case, you're better having them pay 1/10th and keep your service for yourself.

## Managing your own expectations
Sometimes you'll have worked on some service which simply won't be used as often as you'd have thought, sometimes you find no one who would use your service at all, all these cases, there's a chance you might not make any money off of those projects, but to make sure you get best out of them, make sure you're always learning. If you learnt things from a service, then maybe it's worth it.

And sometimes you hit jackpot, you might get clients who need a lot of your service, or some of your service is actually used more often than you anticipated.

## Throwing some info:
I have total of 3 services:
- AuthService (depends on a 4th service called KeyStore service)
- EmailService
- CartService

For me AuthService (8 clients using this) and EmailService (6 clients using this) make the most money, Cart service not so much as not too many people come to me asking to build a e-commerce platform.

And that's just because I recently started doing this, I anticipate every single clients who I'll do projects for will need auth service AND email service.

## FIN
I feel this is a very good balance for both me and my client, I get to learn, I get paid for building a good quality service, and client gets his project developed faster/cheaper. I think this is what we call a win-win.