Month: March 2019

Billable and non-billable hours

This is written by the consultant/freelancer point of view.

Amateurs are focused on billable hours.

What is your hourly rate?
50$ per hours.
That is not bad, 8h time 50$ is 400$ per day.
20 working days per month is 8000$ every month.
96000$ per year, not bad.

There are a lot of problems in real life with this logic.

First, there are no expenses (tax, equipment, rent, etc) mentioned, like they do not exist.

But I do not want to focus on expenses in this analysis.

Also, can you bill for 8h every day for a year?

If on an average day you sell only 2h than calculations are much different (and not in a good way).

What about all the work that you need to do to sell 1h of your time?

If you need to spend one addition 1h in order to sell 1h of your time then your hourly rate is cut in half.

If you work for somebody else and you are not a remote worker, then your commute time is an example of non-billable hours.

Different businesses have different portions of billable and non+billable hours, just be sure to calculate that in your equations.

In coding business, and by coding business I mean if you primarily write code, lots of non-billable hours are spent on keeping with technology (even if you are highly specialized).

If you are self-employed non-billable hours are also needed for finding clients/work, infrastructure maintenance, etc.

If you take all that in the account than 50$ per hour and minus expenses, does not look so go anymore.

And you come to the understanding of why it should be more.

Verification vs Validation in practice

Verification is the process of checking that the software meets the specification.

It is doing what you wanted it to do.

An example could be that function need to add two numbers, then you verify (like write unit test) that it is correctly doing that.

Validation is the process of checking whether the specification captures the customer’s needs.

Using the example of the function need to add two numbers verification need to confirm that this function is really what user need, eg. maybe you need to multiply two numbers.

Practice vs theory

When I first head about validation I was able to understand it in theory, but in practice, I was thinking it is easy to know what you want why do you need to validate it.

Then I had personal experience of why and how validation is hard.

I build wrong software for myself and I had no one else to blame.

How I build wrong software for myself

My idea was to make software that will be run at 1 AM every day, will take all real-estate ads from https://www.njuskalo.hr/ for my town listed on a previous day, sort them by price for a square meter and send them to email.

Basically, I wanted all new ads per day to my email, sorted by price for a square (one day delay was fine for me).

Looks simple enough, what could go wrong?

After a few days and I had it running in production and it was working, verification was successful, I every day I got all ads from the previous day.

Why validation was wrong

After a week I found out that my software was useless.

What was the problem?

Rember that I wanted to get “I wanted all new ads per day to my email”, I wanted all “new ads per day”, but what I got was all updated and new ads per day.

Let me explain.

Every day I was getting around 200 ads per day and I noticed that a lot of them were the same ads, day after day.

What was happening is that a lot of people were just updating the same ad every day.

And they are doing this so that their ad is always on the first page, sometimes they even do it a few times per day (later I found out that a friend of a friend was contracted by one local real-estate agency to make software that will automatically update ads for them).

Altho my software was working correctly, only after I have made it I found out it is useless because of wrong assumptions.

My assumption was that every ad will be added only once, not that 60% of adds will be updated every week.

I have solved this problem by making version two that could know if an ad is new or updated and if updated what was updated.

Am I stupid

This experience was fascinating to me.

On this project, I was everything: user, project manager, architect, coder, quality assurance, investor, every hat was on my had and I manage to build the wrong thing.

It gave me a practical understanding of why it is common that the end user is not happy with the finaly product.

Even if everything is done correctly it is possible that the final product is not solving user original problem due to wrong initial assumptions.

How to improve validation

One approach is to make MVP, in this way you will spend fewer resources on version one.

If validation of MVP is correct, then add additional features, if not cancel it

Another approach is to get some domain knowledge ether internal or external.

I had built a few web-scrapers in the last few years and now know a few tricks about that domain, but I learned each on the hard way.

I also understood why some companies hire domain experts consultants (just be sure to have a good one).

Technology

For those interested in what tools did use to build my software here is the list: Scrapy, dataset, yagmail.