Beware: This will be very different than my usual content.

Pies

CMake Tools

In CMake Tools issue #665, entitled Is this extension still actively maintained?, I left my first and only comment on GitHub for the past several months addressing my inactivity in the project.

CMake Tools is my most popular project with 700k+ downloads and 275k installs worldwide. Most installations are probably duplicates, but installations are anonymous, so I can’t say for sure how many unique users I have. I do not know if this number also accounts for uninstallations either. I’ll lean on the extra-safe side and assume that 1/4 users uninstall the extension shortly after installation (for a variety of reasons), and that the average user accounts for five installations. 3/4 of 275k is 206k, and one-fifth of that is 40,000. I’ll chop that in half (just to be safe) and say that I have twenty-thousand users by this conservative estimate. How many of them actively use the extension on a daily basis? No clue. No idea how to even make that estimate. Even if we go with 1/4 of people being active daily users, that’s 5,000 people depending on my code every day.

That feels like a lot of people depending on me.

Online discussions about what editor to use for C++ will inevitably mention VSCode, and skeptics thereof will be referred to my extension (amongst others) for enhancing the development experience therein, sometimes directly pinging my username. I feel honored that my work is recommended to others with such praise.

I’ve given a few people direct commit access to the repository in hope of offloading some of my backlog work, although I alone retain rights to publish the extension to the marketplace. While I’ve been away the collaborators have been merging and working on pull requests and handling GitHub issues, despite the last official extension update being in November of 2018. Without my publication token, the code will remain in the GitHub repository and never in the extension marketplace where users can easily obtain it.

How to CMake Good

In August of 2018, I announced How to CMake Good, a video tutorial series to be uploaded on YouTube teaching what it says on the tin. My most recent upload was four months ago, in December of 2018.

Reception to the series was great, getting a lot of attention in the corresponding Reddit thread (Edit: WOW! My first gold!). Every upload now has over 1,000 views, with the highest being 6,000 (far more than I ever expected!). To this day I still find people across the web pointing beginners to my uploads even though the series is dreadfully incomplete.

Pitchfork

Pitchfork was the name I gave to my attempt at establishing a uniform project layout convention to cover as many use cases as possible. It started as a Reddit thread with the initial proposal (which defied my expectations and was very well-received). This was followed up shortly by another thread and a corresponding GitHub repository. It is now my second-most starred repository, despite having nearly no usable code contained within (The largest part is the specification document).

The second Reddit thread linked an informal survey to help resolve some of the more contentious aspects of project layout. The survey results received their own post, along with some more clarifying details.

Since then, the layout document has remained mostly unchanged, despite several aspects still going unanswered (i.e. the spec mostly deals with library projects, and leaves open questions about the layout of application projects). I intended to follow up with more clarifications on applications, but that post hasn’t yet been written.

Nevertheless, this informal standard was extremely popular, with some projects going so far as to marking themselves with a badge of PFL conformance (not something I expected or organized). Many new projects are adopting the layout, and non-conforming projects are sometimes being told to adopt it as part of informal community code reviews.

The specification document still has a few holes, and I still receive questions within GitHub Issues, Reddit, and on the C++ Slack, all over things that could be clarified in the document, but I don’t get around to adding.

Others: vscode-gitflow, PMM, libman, and C++ Modules

Less well known, but I also own the most popular Gitflow extension for VSCode with just under 30k installations. It has thirteen open GitHub issues, and it’s last commit was in June of 2018.

PMM was a very strange project I started to enable easier C++ package management integration into CMake projects. It was born from me attempting to write basic Conan bootstrapping functionality in the Pitchfork repository, but I decided it was useful enough to break out into a separate repository. After attempting to make use of it at $job, I found many issues and hiccups that need to be addressed, but I have not yet pushed the relevant fixes and tweaks to the repository.

