background

August 31, 2024

Billable hours with Magento projects

Yireo Blog Post

Building Magento shops for fixed prices might be foolish. However, only billing the hours that you actually work on a specific project might not earn you back your investments. Here are some of my 50 cents.

First of all: The foolishness of fixed pricing

If I were to build a Magento shop for 10k (regardless of the currency - yen, Euro, bitcoin - that's not the point), this would be based on a specific number of hours. If I expect to spend more hours, the fixed price would go up. If I expect to spend fewer hours, the fixed price would go down.

But what about unexpected setbacks? Or unknown requirements that come to light? More time would be needed, without a certainty of how many hours would be involved. If I'm smart (and I am), I'm going to be on the safe side and increase the estimated time dramatically. Thus, the customer pays more for the project. The other way around, my estimation would be too low and I would not get paid for my hours.

Either way, fixed pricing turns out to be unfair for one of the parties involved. Billing per hour is far more straight-forward, so it seems to be.

The billable hours problem

Usually, billable hours are seen as those hours that are contributing to a specific customer project (say: a Magento shop) and can therefore be billed to that specific customer. For instance, if you are using some kind of ticketing system like Jira with time tracking built-in, the hours will specifically be tracked for that specific project. You start the clock, you work, you stop the clock. And there you have the hours you spent on that customer.

Once in a while, you find yourself extracted. You perhaps started the clock, you worked a bit and then started playing Asteroids on your Atari. Or you simply thought about which movie to watch that night - Wargame or The Last Starfighter. We are all human. But you didn't stop the clock, so suddenly the customer is paying for those hours?

What are non-billable hours?

What about when you did not start the clock for a specific customer project, because you are doing something else — not at all related to that customer project? No, I don't mean that you are caught up playing Space Invaders (even though that might be a good idea).

Instead, you might be working on improving your general knowledge. Or you are extending the generic Magento modules that your agency owns. Or you are contributing to some kind of open source project. Or you are writing tests.

Customer projects benefit from you spending non-billable hours

Now comes the conundrum: Customer projects actually benefit from you gaining knowledge, they benefit from reusing those agency-owned modules, they benefit from open source projects. So if they benefit from it, isn't it reasonable that you charge them for it.

For example, if you are creating some kind of Magento functionality that is not yet found in third parties, then that functionality is worth something. Instead of developing it for one customer, you could also reuse it for multiple customers. But if you don't charge any of the customers for it, you benefit nothing from it.

In other words, non-billable hours of which all your clients are benefiting are only worth the investment if you actually charge your clients for it somehow.

Hour tracking with a bit of magic

Back to the time tracking: Working for a non-client-specific project with normal ticketing tools brings in the issue that the hours are moved to a non-billable project. If the ticketing software only allows billing hours if the chosen project is a client-specific project, then the hidden costs of non-billable projects can never be paid by the clients. ... Are can they?

Of course, they can. It's just that somewhere in the process of reading the billable hours from the time tracking tools and drafting up the actual invoice, something magical needs to happen. Perhaps, some hours need to be added. Or the hourly rate needs to change. Or something. It feels like cheating, perhaps.

But it shouldn't feel like cheating. Because the more knowledge you have, the more stable your own custom modules are, the better the open source code becomes, the fewer bugs thanks to proper tests, the less money needs to be spent by the client on the long run.

The case of automated tests

One area where this problem of billable hours is a real issue is the area of testing. Say, you need to create a Magento module. And you kind of know how to do this. Plus, you have never done much with testing and never practiced TDD. Then it will be quicker to build the Magento module without TDD and tests, then it will be to add those tests to the module. Tests only slow you down.

Worse, if you propose to the client to invest more hours to create tests, while creating the module without tests is cheaper, the client might just want to forget about testing. That's how the direct relationship between billable hours and the pocket of the client goes.

But you are a professional, and you do know that in the long run, tests will guarantee more stability, prevent bugs in production, make it easier to refactor the code, reduce legacy. Even better, if you implement tests correctly, you will spend less time, not more. In other words, you know they kick ass. Then why on earth would you skip those tests, only because the client does not want to pay for it?

Some magic in your invoicing should be in the benefit of you both!

Who is paying for Hyvä?

Another example of issues I have with direct billable hours is Hyvä. First of all, the Hyvä license fee is 1000 Euro (at the time of writing). And perhaps you want the client to pay for it, which is fine. Just put it on the bill, I'm fine with that. That sum of money is not meant for you, it is meant for the Hyvä team that invested greatly to give the Magento community a better frontend. It is a bit like tax: You need to add it to your invoices, but it's not for you.

However, if you start with Hyvä, you are making a similar investment yourself as well: You need to get started with a lot of technologies that you were not familiar with before. How to earn back that investment? The answer is: Bill the client. Thanks to Hyvä you will spend less on various things (MVP, prototyping, webdesign, etc). But if you only forward the correct number of billable hours, you will never earn back your investment. There needs to be some flexibility.

A Hyvä site without performance tuning is better than a Luma site without performance tuning. Adding to this, the number of hours you would spend on a Magento shop based on Luma would probably be higher than the number of hours you would spend on the same shop but then based on Hyvä. In other words, if you would charge the client the amount for a Luma shop but actually give the client a Hyvä shop, the client would benefit from a faster shop and you would benefit from more money. Everybody wins.

I think there is a path in between as well.

Direct magical invoicing or indirect magical invoicing?

If you invest in knowledge (say: Hyvä) to run a specific project (say: a Magento shop), then we could assume that that is the only project you are ever going to run. It would be best to make sure that the project earns you back every investment. So all billable and non-billable hours would need to be charged directly.

In reality, most Magento agencies make investments (knowledge, training, open source, etcetera) that could spread across many projects and across a larger amount of time.

When there are non-billable hours that you bill anyway to a specific shop, with the invoice date matching the period of the non-billable hours, then I would call this direct magical invoicing - there is a bit of magic in between the actual hours and the hours on the invoice, plus the non-billable hours are directly charged to the client.

However, you could also work with indirect magical invoicing. You keep track of the non-billable hours and make sure to charge your clients for a couple of years accordingly. There is at least one caveat here: You need to have a feeling of how many non-billable hours will be spent in the future (which is quite frequently impossible). Or you need to bill far more, which quickly becomes dishonest. Keep it real.

Disclaimer

There are some things wrong with the reasoning above. For instance, as an agency, it is sometimes hard to just invoice more to the clients: You need to compete with other agencies as well. However, hopefully, this blog gave you some pointers for recalculating your billable hours in such a way that everybody is able to profit.

Posted on August 31, 2024

About the author

Author Jisse Reitsma

Jisse Reitsma is the founder of Yireo, extension developer, developer trainer and 3x Magento Master. His passion is for technology and open source. And he loves talking as well.

Sponsor Yireo

Looking for a training in-house?

Let's get to it!

We schrijven niet te commerciële dingen, we richten ons op de technologie (waar we dol op zijn) en we komen regelmatig met innovatieve oplossingen. Via onze nieuwsbrief kun je op de hoogte blijven van al deze coolness. Inschrijven kost maar een paar seconden.

Do not miss out on what we say

This will be the most interesting spam you have ever read

We schrijven niet te commerciële dingen, we richten ons op de technologie (waar we dol op zijn) en we komen regelmatig met innovatieve oplossingen. Via onze nieuwsbrief kun je op de hoogte blijven van al deze coolness. Inschrijven kost maar een paar seconden.