Anthony Fu @ antfu.me

Mental Health in Open Source

Mar 16 · 25min

中文翻译 Chinese Version

TL;DR: I am doing great and not going anywhere. Having some pressure but still holding up and trying to improve. Thank you and don’t worry!

This is the 4th year since I have started doing Open Source. To be completely honest, I began to feel things were getting out of my capacity more and more often. I am still not sure if I have ever been through actual burnout or not, but I surely have experienced the ups and downs of my productivity and motivation periodically.

This post is not a guide, or not even complaining. It’s more like my personal diary, which I serve as a record for myself. I just think it might be interesting if I could share those with you.

If you are been through a burnout or feeling close to it, I’d recommend you to take some breaks, talk to someone, and seek professional help if needed. Here is also a nice article Maintaining Balance for Open Source Maintainers that you could reference. Take great care!

And so here, let me tell you some random stuff I have been thinking about recently


Unprepared

In a way, Open Source is still very new to me, even today.

Since I started to learn programming and knowing about open source, I have been dreaming about being a full-time open source developer. When I was in college, I was eager to get recognized by the open source community, trying hard to "figure out" some impactful work that I could accomplish. All of a sudden, you will reach a pivotal point, where your project might unexpectedly take off, or you have been invited to join a big project - in a moment, you will start to feel all those excitements as well as the responsibilities suddenly come along. In a few days, when the initial excitement starts to fade away, you start to realize that it also means so much responsibility and other things that you have never thought about. Despite that I have been trying all my college years to get into open source, when I finally stepped into it, I realized how much I was unprepared.

One interesting thing about Open Source is that one is probably never prepared. You might encounter tricky technical problems, or have to keep up with the new technologies, but there are also a bunch of things other than coding that you have to deal with. You have to be your customer support to answer questions; be a designer, a writer to prepare nice documentation; a project manager to keep the project on track; a team leader to onboard new contributors and keep the team motivated; marketing your stuff; speaking at conferences; and so on. Those are the "side-effects" of being an open source developer, many things come to you in a bundle, not only the code.

For me, it’s so much a challenge. I am quite introverted, I am not good at chatting or making conversations. I was terrible on my English exams back in school, and wasn’t confident at all to speak in English. I got stage fright even just in front of my classmates. And I suppose I don’t enjoy team management either, even though I never led a team - so many things to be afraid of.

It doesn’t give you the time to prepare for ready (or on the other hand, one might never be ready without taking the first step), as the project grows, as your responsibilities grow, you will be forced to learn and adapt. When it naturally grows a team, you have to learn to communicate, to lead. When someone invites you to do a podcast or give a talk, they won’t wait 3 years for you to practice the language or speaking skills – you either miss the chance or you fight your fear and do it. Because I love doing Open Source so much, I have to conquer them and myself.

Might be overwhelming it seems. But if you take those challenges and get through them one by one, gradually, you might find that they are quite fun and rewarding. In the end, I appreciate a lot about all those chances for pushing me out of my comfort zone and forcing myself to improve. Throughout these 4 years in Open Source, despite still being not perfect at many things, I managed to speak English much more confidently. I have given talks at many conferences, some of which even have thousands of attendees. I still get super nervous before every talk, but at least I am no longer afraid of doing it.

There are still so many challenges and surprises coming up. I am half fearful and half excited to see what’s next.

"Expectations"

Human adapts. That drives us to survive as well as keep improving, but that also makes us hard to stay satisfied.

I was so excited when I started my first few open source projects. I would keep refreshing the page, eagerly waiting for new issues, new pull requests, and new comments to show up. Every single star would make me happy, and I’ll try to help with every single issue as much as possible. I set milestones like 100 stars, 500 stars and celebrate when I reach them. I still remember how proud I was when I told my friends that I had a few hundred stars on my projects and I was making some impact on the world.

Once you reach those goals, things start to become "usual". You will then start to expect more and set higher goals. At a certain point, I start to not care about those numbers of stars or downloads anymore. It’s not necessarily a bad thing as they are not the metrics I should be focusing on anyway, but I sometimes miss the old days when I could get joy from those simple things.

I gradually realized, that the experience of so many things in our life has a direct relationship with our expectations. When we just get started, we have little expectations, which could be relatively easy to reach. As we go forward and stand on a higher ground, we start to expect much more, that might not scale linearly. Getting 100 more stars when you have 1000 does not sound as impressive as when you have nothing. When you have 1000 stars, you will look for another 1000, and only 100 can no longer satisfy you. That is odd to me, and I don’t enjoy this "human nature" of mine.

I found that lowering my expectations and being grateful for what I have is a good way to keep me happy. When you start to realize you can’t keep reaching your milestones one and another, it’s a good way out to stop seeking higher, take a break and enjoy the view around you - maybe you have already reached high enough. Since I started to "not overly concerned about gains and losses", I found myself much happier trying different ideas even if they might not be successful - because I don’t have high expectations of them, there is no such concept of "failure" to me. And if some of them later might turn out to be good ideas, it would be a nice "unexpected surprise".

If you are interested, I explained about my ideas-finding process in the About Yak Shaving post.

"Self-Expectations"

Expectations apply not only to what we are doing, but also come to myself. When I care about a project too much, I often find I am expecting myself too much in the role of being a kind and friendly maintainer. I will feel bad when I read people criticizing my projects, when a certain bug causes people trouble, or when I don’t reply to issues in time, etc. The feelings become even stronger on popular projects, as you know there are a lot of people who depend on it. Those self-expectations put me under quite a lot of pressure and stress.

As I mentioned in another post, the ratio of maintainers to users is often unbalanced in open source projects. It’s really hard to meet a new collaborator or team member, but there is basically no threshold to grow more users due to Open Source being naturally free.

I think it’s hard for maintainers to make the mind shift and consider that they are not obligated to solve the issues for others – because open-source software is usually served as-is. Especially for maintainers who care about their users and community, it’s hard to ignore when we receive new issues. But in another perspective, one person’s time and energy are limited. When the amount of work grows out of one’s capacity, it’s better to set priorities and focus on the most important things first.

I wish someone could tell me this when I started maintaining high-traffic open source projects (you have great resources online like this) - it took me a long time to realize that I don’t have to be perfect, and it’s okay to do things at my own pace. Instead of receiving notifications passively, it’s better for me to turn off the push notifications, and to proactively check the issues and pull requests when I feel ready to do so.

I made a talk about How I Manage GitHub Notifications, if you are interested in more about the methodology.

Lowering the expectations of yourself - no one is perfect, and no one is a machine. Don’t let them become a burden to you. It’s more important to maintain a healthy and sustainable pace, and to keep yourself happy and motivated to have more positive impacts in the long run.

When Your Dream Becomes Your Job

It’s awesome to live in your own dream, and honestly, a privilege. But also, to be realisistic, having a dream is quite different from living in it. Dreams are always idealized, excluding all the boring details. My dream is to be a full-time open source developer. Yes, it sounds great to be independent, to work on what you like, to have a flexible or no schedule at all, to work from anywhere, and to benefit the world, etc. But in reality, things are not that simple.

It’s quite similar to "Make your hobby your job". It indeed has a great amount of benefits, like you will be more enjoyable and productive, but it also comes with obligations and responsibilities. When a hobby becomes a job, you lose the freedom to choose when and what to. Before, you would do your hobbies as after-work relaxation, but now when you want to relax with your hobbies, they become work.

I was lucky that software development is a big field with many different things to do. Outside of the "main" open source project maintenance, I sometimes do some small projects (Generative Art, Stable Diffusion, some little experiments, etc.) for fun to refresh my mind (as a kind of "relax" from main projects). I also enjoy playing indie games a lot, while I keep thinking of getting serious about developing some games - but that’s another story - at least now I still have some ways to escape when I really want to stay away from code.

I probably enjoy programming too much that I don’t have strong feelings about this. The line between "work" and "fun" is quite blurry on my side. Sometimes, a fun project can become something serious that people rely on.

Velocity, Scope, and Quality

This is actually the topic that drove me to write this blog post.

Let’s start with this "Iron Triangle" of Velocity, Scope and Quality.
(typicall they are Quality/Speed/Cost where I made a few adjustments here)

The Iron Triangle of Velocity-Scope-Quality

Usually, people would say – in these three factors, you can only pick two. If you want to deliver a project faster, you might have to sacrifice the quality or have a smaller scope of features. If you want to have a high-quality and feature-rich product, you might have to sacrifice speed to deliver good stuff slowly, and so on.

To my personal standards, having high-quality software in Open Source is an unbendable standard that I would never compromise.

While also, keep a certain velocity and momentum is also very important to me. The majority of my motivation is driven by the feeling of accomplishment after I have finished something. I could be in an excellent flow when I can create the feedback loop of iterating things out then delivering.

So, to say, I usually pick Quality and Velocity. In the beginning, the scope of my projects was quite clear and small. I managed to keep the quality high, deliver things fast, and get feedback from the community quickly. At that time, I was able to stay productive and motivated to keep working on those projects.

Scope

I was "accidentally" able to keep that momentum and velocity for quite a long time. I started getting into Open Source with i18n Ally and VueUse, and since then, I joined Vue and Vite teams. Within 2021 alone, I came up with Slidev (April 2021), UnoCSS (October 2021) and Vitest (December 2021) – Everything went almost too smoothly that I barely realized the capacity of having larger scope will have a certain limit. I continued doing so with the "velocity" ignorantly since then. I am super lucky to meet the amazing teams and community, and get help from them:

