What have I done after get off work in the past year? In chronological order:
A blog website (that is, the previous version of this site)
Fork open source code, modify, test, and deploy.
At that time, I thought the best way was Notion to store blog content + Vercel to deploy Next.js blog application. This method has the best editing experience and has the latest technology stack to achieve modern website effects. I naively thought that in this way I could keep updating the blog and keep sharing my ideas.
However, when this technology stack goes wrong, debugging is very difficult for a backend programmer. And in the process I encountered some other strange problems, maybe Notion doesn’t want me to use it as a CMS.
I suddenly realized recently: the appearance of the blog is not important, I should focus on the content of the blog articles and keep writing. My dissatisfaction with the blog can only be resolved in this manner.
A web app that tried to make money but failed quickly
This project was inspired by Gefei. I wanted to try to launch a product quickly, using low-cost deployment + AI-assisted development. MBTI is a typical stereotype tool, and I think LLM may be very good at interpreting stereotypes and processing user input.
Reason for failure: After the project was carried out intermittently for about 3 weeks, I decided to give up completely. I don’t like anything about this product. I can’t be a user of this product myself, including the concept of MBTI. I can’t feel the fun!
Perhaps the greatest fun is the freshness brought to me by generating front-end code through AI. As the project progresses to the later stage, I need to make specific adjustments to the components/interfaces. I am not familiar with the front-end technology stack used in the project. I can only use LLM to find fragmented knowledge, copy and paste one by one, and try to run it. I am a crazy monkey typing on the keyboard!
Although Gefei shared a lot of useful product design/operation experience, I did not seriously follow these steps in this project (what a pity!). This product has no accurate target audience and the design is not fun; as for operation and promotion, I gave up before I even got to the SEO step.
A Telegram bot that supports Chinese search
I have been maintaining a Telegram channel for many years, sharing web links related to programming development, game design, and music production. Telegram’s support for Chinese search is very poor. Sometimes when I want to find a link I have seen before, I have no way to search!
I refactored the backend code of the previous note software, added text search function (PostgreSQL), and Telegram channel data synchronization tasks.
This project solved my own needs, and I felt a great sense of accomplishment when the project was completed.
A daily updated scheduled task, translating and summarizing news content from websites such as Hacker News, and saving the execution results as plain text Markdown
I need to get technology news in a timely manner, but I don’t want to spend a lot of time staring at English and dazed on various websites every day. Ultimate goal: I don’t have to browse social media anymore, and the daily news will tell me everything I care about in this Markdown newspaper. Then, my time and attention can be used to do interesting things instead of wasting a lot of time in recommendation streams and information rabbit holes.
The special thing about this project is that its running results are a bunch of Markdown files stored in the Github repository. Because the editor is the best friend of programmers.
Another project that solves my own needs. My personal experience is really good. It only takes a little time every day to get a lot of useful information. Its user experience is similar to Ruan Yifeng’s Technology Lovers Weekly, but it is updated daily. This project solves my problem and may also solve other people’s problems. I’m not sure if there is really a market.
My main job is not easy. I get off work late at night. I used to think that lack of time was my biggest obstacle. After long-term observation of myself, I found that the biggest problem may not be lack of time, but lack of “mental strength”.
Tools
Using tools I like to do what I really want to do is the most important factor for me to maintain my status. When this condition is met, work will be as fun as play. If you have to use a tool that you hate (for example, JavaScript?), you should find a way to make it a tool you like.
Pieter Levels has inspired me the most on this topic. He mentioned this many times in this podcast: Pieter Levels: Programming, Viral AI Startups, and Digital Nomad Life | Lex Fridman Podcast #440
I would like to share my personal views on development tools when I decided to develop side projects:
The selected tool should not be too new and should not change too fast. There is less data on new technologies on the Internet, and LLM Q&A can help me much less than mature technologies. If you use new technologies, it should only occupy a small part of the project, or it should be easy to master.
The selected tool should not be recognized as garbage. This type of tool has well-known problems, and solving these problems has nothing to do with advancing the project.
Try to choose a tool that is familiar to you. It doesn’t take long to learn a new programming language/framework/toolchain. But in actual project development, troubleshooting takes the longest time.
The tool you choose can ensure modularity and improve testability. There are many system theories about “what is good code”, but I find these two points to be the most practical. Tools with good modularity are easy to test. You can only be happy if you write code that is easy to test. If you develop a project alone and want to maintain high quality, you must automate the manual testing process through code; it is very convenient to write test programs for programs with high modularity.
The tool you choose supports plain text configuration and can be managed with git. The editor is the best friend of programmers, make good use of it! New tools with beautiful interfaces appear every day, but I find that many problems have actually been solved many years ago and there is no need to add new components.
Always remind yourself that there is no perfect tool. Don’t get entangled and don’t get stuck in a dead end.
The opposite view of the above: you just need to be familiar with all the best tools / you just need to be familiar with the tools that the company lets you use. But the scope of this article is to maintain and improve the “mental strength” of developers.
I used to worry about small problems. For example, when I wrote a blog in Markdown, I was upset that the editor couldn’t preview the pictures comfortably. Now my idea is: I think my blog is not good because my articles are not well written; it’s not that my editing and publishing process is not perfect. In the previous version of the blog site, I could use an excellent editor like Notion to write, but I didn’t keep it updated, and these problems were not the main problem.
You should automate all possible processes. This post inspired me a lot, and I recommend you to read it: Make your own Tools
Motivation
There is almost no possibility of obtaining material rewards from side projects, and there is no external pressure to supervise me to complete the project. Therefore, all the side projects I decided to do are guided by my own interests, otherwise I would not be able to complete them.
Everyone’s brain works differently. The following are the common bad situations I observed in the process of self-observation, which may be inspiring to you:
Lack of motivation:
Procrastination and weak willpower. With countless bored free time, my attention is trapped in the endless stream of software recommendations. I click on new pages again and again and am unwilling to do what I should do.
Burnout makes it impossible to continue working. My experience of burnout is quite special. I will suddenly dislike what I am doing at a certain moment. The problem may not come from these things themselves, but from a significant change in my heart.
Don’t want to stop working and out of control:
- Immersed in the obsession of wanting to complete things, I am irritable, don’t want to do other things I should do, don’t want to rest, and just want to continue doing what I am doing. In this state, work efficiency is often extremely inefficient.
I have not found a very effective solution to the above problems. I think some of these phenomena are not something I can actively control through willpower. I am trying to understand my true feelings and find a balance. Based on historical observations, my behavior seriously underestimates the importance of rest. When I am in good shape, I can often solve a problem that I have been struggling with for a long time the day before in ten minutes. Lack of time is not a problem. The real problem is how to maintain my mental strength. The word “motivation” is very interesting. It seems that my behavior is inertial.
In addition, it is very important to work hard to create a good environment for yourself. Passively maintain your mental strength through the environment, rather than fighting alone with willpower. Please take the initiative to leave the negative energy environment, stop the consumption behavior caused by your own inertia, and find spiritual food that can motivate yourself. People in a positive environment will continue to feel positive energy. Recently, my method is to watch videos. I recommend two channels that have inspired me: ThePrimeTimeagen, Dan Koe.
Apart from the above internal factors, any project will be affected by Hofstadter’s Law:
It always takes longer to do things than you expect, even if you take Hofstadter’s Law into account.
Therefore, the harsh reality of developing personal projects is that you can only complete a small part of the plan within the scheduled time, which is often lower than your expectations. You need to constantly accept the current situation, otherwise frustration will slowly erode your motivation.
Rewards
My goal is to make money from projects I develop personally. Ideally, I should be paid for my products (i.e., my contribution to society) rather than renting out my time in large quantities. This is one of my long-term goals, but I gradually discovered that this goal cannot be achieved by doing projects based on my own ideas. Programmers naturally do not look for ways to make money, and there are even many ideas that resist healthy business models. I need to improve my cognitive level.
But what if there is no possibility of making money at all? Is the side project I am doing still worth doing? I think it makes sense: to protect the remaining interest in programming. If you want to develop a project, please try your best to develop it. You will encounter many new problems and learn new perspectives. It doesn’t matter if you fail, you will still gain a lot.
I used to be a person who liked to think of various possibilities and like to find people to exchange these ideas, but after seeing this tweet, I stopped my paper talk. I no longer discussed far-flung topics with people who would not act with me, but instead take direct action: @levelsio: “Best thing I did was actively surround myself with builders…”
What to do next
Keep updating the blog and continue to develop more side projects using the newfound methodology. Maybe there will be more failed projects, enjoy the process!
Appendix 1: Regarding the “Tools” section, I’m trying to avoid discussing specific software, because creators should focus on the creative process, rather than discussing tools. But in the past period of time, this software has completely changed my experience of using a mouse on macOS. I have played FPS games for many years and am very sensitive to the mouse speed curve. This software can make using a mouse feel the same as Windows: LinearMouse. I was shocked and cursed, the default mouse settings of the macOS system are really ***.
Appendix 2: Two pieces of content that inspired me to start writing again: