Managing finances as a freelancer

Today, I am not writing a post on technology and instead writing something important about a different responsibility for those who are vying to be software freelancers. While I am writing this post as a software professional, this post applies to all freelancers. Part of the post applies to employees too. Today, I am discussing how not to ignore your finances and how to stay on top of them.

A. Know your monthly and yearly expenses

This is an important first step. Ideally you should have the answer ready from your job days, before you step into freelancing. The expenses should be a sum of both your business and lifestyle expenses. Business expenses are one-time or average yearly or monthly expenses for services like telephone, Internet, domain name, online hosting, stationary, commute, rent, electricity and subscription charges for technical magazines, journals or books purchased for learning. Lifestyle expenses are those related to food, clothes, hobbies and entertainment. You should record your expenses EVERY DAY in the evening around the time that you plan for your next day. If you do this everyday, month-on-month for 18 to 24 months, you will start recognising a pattern and have a sense of how much you spend every month / year.

Please remember that the aim is not to judge yourself and beat yourself up for unnecessary expenses. The aim is to accept your life as is and to make a financial plan for a freelancing career, one of the caveats of which is that no one will pay you at the end of every month like clockwork.

B. Know your future financial goals

Of course you have goals for your future and need the means to finance them. It may be for your marriage, further education, down payment for a house, world travel plans or the bootstrap fund to start a company in the future. You should figure out roughly how much you need and by when you need the money. Once you know these numbers, you can set up monthly or yearly contributions to each of these goals.

C. Your expected money outflow per month / year

From headings A and B, you now know how much of your earned income per month / year are ‘occupied’, i.e. they go either towards business expenses, lifestyle expenses or investments for future goals. You know that you need to earn at least that much every month / year.

D. Set a minimum income goal per year

Based on your expected outflow from heading C, you should have a minimum income goal for the year. You may not meet it or instead exceed it beyond your wildest dreams. But the objective is to have a number in mind that funds your lifestyle and your future financial goals comfortably and even leaves a little bit of surplus just in case.

If you have a number in mind, you will not slack off by avoiding too many projects. On the contrary, if you have already achieved your yearly goal, it gives you the option to say no to further projects and take a well-deserved holiday.

Let the number be realistic. Too much will overwhelm you and burn you out. A good rule is to earn 20 – 25% above your expected outflow (heading C).

E. Income, inflow, expense, outflow, profit, cash flow

Let’s say that a client X signs for up a project with you in January 2020 for a total value of ₹ 1,000,000. There will be an advance payment of ₹ 10,000 for the month. The next payment will be ₹ 30,000 on February 28, followed by another ₹ 30,000 on March 31, with a final installment of ₹ 30,000 on April 30.

The term income usually refers to the entire sum you will earn from the project. It does not account for the fact that some of the payment is in the future. The moment X signs the dotted line and pays you the advance of ₹ 10,000, your income is recorded as ₹ 1,000,000 in your accounting books.

Inflow refers to the actual amount received in a transaction. Inflow records only the money received and not how much you will receive in the future. So your inflow for January 2020 is only ₹ 10,000 from client X. Inflow will match income only in the next quarter after X has paid the whole sum.

Similar principles apply to payments. Let’s say your monthly Internet bill for ₹ 599 is due on Jan 15th. When you use your credit card, you have just recorded an expense. The transaction is purely a digital record with no money having flown from your bank account. Money leaves you only on the day when your credit card payment is due, which may be on Feb 10th. While the expense is recorded on Jan 15th, the outflow is only on Feb 10th.

Applying the two principles above, you can differentiate between profit and cash flow. Income minus expense equals profit. Your profit for January 2020 is recorded as ₹ 1,000,000 minus ₹ 599, which is ₹ 999,401, which appears massive. But the actual cash you have generated for January is your inflow minus outflow. Since you received only the advance, but on the other hand, paid for Internet with your credit card, your inflow is only ₹ 10,000, but also, your outflow is nothing. So your business generated a positive cash flow of ₹ 10,000. The cash that you have in hand is the most important aspect in your business. It frees up opportunities, allows you to meet payment schedules and keeps you afloat.

My trust lies with recording cash flow rather than profit, because it shows you how much you really have. But I do note down my income and expenses seperately, so that I can plan and pay my taxes well in advance, based on the fact that I know how much money I will eventually receive and pay during the year.

F. Know your tax obligations

Tax eats into your earnings like nothing else does. So you need to be aware of how much you owe and how you can reduce it.

As a software freelancer in India, you need to pay taxes only on your PROFIT and not on your INCOME. If I earn an income of ₹ 2,500,000 for the year, but I spend ₹ 500,000 for expenses like Internet, telephone, office space rent, online hosting and domain, etc. I need to pay taxes for only ₹ 2,000,000. Not only do you have to pay taxes only on part of your income, but sometimes the difference in taxable income usually bumps you into a lower tax bracket, e.g. from an income range that needs to pay 30% to a range that needs to pay only 20%.

Another benefit is that if your profit is 50% or more, i.e. if your total income is twice your expenses, then the tax department does not require that you produce proof of income or expenses. With a profit less than 50%, the tax department wonders what makes your operations so expensive. You may be summoned for an audit along with proof of every income and expense for the year. In our example, you have retained ₹ 2,000,000 of the ₹ 2,500,000 earned. So your profit is 80%. You just need to fill up one field on the tax form. The tax department will accept your tax filing cordially.

Another thing to keep track of is if any of your clients are already deducting tax from their end before paying you the dues. In this case, you get to reclaim those as a refund after accounting for your business expenses.

Filing for taxes as a software freelancer in India is to be done using Income Tax Return form 4, not form 1 that is used by salaried employees.

Goods and Services Tax, Service Tax, Value Added Tax (VAT)

These usually refer to the same tax, but is a tax levied on products sold or services offered. In India, GST (Goods and Services Tax), brought in new rules for taxation as against the outdated Service Tax. The rules for other countries keep changing every few years. I will refer to all these taxes as GST for this discussion.

GST is usually collected from your clients over and above the tariff you want to earn from them. The GST amount is then surrendered to the tax department during scheduled days in the year, whie you retain the tariff. The client can be informed whether GST is included or excluded from the tariff.

For example, software services in India are subject to a GST of 18%. So If I want to earn ₹ 100 from a client, I send him/her an invoice for a tariff ₹ 100, but I add another section that explicitly mentions the GST of ₹ 18. The total invoice adds to ₹ 118, that the client needs to pay. I surrender ₹ 18 to the tax department, while I get to keep ₹ 100. This is an example where I tell the client that my tariff is ₹ 100 EXCLUSIVE of taxes.

What if I do it another way? I send the client an invoice of ₹ 120 INCLUSIVE of taxes. If I divide the ₹ 120 into 118 parts, I get to keep 100 parts equaling ₹ 100.69, while I surrender 18 parts equaling 18.31. I could raise the bar a bit by charging the client ₹ 125 inclusive of taxes. In this case, I get to keep ₹ 105.93, while I pay ₹ 19.07 as GST. As you can see, the client doesn’t need to see what I earn and what he/she loses as part of tax. As far as he/she is concerned, my service costs ₹ 120 or ₹ 125 in his/her hands. It even lets us earn a few pennies more by rounding of a weird number such as 118 into a more familiar 120 or 125.

Please note that in India, payment of GST is compulsory if your total income for the year is more than ₹ 2,000,000 (₹ 1,000,000 if you are from a city like Shillong or Gangtok).

If you are not operating from India, you need to stay informed about the rules of service tax in your country and also the country to which you are providing services.


Finance is a very tricky topic. If you are a freelancer, you may not have enough to pay for a financial professional to take care of where and how your money flows. It works wonders if you educate yourself on finance, particular for rules in your country and those for the countries where you provide your service remotely. If you have been boggled about your finances in your freelancing career, now is the time to take control.

Starting a software project on the right foot

Software projects are complex. Often the goal of an application looks simple, but as time progresses, the participants realise how complex the it actually is. Usually they fail to consider every type of input and the corresponding output. Fringe cases are often ignored and suddenly need to be accounted for. The most overlooked flaw is a lack of communication between the one who wants to use the software and the one who builds it. Requirements are not fully discussed and expectations are not fully set.

Most projects are difficult because they are not started the right way. The project starts in a direction that has already drifted from the desired outcome. It continues to drift until a lot of changes or even a ‘scrap and rewrite’ are needed to bring it back to course at a much later stage. In this post, I would like to discuss the points which should be taken care of so that you start a software project the right way. Continue reading “Starting a software project on the right foot”

6 practices that keep your software masterpiece from seeing the light of day

Software engineers switch between two modes: painful perfectionists and band-aid stickers. During the start of a project, software engineers discuss things to painful detail on whiteboards, Post-It notes, restaurant napkins and even glass doors. This eats away precious time that could have been spent on actual development. But as the deadline looms, the whiteboards and glass doors are rubbed, Post-It notes are torn apart and restaurant napkins are trashed. The plans are chucked in favour of anything that makes the application work.

Often, the released solution has plenty of duct tape code that holds the functionality together. After all the over-planning, duct-tape coding is the only thing possible in the limited time that the programmers leave for themselves. Software teams hardly release anything during the early phase of a software project as everything is put in meticulous detail on paper only. But as the deadline approaches, frenetic releases are made everyday or even every few hours, causing confusion among the developers, project managers, testing teams and the clients.

Continue reading “6 practices that keep your software masterpiece from seeing the light of day”

Making your photos look good with post-processing

My wife Priya and I went on a year-long trip named India 360. We clicked tens of thousands of photos during the trip. We share them on our Facebook page and Instagram channel. But, we realised that the quality of the photos we shared weren’t high. Sure, the resolution was great and the most of the photos were good. But we weren’t getting the photos to look like what professional travel photographers do.

