AltriaYear in review4,775 words

2025 Year in Review: I'm Still Moving Forward

From Hangzhou to Suzhou, and from backend development to AI full-stack work—a record of work, learning, interests, and life in 2025.

It's 4:00 a.m. on January 1, 2026. Happy New Year, everyone. Having the first cigarette of the new year. I didn't know how to spend New Year's Eve and couldn't find anyone to spend it with. I got off work at 5 p.m., had no idea what to do, and just kept gaming. Figured I'd at least treat myself to a nice meal. Even after going out for a late-night bite and coming back, I still didn't know what to do. Might as well write my 2025 review. I write one every year; it had to happen eventually. Even if what comes out is a pile of shit, I still have to put something out there. Across these 365 days, it feels like I stayed up late every single day—2 a.m., 3 a.m., or sometimes all night. In Q3, I also did the corporate workhorse thing and changed jobs, joining a company I wanted to work for and doing the kind of work I wanted to do. I moved cities, leaving Hangzhou after more than three years for Suzhou. As the saying goes, “Above there is heaven; below there are Suzhou and Hangzhou.” Now I've made it to both.

Checked in on Juejin all 365 days. Every day, the first thing I do when I get to my desk at work is open Juejin and check in. It's a habit now. You've all worked hard. Here's to 2025—cheers.

Work

Looking Back at Q1–Q3: What I Did at the First Company

Completed the app iteration tasks. The rest of the time went into preparing things for the project. Pretty much just coasting.

Product iterations: Four apps, mostly services related to large language models, or TTS voice services—MiniMax, Gemini, GPT-4o mini.

  • Set up GitLab AI Code Review.

  • Configured offer codes for Apple subscription plans.

  • Optimized server costs by reducing memory, disk, CPU, and other production machine configurations, and shutting down some unused machines.

  • Wrote “How Short Links Work and How to Implement Them” and shared it with the department.

Promotion review: Passed on Friday, January 24. My grade went up to senior developer, but my salary didn't.

On the xxxx project, I spent the whole of Q3 working overtime on a 10–10–6 schedule: start at 10 a.m., finish at 10 p.m., and work Saturdays every other week. Every day was spent rushing through releases. Looking back, I don't even know what I was so busy doing. Other than keeping iterations steady, delivering APIs and documentation on time, and releasing on schedule, I was just a pair of hands. I didn't contribute much else.

