This article was translated by AI using Gemini 2.5 Pro from the original Chinese version. Minor inaccuracies may remain.
Last night, I bought the domain name clice.io and deployed clice’s documentation website on it. There’s an indescribable joy in my heart. On one hand, I really like the clice.io domain; it looks very refined and beautiful. I actually had a few other candidates, such as .dev, but in the end, I chose this one, which is relatively more expensive (500 per year) but looks better. On the other hand, it signifies that clice has entered a new phase.
Does this new phase mean clice is ready for preliminary use? Unfortunately, not yet. So when will clice be usable? This is indeed the most frequently asked question I’ve received recently. Seven months have passed since the first blog post about clice was published. According to the estimates at the time, clice should be highly usable by now, but things don’t always go as planned. So, I’m writing this article to update readers who are following clice’s progress on what’s happened in the past few months.
Time Constraints
First and foremost, the main reason is a lack of time. I’m a junior university student. In the first semester of my junior year, I didn’t have many classes, and I’m quite a homebody, so I spent a lot of time coding in my dorm when I had nothing else to do. This meant I could dedicate a significant amount of time to clice, roughly 6 to 10 hours a day. At that time, I also didn’t have anything else to do, so I could fully immerse myself in clice, spending my days reading and writing code without the need for additional context switching to handle different tasks. The winter break was largely the same.
Then came the second semester of my junior year, from March to June. In March, I was mainly looking for a summer internship. My thinking at the time was quite simple: since I’m not from a computer science background (I studied chemistry), if I wanted to find a job related to computers in the future, a summer internship would be more convincing. Also, I had never interned before and wanted to experience what work was like. Fortunately, the internship search went quite smoothly. A senior’s team happened to be recruiting interns, working on C++ compilers and toolchains, which is a field I’m familiar with and very interested in, so I applied for that position. The interview process was very smooth, and the interview experience was excellent; there were no rote “eight-legged essay” questions, but rather questions based on my resume, and the algorithm problems were also simple (a topological sort in the first round, no algorithm problems in the second, and two easy problems in the third). The only minor hiccup was that they hoped I could start as soon as possible, rather than waiting until summer. I had quite a few classes scheduled for the second semester of my junior year, but considering it was a rare opportunity, we eventually negotiated for me to intern four days a week. I skipped classes I could, and most unskippable classes were in the morning, while our department generally only required arrival by 10:30 AM, so sometimes I’d go to work after my 8 AM class. The good news was that the company was very close to the school; a ten-minute subway ride from the school gate, so commuting didn’t take much time. Thus, from April to June, I balanced classes and the internship. Although I didn’t work on weekends, sometimes I had school matters to attend to, so very little time was left for clice. Moreover, constantly switching between different contexts was far less efficient than when I was focused on one thing.
Looking back now, I was indeed very lucky. My first resume submission and first interview led to an offer, the location was ideal, and the work content was very interesting.
Now it’s July, summer vacation has started, so school matters should be over, right? But then I was informed that I had to attend “mini-semester” courses from July 13th to August 4th, which are hard to miss. After much thought, I decided to resign and return to finish my studies, also to catch my breath; balancing classes and the internship had been exhausting. My last day was July 11th. The “mini-semester” essentially involved listening to lectures, so I brought my laptop and worked on clice during class.
So, after August, there should be nothing much left with school, right? That’s what I thought, but then August and September mean getting busy with autumn recruitment; it’s time to look for a job! Actually, I’ve submitted some resumes recently and taken some quantitative firm coding tests, which made me feel quite defeated. Every day is spent browsing Maimai (a Chinese professional social network), submitting resumes, practicing coding problems, and memorizing interview boilerplate, feeling incredibly anxious. Yesterday, I discussed it with some friends in a group chat and suddenly wondered why I was doing this. Why apply for positions I don’t want, and why force myself to memorize boilerplate and grind coding problems? It feels like self-inflicted misery, do I enjoy being a masochist? So, my strategy for autumn recruitment will probably be to go with the flow. I’ll still submit resumes, but whether I pass coding tests/interviews will be left to fate. I don’t want to memorize boilerplate or solve many hard problems anymore; it’s torturous. If a company/department insists on difficult algorithm questions or boilerplate, even if I got in, it would probably be a miserable experience. Finding a job also depends on luck and mutual selection, so I’d rather spend more time on clice!
Since I’ve brought it up, I’ll also put in a plug for myself: if there are any interesting positions, please consider me! I’m mainly familiar with C++ toolchains and compilers, but I’m not necessarily limited to this direction. For other directions, if you don’t mind my lack of experience, I’d also consider them!
Optimistic Estimates
Besides personal time constraints, another factor is probably a common mistake programmers make: underestimating project progress. In “The Mythical Man-Month,” the author points out that we tend to use “man-months,” a seemingly linear unit, to measure nonlinear, complex software development work. The effort to implement a feature is not just simple coding; it also includes a large amount of hidden costs like debugging, testing, and integration with existing systems. I discovered a very serious flaw in my previous index design in practice, to the extent that this part of the code needs to be rewritten. The good news, however, is that our project has no delivery date, so we have ample time to find the best solution.
Despite being busy and not having time to write specific code, I can still use my free time to reflect on the shortcomings of previous code designs, record them, and think about how to solve them later. These are things that can be done anytime.
After several months of slow progress, clice is now basically usable, handling document events, highlighting, code completion, and other functions. However, it still requires a lot of testing and refinement before the first version can be released. I think I’ll only consider releasing the first version after I’ve personally switched from clangd to clice for a period of time.
There’s also the issue of multi-person collaboration. I’ve always been somewhat unconfident about it. For a complex project like clice, especially a few months ago when the code might still undergo large-scale changes, it wasn’t very suitable for collaboration. However, the good news is that after these past few months, it has reached a point where collaboration is relatively easy; the overall code framework has stabilized. Indeed, some group members have already deeply participated and are responsible for implementing some features, and everything is moving in a good direction! I aim to release the first version within the next two months and completely replace clangd before I graduate from university!