Late last year we met Aravind, my brother-in-law (Priya’s brother), who is an excellent photographer. He is also good with post-processing using software tools like Snapseed and Lightroom. In a span of half an hour, Aravind taught me how to make my travel photos look good…. really good. He didn’t fiddle with gimmicky settings, nor use jargon. He taught me 5… just 5…. steps that make every photo look great after post-processing. There was a bonus 6th step which should be used sparingly.

Since then, I have learnt from his principles and edited 100s of photos from our travel, making them look much better than the original shot. I even added some steps of my own to the process. I edit my photos from two places. On my Android phone, I use an app called Snapseed. I use neither Mac OS, nor Windows. On Ubuntu Linux, Adobe Lightroom doesn’t work. So my desktop photo-processing app of choice is Gimp. Continue reading “Making your photos look good with post-processing”

Dipping your toes in the water with test-driven development

Akshay is anxious to have cutlets. He can’t wait to sink his tooth into the cripsy, brown delicacies. He  quickly boils some potatoes in a pot, mixes them hurriedly with some chilly, salt and pepper, pats the mixture into round shaped patties and sautes them on the pan greased with oil. Finally, he eats them. Oops. The potatoes are only half-boiled. He has added too little chilly, too much salt. The oil had not heated properly before Akshay tossed the cutlets in it for shallow frying. Some cutlets are still raw. Akshay thinks to himself: “Next time I should test the results after each step of cooking.”

Bharani is more methodical. She starts with a skewer. The skewer bounces off the surface of the potato. “So this is how hard they are”, she thinks, “They need a 10-minute boiling. After that, the skewer should go 2 inches inside”. After the potatoes are done, she tests with the skewer again and is satisfied with the texture. She mashes them and puts a small sample of the mash into her mouth. The bland taste gives her an estimate of how much spices should be added. She starts with a teaspoon of chilly and salt, kneads the mash well. After 10 seconds of mashing, she tastes a sample. She adjusts the chilly and salt as per her liking and then pats the mash into round shaped patties. Next she heats some oil on a pan. She waits until the oil sizzles. Then she drops a tiny piece from one of the patties and checks how it fries. The piece comes out golden brown and cripsy. Now Bharani is ready to lay all the patties on the pan. In the end,  she enjoys some tasty cutlets.

Continue reading “Dipping your toes in the water with test-driven development”

5 online tools for random data

If you are a software developer or someone who is testing a system that will be deployed, you will often enter plenty of data in user entry fields, such as the name of a person, date of birth, telephone number, etc. We call these dummy data. If you need to input only one or two times, you will often allow your brain to take shortcuts, using names like John Doe, Jane Doe, Tom, Dick and Harry. You resort to phone numbers like 9123456780 or a date of birth like 1-1-1980. However, what happens when you need to enter more than 5 records. That’s when your brain starts ‘thinking’. You will take the effort of coining names or numbers and make sure that you aren’t repeating them across records.

Frankly, I don’t recommend wasting precious brain cells on thinking up unique names, phone numbers or birthdays. Coining values for mundane fields should best be left to automation and your brain should be preserved to do what you do best. Product design, software development and quality assurance.

Today, I present to you my 5 favourite online tools for generating random data for filling in mundane input fields. Some of them generate data that as random as nature itself and hence things feel real. Continue reading “5 online tools for random data”

Using PayTM: India’s most popular cashless wallet

We saw how to use BHIM app for payments and receipts in our last post. Today we shall see how to use India’s most popular digital payment app, i.e. PayTM. While BHIM is a link-up interface to use your bank account, PayTM has its own money wallet where one can keep money. Using that wallet is the fastest way to pay, since it uses the money stored inside and does not have to connect to any banks. Plus, there are plenty of offers, deals and cashbacks if you use PayTM to pay for several services. And the best benefit of all is that you use no cash. Continue reading “Using PayTM: India’s most popular cashless wallet”

Using BHIM for cashless transactions

BHIM stands for BHarat Interface for Money. It is an app that uses the Indian government initiated UPI (Uniform Payment Interface) to transfer money between two bank accounts in real time. The Indian government’s arm named NPCI (National Payments Corporation of India) is responsible for the development and maintenance of UPI and BHIM. Continue reading “Using BHIM for cashless transactions”

Putting traditional APIs to REST

In the last post, we saw how every company is building an API for its services. Other companies can then access the services in their own apps. This builds an ecosystem around the company’s services and the company builds both its reputation and its business. But you will see that companies are now building ‘REST’ APIs. REST stands for REpresentational State Tranformation. It is a clunky, overly technical term that even those from technology fail to understand, let alone hope to build an API which is ‘REST-compliant’. In this post, I will completely dejargonise the term and explain to you what it means by taking a very common activity: Reading a book, inserting bookmarks and marking with a highlighter.

Continue reading “Putting traditional APIs to REST”