.................. (There might have been other things, but my memory is bad and I've forgotten them.)

Left on September 30, at the end of the month. My last day. Meetings and handovers in the morning, bought coffee for the other two people in my group at lunchtime, then waited until 6:30 p.m. to clock off. Goodbye to the folks I'd spent three years with.

Looking Back at Q4: What I Did at the Second Company

The team atmosphere is really good. I got lucky. The first two weeks were about getting familiar with the business and quickly settling in.

Attended a meet-up: Talks about Milvus, A2A, RAG, and Dify. ri:github-fillcrazywoola.github.io/dify-x-milv… ri:github-fillgithub.com/milvus-io/m…

November and December: Went all out on full-stack development—a Next.js AI digital-human platform, supporting several business launches, all kinds of MCP/RAG, and building the reasoning logic for a ReAct service. ........... (Ten thousand words omitted. There's no way I could write it all.)

Internal Next.js sharing session: React, Next.js, TypeScript, Ant Design X, ahook.

Monthly review:

  • Can other people reuse what you've built?

  • Personal reviews should emphasize the future vision rather than project details; think longer term, such as reusing AI capabilities.

  • Share AI coding tips.

  • Why choose Node? What comes next? Think it through yourself and own the whole project.

  • The department's vision and engineering efficiency—the future isn't just about planning use cases.

  • Once xx is in place, can the associated side effects be turned into tools on the platform?

Life

The first company: The work wasn't tiring, but the business requirements had no value, and the company atmosphere was terrible. Every day I'd stay up until 3 or 4 a.m. watching Yuanyuan's tutorials. Late nights every single day. My living conditions were awful too. The sound insulation was terrible, and the asshole upstairs kept making weird noises. I still had two months before my lease ended. Having to pay a deposit to rent is such a pain, and not getting it back after moving out is just as disgusting. There were restrictions on the Category E talent subsidy. Ziroom did issue the rental documentation quickly, so nothing to complain about there. I'll probably still look through Ziroom for my next place, but sharing a flat really is miserable.

I couldn't sleep, day after day—just insomnia. The soundproofing really was terrible. So much noise: not only the cars and wind outside, but chairs moving upstairs and people walking back and forth. I moved to another place in March, but it was still noisy. Something was wrong with that residential compound: renovations every day, and they kept replacing the elevators too. Way too loud.

The second company: I finally have an employee badge too. The workload is okay, and the overtime is manageable. One coffee a day keeps me alive. After going home, I mess around until 2 or 3 a.m. before sleeping. When I first joined, I needed time to get familiar with things. Almost everyone in the team smokes, and so do I, so I quickly got along with my colleagues. My leader is really good, but also puts a lot of pressure on me. Every day he asks me out for a smoke to talk about future plans: what to do, how to do it, and what he needs me to do. From our conversations, I feel he's more interested in innovative AI products, with that independent-developer mindset—looking at popular products and browsing product communities every day. He asked if I could do frontend work. He seems pretty informal about things. You have to set your own OKRs, figure out what to do based on the project, and then do it. If he sets them and you don't act on them, he thinks there's no point. It's a hands-off way of developing people.

From discussing vague product requirements to launching the current business alpha, and then integrating different business areas, he's given me a lot of guidance throughout. My colleagues have talked me through frontend conventions too. We've had several team outings, and the company hackathon, annual party, and assorted weekly sharing sessions have been pretty interesting.

The department has a good atmosphere. I can chat with everyone, people aren't too competitive about overworking, and there are quite a few full-stack developers in my team.

I remember a sentence I saw recently that really helped: 80% of business-domain difficulties actually come from highly abstract jargon and missing business documentation. A lot of knowledge is passed from developer to developer by word of mouth.

Spend more time getting the implementation right and avoid incidents. Once an incident happens, it's already too late to start scrambling. Learn to ask for help, bring colleagues into design reviews, and remember that complex requirements are also an opportunity. Do a good job, and you'll leave a very good impression.

I'm starting to want to steer my career toward AI application development and find a vertical domain to really dig into.

Japanese

Started with the fifty kana sounds at the beginning of the year → grammar → New Standard Japanese, Elementary I → Elementary II → the Blue Book → the Green Book → vocabulary with MOJi → listening → past papers for the final push → Yuanyuan's N2 intensive course (they started back in December, so I'm more than two months behind; I bought two new books, TRY! and a pre-exam vocabulary preparation book, which arrived today, Sunday—time to start catching up) → New Standard Japanese, Intermediate I and II → long, complex sentences → intensive listening.

On Sunday, July 6, I went to the Zhejiang University campus to take the N2 exam. After six months of studying, I went straight for N2, all while working full-time. In the end, I didn't pass, but I really enjoyed the process. I'll keep building up my skills in 2026 and take it again in December. Let's go, let's go.

Games: Played Lots of Mobile Games, Good at None of Them

Arknights: Every day, the moment I wake up, I open Arknights, collect resources, and do the missions. Honestly, grinding every single day. Bought a RMB 198 pack, picked M3, Medic, the big premium option.

Naruto Mobile: Log in every day and spend my stamina. Took a break for a while in the middle because of exams and job hunting.

Honor of Kings: Been playing since high school. It's almost ten years now.

Mahjong Soul: Play friend rooms or tournament rooms every day. As for my Mahjong Soul record, I kept using an alt to grind the consecutive-wins achievement. It's so hard: finish in the top two ten times in a row in four-player mahjong. I'll get the four-player one done first, then tackle the three-player one. Later on, I stopped playing ranked with my main account. On weekends and on ordinary days, I'd go play Japanese mahjong near the Longfor Paradise Walk mall. After moving to Suzhou, I played in person once too.

Played League of Legends: Wild Rift for a few days recently. Pretty good.

Anyone want to play together? 😁

Cooking

After coming back to work following Chinese New Year, I started in February: bought a pan for RMB 69 and a rice cooker for RMB 158. When you add it up, it doesn't actually save much money right away; you need time to make it worthwhile. With those initial material necessities, their value comes from long-term use. It was okay. For a few months, I cooked dishes I wanted to eat. I even tried Jiangxi stir-fried rice noodles. They were alright—edible. Now I don't even know where I tossed the pan and rice cooker. There's no time to deal with cooking. Every day it's takeout, takeout, takeout.

Electric Guitar

In Q1 and Q2, I kept watching band anime—an aftereffect of watching Bocchi the Rock! Some of the more anime-ish Tagima/Fender colors with a single-single-humbucker pickup setup really did look good. I don't know that much about guitars myself. My acoustic guitar is already just sitting there collecting dust. If I buy an electric one, will it be exactly the same? Collecting dust again, bought just for the novelty?

Signed up for an in-person course, with classes every Sunday afternoon from March 10 to June 22. Went to try an electric guitar lesson on a Saturday: 30 minutes, over in no time, just basics, chords, pitch, and rhythm. Later I bought a Tagima 635 Pro in vintage white plus a Yamaha THR10 amp for RMB 3,600, then a RMB 1,700 in-person course. Just like that, more than RMB 5,000 was gone.

Melody, rhythm, harmony, tablature, numbered notation, scales, hammer-ons and pull-offs, intervals, strumming, chords, the scale positions across five positions, Guns N' Roses, Ultraman, slides (three kinds: with both a defined start and end, with a defined start but no defined end, and with neither) plus scales, hammer-ons and pull-offs plus scales, hammer-on/pull-off exercises in the la fingering pattern, bends, “Don't Say Lazy,” chords plus strumming plus muting. Guns N' Roses, Ultraman, “Don't Say Lazy,” “Starir to Heaven,” and so on. Spent RMB 99 on some ACG-related materials, installed Guitar Pro 8, and imported p8 files. The software really is good: it can play things back automatically and loop a selected passage.

Haven't touched it since July. I've really been busy. Learn some new songs in 2026.

Fitness

Bench press, shoulder press, barbell squats, leg press, seated rows, barbell curls, and cable triceps pushdowns. Found tutorials on Xiaohongshu and followed along. Didn't stick with it for very long, just on and off. I really do need to take care of my health and get a checkup. I reckon all my readings will be off. Smoking, drinking, and staying up late every day—not a single healthy habit.

Commuting: A Ninebot Electric Scooter

Didn't get a motorcycle, but bought a Ninebot electric scooter for commuting, and it's pretty convenient. Around RMB 3,900. Paired it with the Shoel helmet and Insta360 I'd bought earlier, so those finally got some use. Then I bought a pair of A🌟 gloves too. They look good. Nice, nice. Mainly, taking the subway to and from work during the first two weeks was exhausting. My place is a bit of a walk from the station, and the office is another walk from its station. Carrying a backpack made my shoulders ache. Couldn't take it—might as well just buy an electric scooter.

A motorcycle would mean dealing with registration, and it's dangerous, with traffic lights everywhere. The company does have parking, but forget it; I'll think about buying one later. I've already had who knows how many accidents on the electric scooter. That reminds me, I need to buy insurance on Alipay. I've been putting that off for ages. I also sold the XDS road bike I'd bought before for a few hundred yuan.

Anime: To Live Is to Keep Going Through Hardship and Happiness

Technology

Personal technical learning. These are just notes I've put down casually. There's actually much, much more.

Large Language Models and Agents

In Q3, I was looking at the open-source WeClone project. A friend is the author and recommended it to me. It mainly recreates a digital version of a person from chat history, fine-tuning a small model and deploying it locally. It uses Qwen2.5-7B-Instruct, with LoRA for fine-tuning during the SFT stage to strengthen the model's knowledge in a particular industry domain. There's the visual LLaMA-Factory framework, one of China's most popular fine-tuning frameworks. You can rent a machine on AutoDL and try it yourself. There is quite a lot of theory I still need to catch up on.

I also looked at some open-source agent projects built with Spring AI and LangChain4j, and found a few LangChain and LangGraph projects to read through. Most of what I saw used RAG plus a single agent. A better design is a multi-agent architecture: independently developed agent applications with their own toolsets, an initial intent-classification stage for routing, plus a task-planning agent to break tasks down and analyze what should run sequentially or in parallel.

Linear regression, loss functions, neural networks, CNNs, RNNs, probabilistic language models, fine-tuning and freezing, reinforcement learning, neural network language models, Transformer, BERT, GPT. ri:bilibili-fillRecurrent Neural Networks: Understand RNNs in Five Minutes with Clear 3D Animations—bilibili

The concept of agents, prompt engineering, function calls, chain of thought.

LangChain: PromptTemplate/FewShot, LCEL orchestration and streaming output, MessageHistory/Redis history management, multimodal image inputs, custom tools with @tool, and RAG indexing, retrieval, and generation. Build and deploy observable LLM services with LangServe/CLI/Swagger/RemoteRunnable, Smith tracing, and verbose logs, supporting invoke/batch/stream and concurrent calls with asyncio. On the Streamlit side, use StreamlitCallbackHandler to collect streamed results and display them as a sentence.

LangGraph: Build a multi-agent graph orchestration system. Design x types of functional nodes along with Start/End nodes, conditional edges, and back edges; use LLM classification and routing to write into state; combine checkpointer + store for short-term and long-term context. Connect the Amap MCP toolchain and a Redis vector store (couplet CSV → embedding_model:text-embedding-v1) for RAG/generation, while also supporting human approval with interrupt() and time-travel replay debugging.

The LLM Fine-Tuning Process

Frontend and Tool Experiments

On the frontend side, I've been writing full-stack React projects with Next.js. I also wanted to try Nuxt.js, a full-stack framework for Vue, since I'd never used Vue. Next.js and Nuxt.js are like brothers in the React and Vue ecosystems: both were created to simplify server-side rendering (SSR) and static site generation (SSG). If you use Vue, Nuxt.js is your ideal companion. It also provides SSR/SSG out of the box, making high performance and SEO optimization easy for Vue projects.

Quickly put together an online mind-mapping feature in a Nuxt 3 project called mindsheet, using the * mind-elixir= 5.3.8 library to import and export xmind/json and view the path data online. Just a little demo to play with. It really is very similar: backend logic still goes in the server/api layer, while the frontend is all Vue components.

Claude Skills have been getting a lot of attention lately. How are they different from function calls/MCP? Fundamentally, they're all meant to extend a model's capabilities, but they focus on different things. Claude Skills offer a new kind of plugin-style enhancement: packaging instructions, examples, and code to give Claude expertise in specific domains. Claude Skills use tokens more efficiently because they're loaded only when actually needed and occupy almost no context most of the time. This is more flexible than a prompt alone and more systematic than a simple function call.

Drawing with draw.io is pretty good. You can turn text directly into a flowchart, or convert Mermaid text directly too. There are only ten free uses per day. For very complex logic, the results depend on which model you use. DeepSeek, for example, didn't generate particularly good results.

Made two or three things for fun with Google AI Studio, all using Next.js. One was a Christmas tree with custom image/music uploads. Automatically created the GitHub project, linked it to Vercel, and deployed for free with Vercel: simple-icons:verceltraegrandluxury-interactive-christm.vercel.app/. Bought a domain on Alibaba Cloud, configured the domain's DNS on Cloudflare, and it can be accessed directly from mainland China: www.hakusai.top/. Another project adds Christmas hats to avatars. I checked Kling and Jimeng, but they both had watermarks and required a membership, so I thought, forget it, I'll do it myself. Gemini-2.5-flash-image.

Recently came across the phrase “the 80-point crisis.” We can easily use a large model to build an 80-out-of-100 website. But to actually put that site into production, to make customers willing to pay, you often need to get it to 95 or even 100. Going from 0 to 80 with a large model turns out to be simple—a few sentences and it's done. Going from 80 to 95 or 100 is very, very hard. There's already a job called an “AI cleanup engineer.” Having used AI to write frontend code, I really feel that. simple-icons:vercelnext-ai-draw-io.vercel.app/ ri:github-fillgithub.com/DayuanJiang… ri:github-fillgithub.com/nuxt/nuxt ri:github-fillgithub.com/SSShooter/m…

A simple version of heart-shaped fireworks with Gemini 3 Pro. Website: simple-icons:vercelmystic-fireworks.vercel.app/ — source: ri:github-fillgithub.com/hakusai22/M…. Prompt: forgot.

Algorithm-related things to work on later. I forgot where I found this outline.

  • Prompt injection / how Transformers work / the attention mechanism / RAG evaluation, human + machine evaluation / recall and precision / ragaflow / images and tables / multimodality / HyDE / reranking / hybrid retrieval / self-llm && happy-llm && Tiny LLM Universe.

  • Core fundamentals: Transformer architecture and the attention mechanism / the Hugging Face Transformers library / LoRA and P-tuning fine-tuning techniques.

  • Deployment optimization: ONNX Runtime and TensorRT-LLM / learn model quantization and on-device deployment / balance inference acceleration and precision.

  • In-depth practice: distributed training with PyTorch / LangChain application development / enter Kaggle and HF competitions.

  • Multimodal development: CLIP, Stable Diffusion, Whisper / multimodal fusion projects.

AI Coding

The traditional development process is usually: requirements analysis → technology selection → implementation → testing and deployment.

In the AI era, the process becomes: business understanding → problem definition → solution design → development with AI → quality control.

Apart from Next.js being easy for AI to generate code with, and the supposed SEO optimization, I can't think of what advantages server-side rendering has.

For AI coding, I've used Trae Pro, Cursor, Qoder, Copilot, Codex, and so on. In the end, Cursor with Claude 4.5 still felt the best. I was basically going through one Cursor Pro account a week. Now I've switched to a Copilot Opus account.

My everyday tools: Cursor/Copilot, with Claude Sonnet 4.5 / Opus 4.5 models.

Let me get this out of the way first: I have no frontend development experience, and this is my first frontend project. Ninety percent of the frontend code in the project was generated by AI. It lets someone who doesn't know frontend development quickly deliver an MVP or complete a requirement. Although I strongly recommend AI coding and love using it—the immediate feedback gives you a sense of achievement—is the generated code a pile of crap? Very probably. AI is fast early on, and even faster at creating a code mess.

No matter how good the architecture is, it's hard to escape the fate of messy code. Requirements keep changing. Your architecture was designed for the old requirements, and as new ones arrive, it gradually stops meeting them and needs refactoring.

Interview Preparation

I've constantly been preparing for interviews while working.

LaTeX syntax and résumé revisions: www.overleaf.com/ ri:github-fillgithub.com/billryan/re…

In Q3, I wasn't in a great state. Every day, wake up and go to work; finish work and need to sleep. Watched Hollis's interview content and live call-ins, made summary documents, and reused them.

My own summaries in Yuque: project knowledge points plus Hollis's standard interview questions, that sort of thing.

icon-park-outline:new-larkLeetCode Hot 100, Python/Java Versions

Ten thousand words omitted........... (Feel free to DM me to chat.)

Mostly Feishu + Yuque for summary documents.

In-Person Event: The Trae Hackathon

Saturday, November 22, Suzhou. Coding time was from a little after 1 p.m. to 4 p.m. Built a project from zero using Trae Pro's SOLO mode. With only three hours, I couldn't do anything huge, so why not make a site for the fifty Japanese kana sounds? The hotel's Wi-Fi was basically unusable, and my mobile data was slow too. I used the hotspot of the teacher next to me, “Gan Zhong Xue (干中学).” Built the page with Next.js, Tailwind CSS, Ant Design, and DeepSeek. Good enough. Deployed to Vercel at the end; Trae's built-in integration was pretty convenient. SOLO mode is still too slow, though. I can't stand it. Website: simple-icons:verceltraekanastudio1ssw.vercel.app/. The features are kana plus AI-generated example sentences and vocabulary. I didn't even give a pitch. Maybe I got the excellence award because I deployed it—most people didn't. The prize for that award was a hoodie.

Plans for 2026

  • Go deeper into full-stack development and get familiar with the frontend ecosystem.

  • Learn concepts in the algorithms field.

  • Explore automated testing.

  • Build up my AI and personal technical knowledge.

  • Independent development: keep watching the latest products on the market. Technical skills without product thinking aren't enough.

  • Japanese N2: plan a second attempt in December 2025.

  • English: it's so important. Spend some time every day continuing to learn it.

  • Fitness: smoke less, stay up late less, and get healthy.

  • The Japanese edition of the My Teen Romantic Comedy SNAFU: Monologue manga.

..... (//todo: add more later)

Other Thoughts I Want to Remember

Keep trying and keep challenging yourself. There are endless possibilities in the process of becoming a better you.

If you like it, go for it. If you get it, cherish it. If you miss it, let it go.

If you only do what you're already capable of, your life will never change.

I just don't have anyone to catch me if I fall. I need to think through the possibilities over and over until I have the courage to make a choice.

A saying I really like: too much flour, add water; too much water, add flour.

One working demo is worth ten thousand brilliant explanations.

The more you care about what others think, the more self-centered you actually become. Stop treating other people's approval as a necessity. We really do need to find the courage to be disliked.

Your focus isn't on the other person; it's on yourself.

When “What do other people think of me?” drives you, your behavior may be desperately trying to please them, but all you actually care about is “me.” That's being self-centered.

Failure runs through life from beginning to end. People always ask, “What if I die?” but never consider whether they're really living.

Go look at open source. Talking to people who are really good at what they do will teach you more too.

Do first and learn afterward; learn as you go. “Learn first, then do” is the mindset of a closed-book exam.

Future plans and thoughts on AI in 2026 from a group member's weekend sharing session I listened to recently. I also met lots of people this year: “Xie Daima de Hezi (写代码的盒子),” “Shiliu he Shan (石榴和山),” “Nimbus,” and a whole bunch of other online friends.

There's actually plenty more I could write. This has probably taken a few hours, and since I've been scrolling Douyin while writing, it might not be very good. It's just too late now and I want to sleep. Going to an internet café tomorrow. It's almost 4 a.m.

Happy New Year, everyone. あけましておめでとうございます


Originally published on Juejin: 2025 Year in Review: I'm Still Moving Forward.