It’s a shame I couldn’t list all of them, and many of them are actually overlapping across projects. What I am trying to say is that, I am not working alone, and I can’t do all of these alone. I have borrowed so much help from the community and the teams to have all those projects. I am truly grateful for that. On top of Quality and Velocity, it seems that I also work on a wide Scope of projects - looks like it broke the rule of the iron triangle - but actually, the awesome community behind the scenes is the "magic" that makes it possible.

Capacity

The amount of work required to maintain multiple high-traffic open source projects is honestly massive. I should have reached my limit a long while ago without help from the community. While the community helps me a lot, it still, takes a lot of energy to communicate, coordinate, as well as consistently context-switching. Over time, I accumulated many things I had to do myself, many ideas I wanted to try, and many things I wanted to improve.

I want to keep those projects alive and keep them moving forward; I want to write more blog posts to share my thoughts; I want to do more talks, to travel and meet people; I want to do more live streams as I know many are waiting for it; I have to clean this thing up, to do that release; I also want to learn French; And spend more time with my family - I mean, this is probably just life. People have their own concerns and responsibilities, I ain’t any more special or busier than others.

"But somehow, there seems to be something,
something makes me hard to breathe."

I am probably reluctant to admit my potential burnout. Not because I am afraid of it, but more like, I don’t want to give up and handle it passively. I know to take rest when I need it, but calling myself "burnout" and giving up is an "easy way out" to escape from the responsibilities. I want to find out the "root cause" and try to improve the situation instead of just "workaround" it. As we talked about previously, the shift of "expectations", and the re-evaluation of my "unpreparedness" and "self-expectations" are my solutions to the moments when I was close to burnout for different reasons. By adjusting myself and adopting, I was usually able to recover from the low points in roughly a week and keep moving forward.

The case this time is a bit different, it’s not about me being unmotivated, but rather, there are too many things I wanted to do but I am running out of capacity. I started to think, that maybe it was that I expected myself to keep delivering everything with the same Velocity, I was anxious about not doing enough and not doing fast. Getting quick feedback is awesome and quite productive, but I am probably growing some impatience because I am too used to being quick. Combined, they make me easy to get frustrated when working on something that requires mid-to-long-term effort.

For example, writing. I am not good at writing, and I don’t honestly enjoy it. Documentations, blog posts, tutorials, and talks – all require a lot of time, and also, something I have to do. I easily get distracted and lose focus when I am writing or giving up in the middle. So I asked about it on Twitter and got a lot of great advice from the community (check the comments out and you might find something useful for you too). I started trying to take it easy and doing it slowly, trying to shift my mind to not expecting immediate results and enjoying the process. This blog you are reading took me roughly a week to write (that’s a pretty long time for me), fragmented into multiple sessions. I feel also helps me to rethink and reorganize my thoughts and feelings, and actually, writing them down makes me feel much better about my anxiety.

So, I should probably re-evaluate my capacity and expectations. I have to understand and accept that I can not always keep the same velocity and I don’t have to push myself too hard. Slowing down a bit to take more care about the details, maybe I will find different joy and satisfaction in the process.

Honestly, I am not even sure what I am trying to tell in this blog post - maybe just simply sharing my thoughts and feelings with you. Right now, I still feel quite some pressure. I am still adapting and trying to find a better way of dealing with it. I feel a lot better throughout this week of writing and talking to friends, and I am sure I will get through this. This might just be like many other things in our lives; we don’t always have perfect solutions, but we have to keep going forward and find our way out.

Maintaining good mental health is one of the important tasks for every open source maintainer to keep sustainable. I don’t think there would be "an answer" or "a solution" to the highs and lows throughout the journey. It’s more like a continuous process of learning and adapting to find the ways that work for each of us.

I’d Love to Hear From You

Thank you for reading through my messy and verbose thoughts until the end!

I know my opinions must be heavily biased. If it ever triggers any thoughts or feelings for you, I am curious to hear what you think or what are your ways. You can leave some comments under this tweet or mastodon, or send me an email at hi@antfu.me if you prefer private conversations. Looking forward to hearing from you!

Meanwhile, there are actually many other things about open source I didn’t get to talk about in this post. Artem Zakharchenko wrote a great article [The Dark Side of Open Source, from different perspectives and points that I also resonate a lot with. Highly recommended to give it a read as well.

Thanks

At the end, I want to give a huge thanks to my girlfriend Inès, who has been supporting me and helping me to get through those tough times since the very beginning. Without her great support, I probably wouldn’t be in open source today.

Also, thanks to PATAK-DEV and POSVA for our deep conversations around this topic, they really helped me a lot and provided great support.

And You, as well as the great open source community! I am so grateful for all the help and support I have received from you.

Till next time, take care!

> comment on mastodon / twitter
>
CC BY-NC-SA 4.0 2021-PRESENT © Anthony Fu