A number of folks have reached out to me recently (and over the years) asking me about my experience going indie. I originally wanted to write this reflection after my first year, but I could not find the time nor motivation. The early days of the pandemic really drained me. However, I hope these past three years of experience will only make this post more valuable to those seeking to do the same thing I did. I am writing this for anyone who is interested in trying to go independent — either with your own app development business, solo contracting and freelancing, or both.
In This Series
This post is part of a series about becoming an indie developer and freelancer.
This post aims to be a sort of introduction and reflection. I plan to publish a series of posts about going independent and doing contract work that will elaborate more in-depth on various topics — how to prepare, finding clients, bookkeeping, taxes, and more. So stay tuned!
Also, this post assumes that for contracting work, you will be based in the United States and classified as a sole proprietor for tax purposes. Unfortunately, I cannot comment on what it is like to go independent in other countries when it comes to taxes and business structure. However, other aspects of this post should still be helpful for folks living outside the US.
Introduction
I quit my full-time job in the summer of 2019 with the goal of pursuing indie iOS and macOS development and do freelance/contract work. I planned to take time off for the last half of 2019, and then get started at the beginning of the new year in 2020. I am now in my fourth year, which feels surreal. I cannot believe it has been so long and that I have made it this far. Honestly, I thought after one or two years, I would be back at a company in a full-time role. However, after three full years things are still going great — despite the pandemic and recent layoffs throughout the tech industry.
My current arrangement is that I spend the majority of my time on client work — contracting/freelancing. This is what pays the bills and allows me to work on my indie apps. The split is probably about 70-30 or 80-20, depending on the contracting workload I have each month. Slowly but surely, I plan to rebalance my time to reach a 50-50 split between client work and indie work. After that, I want to progress toward 80 percent indie work and 20 percent client work. My goal is to eventually drop client work altogether and focus all of my time on my indie apps — but being an indie dev is incredibly hard and I am not sure if I will ever get to this point. But I will try!
Overall, this has been an incredibly valuable and rewarding experience for me. Despite periods of stress and a few mistakes along the way, I love being independent. I have learned so much doing this. Unless something significant in my life changes (which is possible!), I do not see myself returning to full-time work at a company in the near future, or possibly ever.
* * *
Before continuing, I want to acknowledge that not everyone will be able to replicate my trajectory and experience going independent — especially folks from underrepresented identities in our industry. Not everyone will be able to do what I have done in exactly the same way. Some folks’ identities will be a barrier, some folks may have important obligations like childcare, and others may face financial constraints.
As a cis white guy, I have a lot of privilege. Clients typically approach me with a baseline of respect and trust that may not be afforded to people of other skin tones, genders, or orientations. I still have to negotiate rates with clients, but my skills have never been seriously questioned. I rarely have to “prove myself” and I am usually taken at my word when it comes to my abilities and expertise. To anyone from an underrepresented identity reading this, if you are interested in going indie and freelancing, I am more than happy to help however I can — answering questions, giving advice, etc. Please get in touch.
Why go indie?
If you want to go independent, you really need to want it. You cannot half-ass this work and lifestyle. It takes a ton of work and effort — but the benefits and rewards are so worth it. You must be detail-oriented and be able to do self-directed work. There is no structure to your days like working at a company. Outside of working on client projects and your own apps, you have to be willing to do all the administrative work, too — bookkeeping, invoicing, taxes, finding new clients, etc. But do not allow these things to scare you away! (I will cover these topics in future posts in this series.)
After your first year or two, you will have learned mostly everything you need to know. For me, the first year was full of learning — how to keep my books, how to deal with taxes, how to continue saving for retirement, how to structure my days, how to manage my time, how to get shit done, how to take time off, and the list goes on. Be prepared for this in your first year and do not give up. My second year was all about making refinements and optimizations to all the things I learned in year one. Finally, in my third year I started to feel like I had everything figured out — I was on autopilot and coasting through all those tasks that were previously bumps in the road. Currently, administrative tasks are a breeze, I have consistent work with long-term clients, and I am able to make time to work on my indie apps. I know how to structure my days to get work done, and I know when I need to take time off.
* * *
Philosophically, I have always wanted to be independent. I have never been a “school spirit” or “company pride” kind of guy. Many workers in the tech industry love all the free company swag. I will accept a free company-branded coffee mug, but I will never wear a free t-shirt with the company logo on it. I simply have never identified with a corporation. I never “drank the koolaid” like some folks. I dislike feeling as if a company “owns me” (most employment contracts claim ownership of all intellectual property you produce while employed, even if it occurs outside of working hours). I also dislike how management and executives at big tech companies often seem to feel so entitled to workers’ time. However, working full-time in the industry did give me valuable experience.
Being an indie dev is something I have always wanted to do, or at least attempt. I want to write and release my own apps — without the explicit goal of starting a company™. That is, I have no interest in creating a startup, finding investors, and raising money. My goal is to be independent, rather than be beholden to a group of capitalist investors seeking to extract as much value out of me as they can (and ruining whatever product I create in the process). Investors are just another type of boss — like a CEO, but worse. Investors want increasing financial returns, exponential growth at all costs, and ultimately, control. Like Moxie always says, bad business models produce bad technology — and I am interested in neither. If one of my app ideas takes off and grows enough organically to become a company (without external investment), that would be great, but my only goal is to make a living for myself and make useful software that does not suck.
Preparing to go indie
I will elaborate on preparation in a future post in this series. For this post, I only want to emphasize how valuable it was for me work at a diverse set of companies when I was working as a full-time worker. These experiences were crucial for me to be successful as a contractor. There is no single thing you can do to prepare for going indie. It is a long-term game you have to play. But know that your experience working in the industry is helping you build a solid foundation for working with clients, as well as building your own apps. The more depth and breadth you can cover, the better. Every company I worked at was very different — from small startups to large tech corporations, all with very different products and business models.
Also, I want to briefly mention other opportunities for growth, development, and building a foundation: blogging, speaking at conferences, doing open source, and making side projects. Of course, none of these things are required, especially not all of them. And, many folks do not have the privilege to participate in these “extracurricular activities”. If you are able to choose one or two, it will help.
Preparing to quit full-time
First, it is almost never going to feel like a good time to quit your job. Tech companies often move at a relentless pace. There will always be a new big project coming up. There will always be another vesting date. You have to find the time that is right for you to quit, because there will never be a time that is right for the company.
Once I felt established in the industry and felt like I had enough experience to go solo, I started planning how to make it happen. When I quit my full-time job in the summer of 2019 I had around 8-12 months of living expenses saved — depending on how frugal I wanted to be. I did not intend to be out of work for an entire year, but I wanted some extra padding in case I had trouble finding client work, or if something went wrong.
Once you have the savings, you just have to jump. I sat on my savings for longer than I needed, waiting for the right time to leave my job. It is difficult to abandon the comfort and stability of a full-time position. When I finally quit during the summer of 2019, I felt a mixture of relief, anxiety, excitement, and stress. After a few weeks, most of that stress was gone and I knew I made the right decision. I took some time off and traveled. I picked up a brief one-month contract in October 2019 through a friend, then I traveled a bit more, and did not work for rest of the year. At the start of 2020, I picked up my first long-term clients and I have had consistent work since. I will write more on finding clients later in this series of posts.
I recommend quitting full-time work sometime in the second half of the year — not the first half. If you are struggling to “find the right time”, often the end of the year is best. Most companies slow down during the holidays in November and December. Those months are a great time to reset and not work! It is also convenient to begin a new calendar year with a clean slate as a contractor (or unemployed) because it will simplify your tax situation. Personally, I loved having most of the summer to be free. I am so glad I had that time for myself, free from the obligations and toil of labor. Having that break was incredible. Eventually, I want to take off for a long period of time like that again.
Time management and finding a balance
When you start out — unless you have a ton of money saved — contracting is how you will finance your indie development, like I mentioned above. Unfortunately, splitting time between client work and indie projects is much easier said than done. You must prioritize what actually earns you money, which is contracting/freelancing. It is very difficult to balance both types of work when you are first getting started. Similar to having a full-time job, after a long day of client work, I often do not want to work even more on my indie apps. (If you are only interested in contracting, then this will not be a problem for you!)
What I have found is that it is best to allocate full days to one or the other. Each week I try to do only client work Monday through Thursday, and do indie work on Friday. Sometimes, I will take Thursday for indie work as well, depending on my schedule. Sometimes I work on indie projects in the evening, if I have the energy and nothing better to do. I have also experimented with half days where I spend the morning on indie work and the afternoon on client work, or vice versa. Depending on the clients and projects, that can work well too.
I have not made as much progress as I would like on my indie projects at this point. However, my first year was spent essentially 100% on client work. I was trying to get established and organized and was learning a lot about this new way of working. My second year was similar, with mostly client work. I was still struggling to find the right balance, and I was working with multiple clients at once — which was exciting and financially lucrative, but it left little time for my indie projects. Also, there was a fucking pandemic, so I try not to be too hard on myself. Toward the end of year two and during year three, I feel like I finally found a better balance and workflow.
As always with software development, getting 1.0 released is the hardest goddamn part. Once you finally ship an indie project, subsequent updates are significantly easier to manage. You can make point-releases as large or as small as you want. That incremental progress is very satisfying once you get over the hump of the initial release. Releasing updates for existing apps is also substantially easier to balance with client work.
Life doesn’t stop
Aside from the obligations of client work, the other main contributor to my lack of progress on indie apps is… life. Life does not stop. Just like with a full-time job, fucked up things happen (because capitalism), or there is a global pandemic, or you get sick, or someone in your family dies, or you go through a breakup, or you get depressed (because capitalism) — and yet, you are still expected to work every day (because capitalism). Being independent does not solve any of these issues, and it arguably makes dealing with them worse. As a contractor, you only get paid for the hours you work. There is no paid time off. So, when worst comes to worst, it is always the indie projects that must take a back seat to everything else.
If you are not careful financially, you could end up in a tough spot. The main way to mitigate this is to account for unexpected life events in your hourly rates and maintain an emergency “nest egg” in your savings. Higher hourly rates and a solid amount of savings means you can afford to take a week off because you get sick, or because you are depressed as fuck and tired of staring at code all day. A comfortable amount of savings means you will not feel stressed and anxious when you need to take a mental health break, or a vacation. Remember to be good to yourself! Your self-worth is not defined by your capacity for production under capitalism. I will discuss finances in more detail later in this series.
Pros and cons, differences, expectations, and FAQs
The rest of this post is a collection of thoughts that do not fit in the sections above and answers to questions that folks often ask me. I will elaborate on many of these topics in more detail later in this series. It is extremely difficult to quantify the pros and cons between indie dev and contracting work versus full-time employment. They are so different in so many ways. It really depends on what you value. Let’s begin with the big one that everyone cares about the most.
Does freelancing/contracting make more money than full-time employment? Well, the answer is not straight-forward. In my experience, I have been able to meet or exceed my base salary from when I was working full-time, and according to levels.fyi I am still comfortably within current salary ranges. However, depending on the company, once you add stock options and bonuses, usually a full-time position pays more overall. But — importantly, I am only working 20-30 hours per week on client work and I usually take time off for a total of 1-3 months each year. I am not working full-time, which is why this comparison is difficult. In other words, I am making roughly the same amount of money, but working only like half the amount of time. The question you have to ask yourself is, do you care more about total compensation, or more about your time? Personally, I would rather forgo stock and bonuses in exchange for a 3-day or 4-day workweek. There are precisely two currencies in the predatory global capitalist system we live in — time and money. For me, time will always be more important than money. The other impact on income is taxes. As a sole proprietor, you pay more in taxes because of self-employment tax — however, this can be mitigated with deductions.
How do you compensate for the lack of other benefits and perks? Most tech companies offer a range of benefits and perks that you obviously do not receive as a contractor. For health insurance, you can get a plan independently via the Affordable Care Act. For tax purposes, health insurance premiums are a business expense that you can write-off. Alternatively, if you have a spouse that works full-time, you can be added to their plan. You do not get free lunch at the office anymore, but you can expense meals and coffee, for example when working at cafes or meeting with clients. In general, any purchase that helps your business (as a self-employed contractor and indie developer), can be written-off on your taxes. Make sure you also take a home office deduction. All your expenses and deductions help recover “lost” benefits and perks by reducing your tax burden.
No sick days and no PTO. Obviously, there are no paid sick days and no paid time off for vacation. However, as I previously mentioned, you account for this in your hourly rates. The higher your hourly rate, the more cushion you have regarding being sick or taking vacation. More importantly, you are not beholden to oppressive, bullshit PTO policies that give you a paltry 15-20 days off each year. You can pretend like you are a European and take an entire two months off in the summer. Like I mentioned above, I am making roughly the same salary while working part-time and every year I have been able to take off for 1-3 months. As a contractor you do not have to ask permission to leave for the day or to take time off. Of course, some negotiation of time-off is necessary — but you are not beholden to a PTO policy. As long as you give enough notice, you can come and go as you please. I have never had a problem telling a client that I will be gone for 1-2 months. I cannot emphasize how valuable it is to be able to have large chunks of time off. Only working part-time helps prevent burnout, too.
How do you manage working from home and work-life balance? Due to the pandemic, everyone in a software engineering role has most likely experienced long-term working from home over the past few years. So I will keep this brief. For me, it is important to leave my house at least once a day — leaving for coffee and perhaps working from the cafe, going out for lunch, running errands, going for a run or bike ride, etc. I also try to make regular plans to see friends throughout the week. It is important to break up your days and stay social without an office, and as a contractor you have the flexibility to do that. This gives me a massively better work-life balance. I personally loathe tech offices. If I never have to enter one again, I will be content. You can also reclaim the time you would have spent commuting to and from the office.
How do you stay current on what’s happening in the industry? There used to be a vibrant scene of iOS and Swift meetups in the Bay Area, but the pandemic essentially ended all of that. The best options for me now are talking with other devs on public Slacks and on Mastodon (RIP Twitter). I also subscribe to dozens of RSS feeds from various developer blogs. However, working with bigger clients that have bigger teams provides that sort of “industry community” as well.
Typical 9-5 workdays are sadly still a thing. As a contractor, I anticipated having immense freedom and eschewing the archaic 9-5 workday. This is mostly true, as I described above — I often do errands or go for a run in the middle of the day. However, most clients you work with will probably still be bound to the 9-5 workday. This was something I did not think about initially. This does not mean you have to work 9-5, but you will likely need to maintain roughly those core hours of availability. For me, that sometimes means I am answering Slack messages while standing in line at the grocery store in the middle of the afternoon. This trade-off does not bother me much. Rarely are my days interrupted with true work emergencies.
Establishing boundaries. One thing I enjoy about being a contractor is that I can be as involved or as removed from a client’s company culture and politics as I like, within certain contexts. For example, I cannot attend a client’s monthly All Hands meeting — but that is good news for me! I hate meetings! Clients do not want to waste billable hours. They want productivity. This means you can focus most of your time on simply writing code and getting shit done. You are not beholden to mandatory meetings or any of the inner-workings of your client’s company. Because you exist outside of the company hierarchy, all sorts of baggage that exists for permanent workers does not exist for you. Overall, there are simply better boundaries around your time because you are external to the client and working hourly. They do not want to waste your time because they know they are paying for it. Ironically, this is also true when you are a full-time worker, but somehow organizations tend to fill software engineers’ calendars with meetings of dubious value.
Working hourly versus salaried. Personally, I enjoy not being salaried. In addition to the clearer boundaries between you and work, hourly wages give you a more tangible view of your labor. Maybe I want to take advantage of a beautiful day and work in the evening. Those hours are still billable. Perhaps I want to work extra hours one day in order to take a half day the next. It does not matter how I allocate my hours as long as I get shit done. There is a clear transactional relationship when doing client work — you do the work, you send an invoice, you get paid. When working full-time at a company, I feel like there is always a lot more “fluff” and blurred boundaries. You might be expected to work late into the evening or on the weekends, but you do not get extra pay for that as a full-time worker. Also, you have to pretend like you believe in a company mission statement, when everyone knows we are all just trying increase profits and shareholder value for the capitalists. Unlike a salaried position, if you don’t work, then you don’t get paid. But salaried workers are often working more than they should have to.
Exposure to many different companies and projects. Finally, the last part of contracting that I truly enjoy is the breadth and diversity of experience you get. Often, in full-time positions at companies, I would get burnt out — not just from work in general, but from working specifically at that company. As a contractor, you are always getting to work with new clients and working on new projects. You get exposed to such a diversity of projects and technologies, not to mention seeing how different companies operate is fascinating. You have to keep learning. Your perspective broadens as you work with different clients, rather than narrows by stagnating within a company. This helps keep me interested and helps prevent me from burning out so quickly.
Conclusion
If you made it this far, congrats! I know this post was long and full of new information. If you are considering going independent, I hope this was a good introduction. Stay tuned as I publish more posts in this series in the coming weeks! If there are any topics you want to know more about, please let me know and I will try to include them.