This week marks my one-year anniversary of quitting my full-time job and becoming an independent NLP/ML engineer and researcher (which I just call “freelance AI engineer” below). My experience so far has been very positive, and the past year was probably one of the most productive years in my entire career. My “achievements” in the past year include:
Now, I believe that becoming a freelance AI engineer is a totally viable career choice (but only for those who are cut out for it—see below). A number of friends and people that I know asked what it’s like to be a freelancer. Many of them haven’t even heard of any “freelance researchers” before (yeah, me neither). That’s why I’m writing down my thoughts and experience here so that this might be useful if you are even vaguely interested.
The answer is probably “no” for the vast majority of people. Being a freelancer is not for everyone. You need to be a type of person who enjoys being a freelancer. More on this later.
You also have to be really good at what you do. Put yourself in the client’s shoes and think of this as hiring a contractor, be it a plumber or an attorney. You hire them because, by paying them, you expect that they can almost certainly solve your problem, not because you want them to be “part of your team” and work on the problem together, offering them opportunities for learning and growing, along with plenty of PTO days and free lunch.
As a freelance AI engineer, you are expected to, for example, start with a client, familiarize yourself with the product and the codebase, submit the first PR within a couple of days, and complete your first business-metric impacting ML prototype or pipeline within the first couple of weeks. If you are just starting out in the AI field, I think your best bet is to go work at a large company (e.g., FAANG) with plenty of resources and growing opportunities, or at a fast-growing start-up (if you are not sure which one, I’ve heard good things about Duolingo) and build your experience as a full-time employee.
I charge hourly. I’ve never done project-based billing. I think AI projects are better suited for hourly billing, because it’s simply too hard to define the scope of work based on the deliverables.
My current rate is $200/hour for short-term commitments (e.g., a couple hours per month) and $150/hour longer-term commitments (e.g., 10+ hours per week). There’s only one time when I was told my rate is too expensive, but most clients just take these rates as fixed. When clients can’t afford my rates, we usually negotiate in terms of the scope of work (e.g., hours per week) instead of the rate. The rates of an average US-based AI engineer with my skills are probably higher. I probably should increase my rates. I probably should have long ago...
Thanks to the “AI boom” of recent years, it's completely a seller's market for freelance AI engineers (again, if you are good). You will never run out of client leads and inbound requests. I think a good rule of thumb is to keep increasing your rates until you start getting “no”s with a 50% chance. You are still left with the other 50%, which tend to be better clients anyways. As a side effect, you’ll get very good at saying no. My default answer is always no, and my schedule is always full (except when it’s not, as my current clients know).
We have enough savings to keep us from being hungry for a couple of years even if I didn’t work at all, and my wife works full time, which was really helpful when I made the leap. Even with enough savings, though, cash flow fluctuation can have a noticeable impact on your sense of financial security. If you work with net 30 clients, for example, it takes two months to get paid after you start working for them. I had some short periods of time when we had negative cash flow (especially when we moved from Pittsburgh to Seattle last summer) that ate our savings, and I really felt the impact of loss aversion. You feel a lot worse losing a certain amount of money than you feel better gaining the same amount. If financial security is your priority, you should probably get a full-time job.
Compared to when I was working full-time, I made less money but also worked fewer hours in the past year. I could totally have worked more to make more, but having small kids, spending time with my family is important.
I found most of my current and past clients through my network. Conferences and workshops are also good sources of potential leads, especially when you give talks instead of just listening to them. When I find a potential client that I really want to work with, I apply directly from the “careers” page. A surprisingly large number of employees, especially start-ups, are open to remote and/or part-time commitments for the right candidates if you are upfront about it.
As a freelancer, you are always on the lookout for potential clients, since most contracts don’t last more than several months. This is a big difference between being a full-time employee and a freelancer. At least when I was working full time, my “job search” was very bimodal—I was either not looking at all or looking actively. If you just want a stable job and a paycheck, freelancing is probably not a good idea.
People say the biggest perk of being a freelancer is freedom—you can work anywhere you like, anytime you want. This is probably not the most important factor, at least for me. Especially in the tech industry, many employers are already fine with employees working from anywhere and at anytime as long as they get things done. Even before becoming a freelancer I was able to work from home whenever necessary (for example, my kid getting sick), and in 2018, I even spent a month in South Korea working remotely while learning Korean. If you are thinking about becoming a freelancer just because of freedom of location or time, you should probably consider finding a better employer first.
Being a freelancer, you have full control over how much you work. On the other hand, working full time, especially for a start-up, is very “binary”—basically you go all in or you are out. You are expected to work at your full potential. You can’t usually, say, work 20 hours per week to collect half the paycheck. Freelancers can do this fairly easily, which is one of the biggest perks of being independent.
I’m also a type of person who always has tons of project ideas that I want to work on which may or may not be relevant to what I do for the employer that I happen to work for at that time. I’ve always considered myself more of an artist than an engineer/researcher, and being a freelancer is a natural consequence of this. If you work full time for a demanding job, good luck working on a side hustle or even finding energy for one at all. As a freelancer, everything becomes a side hustle. All the clients I work with know that I work with other people and on my own things and nobody cares (although some clients want to put a non-compete clause in the contract, which I fully respect).
As a freelancer, you need to be good at managing your time, which equals your clients’ money. I’m a huge fan of the Pomodoro technique and manage all my work with pomodoros (oops, I meant pomodori). I can reliably do about 80 pomodori (= 40 hours) in a typical work week. If you’ve ever used the Pomodoro technique, you’d probably know how hard that would be and how much work that is. If you haven’t, you should seriously consider giving it a try—you’d realize how hard it is to actually “work” for 8 hours in a day (i.e., no web surfing, no phone checking, no useless Slack chats, etc.). I use Freedom on my laptop and Stay Focused on my phone to block distracting sites during the day. I can’t even imagine how I’d possibly be working without them.
Not all of these 40 hours are billable, though. These include personal and work-related overhead such as learning (see below), sending invoices, managing your budget, etc. Also, if you work on research, you need to take into account the time you spend for academic activities. If you take on paper reviews for a conference, count that in. If you are an organizer of a workshop, count that in as well. This helps you be realistic about your “quota” you can use for each one of your activities. Before starting a week, I lay out the plan in a form of bullet points and the expected number of pomodori associated with each activity. This works a lot better than having a kitchen sink “TODO list” and always lamenting your lack of time.
Many of my clients don’t require regular “check-ins,” and currently I spend only 2–3 hours in meetings in a typical week. Meetings have huge spillover effects and really take their toll on me. For example, if I even have a single meeting in the afternoon, I tend to start vaguely thinking what I’d talk about, if there’s any preparation necessary (including booking a room), etc. After the meeting, I would recall what we talked about and any necessary follow-ups. All these spillover effects, albeit small, fragment the state of the flow and significantly lower my productivity. Because I spend so little time in meetings, most days I find huge consecutive chunks of time I can spend working, which really helps keep my sanity.
So far, this article has had very little to do with the “AI” part. What do I actually do? In the past year, I wore many different hats—consultant, engineer, and researcher. For some clients, I have meetings and offer advice on how they should go about implementing AI projects. For others, I write code as a contract software engineer. For yet others, I work on research and co-author papers. For many, however, it’s a mix of all of these.
I think modern machine learning work is suitable for part-time commitments. If you are working on large models, it is not uncommon that training takes hours, if not days. Machine learning researchers and practitioners alike know how much time they spend training models and tuning hyperparameters. If you work full time, you have no option but to wait until the training is done or switch to other projects, if you have any. As a freelancer, you just switch between clients.
As an ML freelancer, you need to have a strategy for securing GPU resources for training models. Some clients are kind enough that they just let me use their own infrastructure, but others may not (usually contractors’ access is very limited for security reasons). For my personal and small client projects, I just spawn AWS spot instances (usually a p3.2xlarge) as needed, using my own custom AMI. I also have a smaller GPU instance on GCP that I start and stop as needed. I don’t train huge 128-layer Transformer models on TPUs (not just yet) or use GPUs 24/7, so this on-demand solution has sufficed so far.
If you work in AI, it is critical that you allocate time for learning and personal development. If you are working full time, it’s usually part of your day job, and you usually spend time reading papers and having “reading groups” during work hours. As a freelancer, these hours are usually not billable. You can’t usually bill a client for three hours just because you spent this much time reading papers last week (if you know such a client, or if you are such a client, do let me know). Remember, you are a professional who was hired to solve client’s problems, not to learn about AI, and everyone expects that you are already well read about and caught up with the latest AI development (I know, I know... has anyone ever been caught up with even a single domain of AI these days?) I think this is a price you need to pay in exchange for the higher rates you can enjoy as an AI freelancer.
I live in Seattle, but I’m not sure if it helps with being a freelancer at all. I work remotely and rarely travel for work, except when I present at conferences. I work with Allen AI, and it’s nice that I can simply drop by on short notice and have lunch with the team, although I would be able to do my work even if I was on the other side of the earth. If you work remotely, I think you’d be better off if you lived in a cheaper city and work with clients in other large tech hubs.
There are definitely ways to develop your career and become more experienced as a freelancer, but these look very different from full-time jobs. I’m just starting out, so I might have different opinions next year.
There are usually no pay raises baked into the contracts, unless you negotiate. But you can gradually raise your rates (say, twice a year) until people start to say no. For this reason, I think it is probably easier to make more as a freelancer than as a full-time employee who needs to rely on performance reviews and promotions that are often out of your control.
Speaking of promotions—as a freelancer, you can stay immune to office politics. You either get the job done or you don’t. You don’t need to be constantly thinking which boss you should be brown-nosing in order to get your next promotion. The flip side of this is you usually don’t gain management experience as a freelancer, although I do mentor junior devs and researchers who work for my clients.
I think it helps to think of yourself as a specialist, not a generalist. For example, if you have a serious health issue that requires a very complicated surgery, you probably don’t want your family doctor to work on it. If you have a complicated lawsuit that involves millions of dollars at stake, you probably don’t ask your personal tax accountant to give you advice. It’d be your best interest if you don’t just “do AI.” If you are an AI generalist who just does “predictive modeling” and “text analytics” using scikit-learn, you’d probably attract desperate start-ups or product teams that simply want to have the word “AI” on their PowerPoint slides, and you’d need to compete with tons of other generalist “AI devs” on Upwork who live in countries where wages are way cheaper than yours. Narrowing your niche down attracts specific types of clients who have specific needs that few people in the world can solve.
My expertise is NLP/ML for Asian language processing and language education. When defining your specialty, I think it helps if you define it in terms of the industry, not in terms of an ML stack. People look for, e.g., “AI solutions for healthcare” and “text analytics for finance,” not for “GANs” or “Seq2Seq models.” You need to be willing to learn a very wide range of ML techniques and models, from simple regression to GANs and RL, no matter what industry you work in.
If you are even vaguely interested in starting your own business, especially a B-to-B SaaS business, I think working as a freelancer for a year or so is a great way to learn about the market demands and transition into the entrepreneurial endeavor. If you work with multiple clients and projects in your field, you will surely notice some common patterns and needs. These are great seeds of product ideas. Some of my open-source projects (e.g., NanigoNet and Open Language Profiles) were born this way.
I incorporated a single-member LLC just for freelancing (and filed a foreign entity after I moved to Washington). I sign all the contracts as an owner of my LLC. Some of my non-US clients prefer it if I have “a company.” I’m not a lawyer so you need to take everything written here with a huge grain of salt, but I don’t think there’s any huge difference between being a sole proprietor and being a single-member LLC, unless you screw something up (e.g., being sued by your client) or you are hugely successful (e.g., being acquired by a company, making millions of dollars per year, or you grow a team of a dozen employees).
I think the US is a great place to be a freelancer, even for an immigrant non-native English speaker like me. Being a legal permanent resident makes it easier to work with US-based clients, who usually pay better. The legal system is at least decent. Filing an LLC is just a matter of going to the state secretary’s website and filling out a form, if you know what you are doing. On the contrary, even thinking about incorporating in Japan, for example, makes me shudder, even though I am from Japan. You need to hand in a certificate of your corporate seal, a copy of your corporate bank passbook, along with the company registration in a floppy disk or a CD-R. I think their government has some work to do before they even think about their “national AI strategies.”
A downside of being a US-based freelancer is medical insurance. I continued my previous employer’s health plan using COBRA and switched over to a plan that I bought on the state marketplace when I moved. Be prepared to pay at least a couple hundred dollars more per month on premiums than you’d pay as a full-time employee.
Read Working for Yourself—Law & Taxes for Independent Contractors, Freelancers & Gig Workers of All Types from Nolo before you start. I read this book literally cover to cover before I got started, which was worth every single penny. Check out some of their related books, too. They are also good.
I can’t say much about taxes, because this April will be the first tax filing season since I became independent. I discussed my options thoroughly with my CPA before I took the jump. I keep track of my business income and expenses on a Google Spreadsheet. I’m not sure if this is a good idea. At the least, don’t forget to pay quarterly estimated taxes.
In this post, I showed that a freelance AI engineer can be a viable career path. You need to understand that this is a very qualified statement and your mileage may vary. Don’t get mad at me even if you go independent and go broke. If you are interested in knowing more, have any questions or feedback, shoot me an email. I’m happy to share my experience!