libman is a project I have been working on quietly to define a basis for the distribution of native libraries. It defines a common file-based package-manager-agnostic and build-system-agnostic interface between package managers and build systems for the distribution and inclusion of libraries to and from other native projects. While I haven’t made a big public announcement about it, I have been discussing with build system and package manager maintainers to find how one can best define the basis for the system. I even have a simple (and incomplete) reference build-system implementation for CMake and a reference package-manager implementation for Conan. Initial results were very promising, but I haven’t worked on it since the end of March 2019.

Most recently, I kicked up a lot of dust about the state of C++ Modules. I hate being the cause of drama, and I hate being confrontational, but I was glad to see something positive come of it. Not wanting to seem like a unconstructive complainer, and wanting to help clear up a lot of misconceptions about C++ Modules, I started my Understanding C++ Modules series, with the first post in March 10 and the second on March 31 2019. It’s now May, and I still have the half-finished draft of the third entry sitting incomplete in my local copy of this blog. And the third wasn’t going to be the last either! The third was finishing up on terminology, the fourth would clarify rules of ADL and name lookup, and the fifth would discuss some general myths and misconceptions.

How Many Fingers?

Do I have a lot on my plate? The answer is relative. There are others with more open work, and there are others with less. Everyone has an upper bound on just how many pies they can stick their fingers in before they just can’t anymore. Truth be told, I don’t think I’ve hit my limit either, but something else is keeping me back.

Patreon

In October of 2018, I received a request for a way to donate to me. This was incredible to me. Hugely successful OSS projects asked for donations, and here was someone that actually asked me to accept a donation. Was this really worthy of people’s money?

I started a Patreon account shortly after. I had weighed a few different options and selected that platform for its familiarity, popularity, simplicity, reputation, and network effect. I would have preferred to accept one-time donations, but people can (and did) make do with simply subscribing for a single billing cycle.

For a few months, I continued normally and updated projects and pages to refer back to my Patreon profile as a way to support me. This worked fairly well, and I saw several people roll in to offer support. I never believed I’d actually have complete strangers wanting to send me their hard-earned money for something I initially threw together while hunkered down over a laptop in my hotel room in the evenings during CppCon 2016 all because I wanted a hotkey for VSCode that ran cmake --build.

What Happened?

Here is my GitHub activity matrix for the past year:

Contributions

My activity virtually vanished in January of 2019. Granted, I wasn’t hugely active for 2018, but I was at least regularly participating in my projects. Almost all activity in 2019 has only been to post updates to this blog’s repository.

Feeling Pressure and Taking a Break

During late 2018, I began to feel overwhelmed by the CMake Tools issue tracker and discussions surrounding Pitchfork. Nothing was significantly different from the prior year, but something about it was pressing on me in a wrong way.

I needed a break.

During the work holiday weeks I resolved to not work on any community projects until the new year.

And I took that break. I worked on a few private projects “for fun,” but I did nearly zero open-source community work. I felt like this was an appropriate time as most people are also on break, so most backlog items could wait until the new year anyway.

Coming Back (and Failing)

Just as I promised myself, when the new year came along, I jumped back into my backlog an began work again.

I was still drained. My weeks away weren’t enough. I told myself I need more time away. So I tried again. I would step back in when I felt like continuing.

After a few more days, I came back, and then stepped away, and came back, and stepped away, and came back. Again and again and again. Each time I sat down to continue OSS work, I’d write code for a short while before an impending feeling of pointlessness came over me, and I’d close the editor and take another break. Sometimes I could write code for a few hours before this happened, and other times I’d barely open a single file before immediately closing it and walking away.

Soon this wasn’t just my community work either. I stopped working on private “for fun” things too. What would I do instead? Play video games? A bit, but eventually interest there died out too. Read books? I got a few chapters into Words of Radiance, but I put it down months ago and haven’t gone back. Watch TV? I’ll occasionally watch an episode of Jeopardy! from a streaming service but I don’t watch anything that requires time commitment. I don’t go to the movies much anymore either, something I used to try to do weekly.

My motivation to do anything at all was burning away.

Guilt

I felt no guilt for taking the holiday break. After all, almost everyone does it, and it is reasonable to expect at least a few weeks of the year to yourself (probably more).

Each time I tried and failed to return, I told myself next time, I’ll be back for real. I just needed more time, again and again and again.

Of course, I couldn’t let my Patreon continue to bill people while I let my projects sit silently. I started to pause my Patreon every month to prevent the next billing cycle. I told myself I’d only need to do it once, and I sent out a message to my patrons informing them of my temporary hiatus. That was months ago. I’m still going in every month to pause billing. I’ve had Patrons join and leave across billing cycles without ever being charged. I can’t blame them either.

For a while, I managed my GitHub notifications using Octobox, but I found that I was missing important notifications, so I went back to using email. I still get around a dozen every day. I see them when I pull down my notification shade, and I swipe them away while muttering “later.” Each time I swipe them away, they feel heavier and heavier. Each one was delivered on behalf of a very real person seeking some assistance on one of my projects, and I was just dismissing them (often without reading them) because I wasn’t feeling up to it. Even more: Their troubles are my fault, because I didn’t write the code correctly, or I didn’t write enough documentation, or the APIs have changed and I wasn’t there to update my code.

Aside: I want to seriously thank all who continued to address issues and questions on my behalf, even though you are unable to post actual code fixes. Thank you for doing your best while I couldn’t.

In sending this post for review, I was told that my sense of personally obligation to every bug and question was unreasonable and unhealthy. This is absolutely true, but the feeling is still there, and that same feeling is the reason that I am writing this post.

In addition to guilt was a feeling of weakness. My load is so small compared to others’, yet I’m struggling as if it were hard. What right do I have to withdraw under this small weight? I need to just keep pushing, and maybe I’ll break through…

I haven’t, and I won’t. I need to set the weight down.

The Past Month

All of this isn’t to say I have been completely detached from the community. Following the C++ Modules upset, I tried my best to be an SG15 participant. I worked on my Understanding C++ Modules series while my GitHub projects sat.

I realize now that the reason I was writing the posts wasn’t just to be constructive in the modules discourse: I felt a moral obligation to continue to be somehow active in the community while my other projects sat idle. Even though I was “taking a break” from code I was still pushing myself in other ways.

My motivation burnt out nearly completely shortly after I published the first part of Understanding C++ Modules, and I wanted nothing more than to just step back completely and totally. However: I couldn’t stop yet: I had just left a cliff-hanger ending! I told myself that I’d finish the series, then step away. I used some remaining motivation to write part 2, then publishing it much later than I wanted.

I began on part 3 a week (!) later and got about halfway before hitting a hiccup in my understanding of header units. I went to the Slack and began asking around. I had been aware that the implementation-defined nature of header units was contentious, and what I got (and expected) in response were conflicting understandings on the matter. I couldn’t include any of them as I wanted to present impartiality in the post. I was about to pursue the subject further, but in that moment the last of my motivation died. I was done. There was nothing left. I closed the editor, went to bed, and haven’t opened it since.

I’ve intended to write this post for a while, but only after finishing the Modules series, and now I was in a deadlock: I couldn’t write this post and step away until I finished Understanding Modules, and I didn’t have the motivation to finish Understanding Modules. Part 3 hasn’t been touched since April 22, and in the interim I’ve done nothing.

I’ve been staying at work later and later, but not out of any employment obligation or time-crunch. $job requests reasonable hours, and has never asked me to work any more than a reasonable forty, but I’m now finding myself often staying long after everyone else has left, the sun has set, and the building switched into night-mode. Why? Because it’s all I have. I can’t bring myself to do anything anymore. Why go home and waste time being bored when I can at least be productive at the office?

A Word on Patreon

The introduction of the Internet has seen crowdfunding blossom into an incredible way for both individuals and organizations to connect with each other and fund ventures that would otherwise be impossible or impractical. It has seen a bit of quackery, but as the systems mature and people discover this new space, we’ve seen the rise of creators subsisting entirely on money from their direct supporters delivered through these platforms.

