Build the product for clients as an indie hacker

4 min readApr 16, 2020

I resigned from my daily job 2 years ago to purchase my dream of building SaaS products, I’ve built 3 paid products as an indie hacker but none of them has become a big surprise.

I don’t think it is time to give up, but I do need to get more income to support my dream and life.

My Products

Luckily I met a DJ and his team who wanna build a new platform to serve the professional DJs. He got tired of hiring a digital agency, so he asked me if I can build the product as an indie hacker. TBH I wasn’t sure if I can handle all of this because I even don’t know how to do database backup at that time, but anyway I’d like to give it a try.

After 6 months of work, as a tech nerd among a bunch of DJ, I helped define the product, designed all the UI/UX, developed both frontend and backend, and setup all the devops works.

Client’s product screenshots

The product launched on time and got a few paid users, not as much as expected because of the current virus situation, but we both feel excited working with each other. And it gives me more confidence to serve any client as an indie hacker, so I wanna share some tips here about how I build products for the client:

1. Work on collaborating tools

I can’t image how can I communicate with my client without collaborating tools, now we can just sit in front of the desk and discuss anything with each other from designing to the database structure. And I found these useful tools are usually free for my case.

  • Designing: Figma, there’s no learning curve for me as I used Sketch to design my products before, I never taught my DJ client how to use Figma but he learned how to left comments and export by himself.
  • Database designing: SqlDBM, my client recommended it to me and it becomes my favorite tool for database designing.
  • Docs: Google docs, there are some alternatives like dropbox’s paper so it just depends on the team’s habits. We use google docs to share milestones, feature planning, etc.

2. Create milestone

I never set up a milestone when I building my products, but clients always feel better with milestones to keep aligning on the progress. Now I even start having milestones for my own product to keep my personal developing rhythm.

I create milestones based on features, so its span usually from 1 week to 3 weeks. I like setting the deadline on Wed or Thurs and leave some time for the feedback.

3. Try to automate

One of the best things about building products as an indie hacker is I also write scripts all the time to automate my own workflow which makes me more efficient.

For example, when I want to push a new feature online, I just need to run a script in my local, it will push codes to both code repo and the server. After the server receives the updates, it will rebuild corresponding containers, restart the server, run database migration, etc.

Besides, I also have scripts for setting up the Nginx with SSL, backing up the database, creating templates for both frontend and backend after creating a new model, etc.

I believe most of my issues can be handled by some other frameworks or CI/CD tools, but I’m not working in a team so I don’t have to always spending time learning new frameworks or tools. I can just use everything that I’m familiar with and get the work done efficiently.

4. Iterate rapidly

Usually, I finish designing UI and model relationships before writing real codes, but I don’t always have good ideas on the UIUX. Sometimes I would just complete a new feature with a plain design first for the client’s review, and we polish it step by step, it gives both of us better control of the product’s direction.

For the client’s review, I don’t have another server for the staging environment, so I created preview permission for admin users to review new features before it opens to the public. It’s not always working, particularly when the new feature would change the data structure, but acceptable at the earlier stage of the product.

5. Use Email

No matter instant messaging apps or Slack is kind of disturbing, I still feel Email is the only way of the asynchronous communication.

Except for emergencies, I usually communicate with my client by Email, and we only met once and had online calls twice. In this way, I can handle my working rhythm and put more focus on thinking, planning and doing.

Thanks for the community and open-sources

Finally, I wanna thanks for the tech community, I can’t imagine how can I finish the works like parsing music files, or displaying a waveform without open-sources’ help. Not mentioned the open-sourced framework and tools I used every day.

It made me think if I should contribute more to the community, so I shared 1 tech article about redis sentinel and 2 PR for the open-sources while making the product.

Happy creating :)