In my previous post, I wrote about how I transitioned from a software engineer in big tech to running my own business.
In this post, I will go into more depth on how exactly my business works and what my daily life looks like and some pros and cons of this lifestyle.
Part-time Contract & Responsibilities
Part-time contracts are the bulk of how I make money right now. They offer decent and stable income, and a unique sense of value that working on your product would not provide.
These contracts are remote, part-time and long-term in nature. In terms of responsibilities, it is similar to senior IC level or team lead level in a typical tech company, including:
- System architecture design and prototyping (designing audit log system, email notification system, inference model deployment, etc)
- System integration design and implementation (SSO login, 3rd-party API integration)
- Project management (sprint management, milestone planning)
- People management (managing interns and other contractors)
- Mentoring and guidance (Teaching junior developers git workflow, CI/CD, automated testing, coding best practices, etc)
For routine tasks like project managements and people management, I would setup cadence like bi-weekly sprint planning meetings, weekly sync-ups of progress with contractors, etc.
For specific ad-hoc tasks like system design, typically I would discuss product requirements and potential ideas with the clients regularly and put them in my TODO list. At start of each week, I would discuss with client on the priorities and focus for the week, so that they know what I am working on and it aligns with their priorities.
Essentially I am directly selling my time away to clients who find my knowledge and experience valuable to them. In return I get the monetary income as well as portfolio and connection to expand my client network.
It is not scalable, but it doesn’t have to.
I try to not get heavily involved in coding tasks for several reasons:
- It is not the most efficient of my time. The clients also understand this part, because ultimately they are paying for my time. If something can be done by a junior developer, they don’t need me to be working on it.
- It would take a longer time. Because I am only working part-time and have multiple responsibilities, it is hard to deliver the feature within a shorter time frame. For example, it is easy for a full-time developer to complete a 3-day task by end of the week. But for me it would be tricky because I might not have 3 days for the week due to other responsibilities and tasks.
For most coding tasks, I would just provide a high-level system design on how to do it and a few pointers. Then let the developers do the actual coding.
There are cases where I would do the actual coding:
- The task is difficult for developers but easy for me because I have done it before (for example, SAML integration, UI testing framework setup)
- The task is simple, not urgent and I enjoy doing it (minor frontend UI fixes and improvements)
First up, I need to state that I am a night person, not a morning person. I typically wake up quite late towards the noon around 11pm. After grabbing brunch and coffee I would get into work around 1pm.
I usually end my day around 2am, which still gives me about 9 hours of sleep. This schedule is more akin to working in a different timezone, rather than working overtime at night.
Usually I would have a bunch of messages and emails from clients as well as my own projects so I would take care of them first. If something requires more than 5 minutes of work, I would put it in my TODO list and deal with it later. I have a separate TODO list for each client as well as each of my own project.
For the afternoon, I have settled for a default “schedule” for each client, for example, Monday and Tuesday is for client A, Wednesday for client B. This helps to keep myself sane and organized, as well as do timeboxing for each client based on contractual obligations.
I travel to one client’s office, because it is nearby and it helps me mentally to keep physical contact with my team and client. For clients that are far away, I would go to one of my favourites cafes or productivity spots to get work done. I do also have regular physical meetings with these clients to maintain some form of physical interactions.
However, the default schedule doesn’t always work because of meetings that are usually set for afternoon. These meetings can be with clients, development team, or even clients’ clients. For meetings with clients’ clients, I usually take on the role of “Team Lead” or “Tech Lead” on behalf of my client.
This is where I think I contribute a lot of value for my clients. I have experience handling meetings with stakeholders in my previous jobs and I can take on any technical questions because I have practical experience on full stack development as well as machine learning.
After dinner around 7pm, I would either continue to work or go out for a walk. I enjoy walking a lot, but in Singapore it is only practical to walk outside in the morning, late afternoon or night. Walking helps me to organize my thoughts and reflect on the events that happened during the day. This is also where I would come up new ideas and get my creativity juice running.
I also have a goal of 8000 steps a day on Fitbit and I try my best to hit the goal as my way of getting some “exercise” done.
24 Hours in a Day
One cool thing I quickly realized is that I have 24 hours a day. Well of course there are 24 hours a day, but for me on part-time contracts (which defines a work day as 8 hours), it means that I could go beyond 8 hours on some days and take a break on other days.
For example, if I take a meeting for client A for 2 hours from 11pm to 1pm, and then work 7 hours from 2pm to 9pm for client B, I would have effectively worked 9 hours for a day and saved myself 1 hour in that week to do my own projects. If done correctly, every day would become 1.2 or even 1.5 days and you can finish the entire week of work ahead of time to free time for other things.
This is a unique perk of working part-time that you don’t get in full-time employment in Singapore because overtime pay does not apply if your salary hits a certain figure ($2,600 as of now).
Weekends & Personal Projects
I reserve weekends for myself and not my clients. This is where I work on my own projects (indie hacking if you were to describe it) or take some time off to relax and chill, just like a full-time employee.
I have hoped that I would be more productive in weekends now that I no longer work full-time, but it turns out having multiple clients is also quite tiring, despite having the flexibility to schedule my time. Maybe shifting my income sources from part-time contracts to my own projects would help with that by having more time to work on my own projects.
For now, I am contented with the freedom to use the time I have everyday as my own time. For example, if I am bored of working for client A, I could just start working on my own project or writing a blog post without worrying about any consequences.
I am currently working on new tool to improve developer productivity by streamlining the process of using ChatGPT for coding tasks in existing projects.
Message me on LinkedIn if you are interested in finding out more.
Pros & Cons
- Flexible schedule. Being able to wake up late and work late is a huge plus for me. I am a night person and I am most productive at night. I can also take a break in the afternoon to go for a walk or do some exercise. Also I can work more hours in a day and take a break on other days.
- Freedom to choose where to work. I can work from my favourite cafes or productivity spots. I can also work from home if I want to.
- Freedom to pursue my own projects. I can work on my own projects during my free time without being constrained by an employment contract.
- No paid leave. There is no official paid leave, so I have to discuss with clients on when I can take a break for a holiday.
- No employer CPF contribution (Singapore equivalent of 401k). I have to pay for my own CPF contribution, although it is optional for self-employed people.
- No medical benefits. I have been paying for my own medical insurance for a while now, so this is not a big deal for me.
- Slightly lower income. I am earning slightly less than my previous full-time job right now, but the potential upside is much higher if I am successful with my own projects.
How do you find clients?
One key source of clients is through my network. I have been actively posting content related to tech and startup on LinkedIn to build my personal brand. This has helped me to get inbound leads from people who are interested in my work and want to work with me.
Another source of clients is through referrals. I have been working with a few clients and they have referred me to their friends and colleagues who are looking for similar services.
I am also active in several Telegram groups related to tech and startup. I have been answering questions and helping people out in these groups. This has helped me to build my reputation and get inbound leads as well. There are also job opportunities posted in these groups from time to time.
How do you manage multiple clients?
I have a separate TODO list for each client as well as each of my own project. I check with clients on their priorities and focus at the start of each week, so that we are aligned on what I should be working on. I also update clients on my progress regularly so that they are kept in the loop.