Artists, creators, and developers now have the avenues to pursue their craft while earning a living and forming a direct connection with their audience/ userbase.

However: For some people and products I’m not sure that it’s the best fit. For me and my current work, I don’t think it fits. I thought it would be a good way to see some return for my work, but it instead makes me feel guilt when I fail to deliver, since people are now paying me money with the expectation that I will continue. I don’t want to feel like I must do the work, and I don’t want to feel like I’m working on the wrong things. If I’m working on Project A, and a supporter donated for my work on Project B, is it fair that I accept their money?

I think this is partially the recurring nature of Patreon. I wouldn’t feel so obligated if people only donated as they felt like it, and I wouldn’t worry so much about why they donated.

With that said, I’m going to close my Patreon creator profile indefinitely. Maybe in the future I will return to the platform, but it is not a good fit for me at the present.

Delegating on CMake Tools

I can’t just vanish, of course. Those 5,000 users? They’re not going to disappear either. I should have found a new maintainer for my projects quite a while ago. Finding a maintainer and giving them publication rights will be difficult, both practically and emotionally. I will need to find and verify someone I can trust with 275,000 user machines (you may recall a recent project handoff leading to the publication of malware to NPM).

CMake Tools is my most popular project, and is among the most installed extensions for VS Code. It is very important to me that this project continues to support people.

Unfortunately, it has fallen behind. There are many new VSCode and CMake features and changes that can be incorporated into the extension, and many changes and upgrades that I personally would like to see and intended to eventually implement. These changes would be quite the undertaking, but I’m not up to the task at the moment.

Instead, I intend to find a new maintainer, and maybe I’ll continue to contribute when I find the motivation.

This GitHub issue has been created to help me find a new maintainer.

A Lie to Others

In the GitHub comment linked above, I say this:

Why has [this sat for so long]? I’m not sure. After I changed positions at my job, I’ve been doing much less development work than I had before, and using CMake within VSCode has become rare for me simply by virtue of rarely doing C++ development. There is also a lot of time pressure as I’m active on several other projects at the moment. Add on some real-life time issues, and I’m fairly preoccupied.

All of the above is true, except for two lies:

  1. I’m not sure [why this project has been idle].
  2. There is a lot of time pressure […] and I’m fairly preoccupied.

For (1), I’ve outlined why the project has been idle in this post.

For (2), while it is true that I’ve been working on other projects and deal with things IRL, it is not true that I am too preoccupied or haven’t enough time. Why did I say that, then? Because it is easier to say “I’m too busy” than it is to say “My motivation to do anything at all has been dwindling to zero, and I don’t want to be involved in this community at the moment.” It’s easier to hear, too.

I also want to maintain a reputation of reliability. I’ve chosen to have a unified persona across the Internet, so my behavior in one area is clearly linked to myself elsewhere. Many people feel an online disinhibition effect, as their “online” self seems less actual than their physical self in the real world.

I don’t feel this way. I want my online self to reflect my real self as much as possible. I pride myself in being reliable, and I want my online presence to mimic that aspect.

But more importantly, I want to be honest. Thus, this post.

Lies to Yourself

I recently went on a vacation with family to one of our favorite places. I thought it would be good respite from a fairly hectic prior work week.

However: Something was very wrong.

Even if I smiled in the photos and joked with others, I wasn’t having a good time. Spending time with family, no obligations, good food, good weather, and relaxing? It didn’t matter. I felt the same emptiness that I felt sitting at home doing nothing.

The most insidious thing about mental health is that the mind itself is the tool with which we see the world.

Large machines often contain an annunciator panel, such as this one from a Cessna:

Sensors in the aircraft connect to the panel to illuminate these buttons (and sometimes make a sound), alerting the operator to the state of the system. The orange and red lights signal that something is awry, and needs to be tended to. If the L. FUEL LEVEL LOW lamp illuminates, we should check if we need to fuel up. You’ll note a lack of a “meta-warning” to indicate that the panel itself is in a bad state: There is no WARNINGS ARE FALSE warning. To know that this panel is malfunctioning requires information that the panel itself cannot provide. As the simplest example: If we lock the doors and cannot open them without undoing the lock, yet the corresponding light remains illuminated, we can assume that the sensor, wiring, panel, and/or lamp is malfunctioning. If the door is entirely ajar and the light is dark, there is also a problem.

Our mind also has annunciator lights. If we feel pain, we should check our body for damage. If we feel hunger, we should eat. If we feel tired, we should sleep.

But those feelings are low-level. They are easy to understand and correspond with things visceral and tangible, but not all feelings are like this. Some feelings have no direct physical connections to the world around us, yet we will often use them as measures for the state of the world.

When the life is pleasant, we feel happy. When there is a good probable outcome to a scenario, we feel hopeful. When exerting effort to a task is worth the reward, we feel motivated.

These emotions have inverses as well: If we feel unmotivated, it is because the effort is not worth the reward. If we feel hopeless, it is because there is no good possible outcome. If we feel sad, it is because life is unpleasant.

Like a faulty DOOR NOT LOCKED indicator, these emotional warning lights can misbehave. However: Unlike a DOOR NOT LOCKED indicator, we cannot so easily verify if our own sadness or hopelessness are indicating properly. There is no out-of-band information about these signals, as these signals are generated by the same system which receives and interprets them. The light is all we have, and we implicitly trust it.

Diagnosing faulty emotions is difficult, as we implicitly treat them as indicators of facts about the world around us as concrete as our vision and hearing.

This is why mental illness is insidious. We have no way to observe the world other than our own mind, so how could we know if something is wrong with our mind itself? How do you establish trust against the system that itself discerns trust?

Telling a depressed person that “there is nothing to be sad about” is fruitless and unhelpful, because their mind says “yes there is,” even if it doesn’t say what there is to be sad about. Saying “life will get better” doesn’t help, because their mind says “no it will not,” even if they got a raise last week.

There is no “your emotions are lying to you” emotion.

Who would you trust: Someone else, or yourself?

Your own brain is the most convincing liar.

Why Did I Write This?

There’s a stigma about mental health, and despite most saying they want to get rid of that stigma, very few will actually open up about it. We understandably find it very disquieting that the system we use to observe and measure the world can lie to us.

It’s taken me too long, but I can now recognize a faulty indicator in my own mind. This isn’t a misfire, though: There is an indicator that isn’t firing when it should:

  • You have accomplished something worthwhile
  • You would enjoy this
  • This is a good thing
  • You have done a good job
  • You have used your time wisely
  • Being around people is pleasant

And yet, despite having an out-of-band understanding that something is wrong, the feelings are still very real.

A lot of people get burnt out. Not everyone enjoys getting home from the office where they write software all day and then continuing to write software well into the night “for fun,” and that is perfectly okay.

For years I have been the person that enjoys software “for fun,” but that seems to be drying up. I assumed I was just losing my interest in the subject as a hobby since I no longer found it fulfilling, which is something completely normal.

What isn’t normal is when that feeling of un-fulfillment continues to expand to swallow most of your life. When that un-fulfillment grows to extinguish the enjoyment and anticipation of a family vacation to a favorite destination, something is critically wrong.

Just because I know that fixing bugs and addressing issues is worthwhile doesn’t mean that I feel it. For better or worse, absent that feeling, I can’t bring myself to do the work.

I need to take a real break. Participating in the community hasn’t been fun for a very long time. Now it brings me stress and guilt. I’ll still be around, but in a limited capacity.

I could very well just close up and hand off publication rights for my code without saying anything, but I feel like I at least owe some explanation, and I want others to be able to recognize these things in themselves.

To fight the stigmas we need to be more open about discussing it, and we need to stop spreading false and vapid platitudes.