Josh Goldberg
Me raising hands happily while giving a talk on stage, with code projected behind me

2023 In Review

Jan 31, 202430 minute read

Looking back at my second year as a full-time independent open source maintainer.

2023 was a wild ride. If 2022 was around trying new things, 2023 was around consolidating on where I can have a positive impact. It was my second year as a full-time independent open source maintainer, as well as what may end up being my most conference-packed year of my life.

I like looking back at large time periods and the major events that happened during them. It’s useful to reflect back on what the most important happenings were, and to learn from any missed opportunities or mistakes. Let’s do that now for my 2023.

Biggest Accomplishments

Out of all that happened in 2022, here’s a list of my favorite highlights.

Conference Speaking

I’d thought 2022 was my big year of conferences, with a half dozen in-person ones. Then in 2023 I really went hard, averaging a conference every 2-3 weeks for most of the year. My 2023 Conferences in Review goes into them more.

I’m really proud of my conference-going in 2023. I’m not a perfect conference-goer or conference-speaker, nor am I as practiced at them as many full time developer relations folks. But I made great connections with people and became much more practiced as a presenter.

Networking and sharing information is also a boon for my role as an open source project maintainer. Conferences allow me to learn how people use the projects I work on. Which allows me to accordingly improve those projects, then give talks explaining those learnings.

See my How I Apply to Conferences post for more information on talking at conferences.

Living Wage in Open Source

Yup. Back in 2022 my big financial accomplishment was New York City minimum wage. For 2023, my equivalent accomplishment was New York City living wage for an adult. That’s $25/hour, or about $4,000 a month / $48,000 a year (not including an additional ~$10-15k for health insurance).

My total income is about $5,300 a month / $63,600 a year. That income is a combination of direct open source wages and side projects.

Monthly Income - All Sources

typescript-eslint: $2300
Learning TypeScript royalties: $1300
Consulting: $590
GitHub Sponsors: $450
ESLint: $300
Podcasts: $250
Tidelift: $110
Twitch: $17

For context, I was earning more than three times that amount in base salary alone in industry. Which is how I was able to build up savings to go full time open source in the first place.

All this should be taken with the same caveat from 2022 that my spouse is a Director of Agile Delivery with a real salary. I’m not poor and am not complaining about my financial situation. But! You should absolutely still sponsor open source maintainers such as myself. It lets us spend more time on the real open source projects or sponsoring newer maintainers, rather than asking for money.

Direct Open Source Income

My open source salary came to about $3,160 a month / $38,000 a year:

That’s an ~85% increase over the $1,700 a month / $20,400 a year open source income of 2022.

Monthly Income - Open Source

typescript-eslint: $2300
GitHub Sponsors: $450
ESLint: $300
Tidelift: $110

Side Project Income

Separately from open source, I earned about $2,150 a month / $25,700 from side projects:

That is a ~25% increase over the $1,725 a month / $20,700 a year side income of 2022.

Monthly Income - Side Projects

Learning TypeScript royalties: $1300
Consulting: $590
Podcasts: $250
Twitch: $17

Open Source Projects

Enough about money. Let’s look at the actual point of my career: pushing open source coding forward, and getting to work with awesome people on the internet.

typescript-eslint

As with 2022, the biggest push I participated in was developer advocacy and software development for typescript-eslint.io. typescript-eslint is a crucial piece of the TypeScript ecosystem: it’s what allows tools such as ESlint and Prettier to work with TypeScript. Yet many TypeScript developers aren’t familiar with typescript-eslint enough to use its recommended preset configurations.

My primary goals around typescript-eslint in 2022 were:

2023 was a great year for typescript-eslint. I think v6 was a solid major version and I’m proud of what we released with it:

Total monthly income for the project grew ~65% from an average of ~$2,800 / month for December 2022 to ~$4,600 a month for December 2023. Plus I finally documented our maintenance practices and got the community Discord rolling.

Here’s a query for all merged typescript-eslint PRs that I created in 2023.

create-typescript-app

I’d started a project called template-typescript-node-package back in 2022. At first I was targeting it as a nice basis for my personal open source projects. That’s how I used it through the first half of 2023.

Through the second half of 2023, I renamed it to create-typescript-app and generalized it so anybody can use it for TypeScript packages. npx create-typescript-app can now be used to create a new repo or migrate an existing one to the template’s tooling. I finished rolling it out to most of my other projects at the end of November.

Working consistently on create-typescript-app was an excellent choice for 2023. It gave me opportunities to learn about, contribute to, and sometimes even create pieces of tooling that work together for as ideal a TypeScript repository as I can get to. And now all my repositories adhere to my personal standards for how I think they should behave.

See Contributing to a create-typescript-app Repository for a unified blog post walking through the tooling in those repositories.

JoshuaKGoldberg (Dot Com)

I finally got around to consolidating my online blog and personal website into one website. There are two relevant repositories:

I also finally made one of those cute little npx-runnable CLIs for my name.

DefinitelyTyped: From TSLint To dprint

I’d helped maintain and then deprecate TSLint back in the 2019 era. But the gigantic DefinitelyTyped/DefinitelyTyped repository was still stuck on TSLint through 2023. That repository has a large set of custom tooling -much of which is defined in Microsoft/DefinitelyTyped-tools- that needed to port from TSLint to ESLint.

Finishing the migration ended up requiring three main areas of work:

We finished the move in December with feat: remove TSLint. That felt really, really good. Plus it’s always nice to get a chance to work with TypeScript folks (shoutout Jake and Nathan!).

The npm tslint package weekly downloads dropped below 2 million a week after we finished our work. That’s down from 3.5 at peak in 2021 and 2.5 million at the start of 2023. Progress.

Mocha

Mocha is the JavaScript test framework I learned how to unit test with. It fell out of maintenance for much of the last few years. I’m now one of three new Mocha maintainers as of November. Which is super exciting for me and a great opportunity to help out the ecosystem. I’m pumped!

Other Open Source Projects

A big part of my create-typescript-app template work involved finding the right projects for different developer tooling needs. Sometimes those projects didn’t yet exist, or did exist and were no longer maintained. Choice project highlights include:

I’m also particularly excited about a few projects unrelated to create-typescript-app:

The full list of projects I work on -including ones I created and ones I joined- is on joshuakgoldberg.com/projects, under All.

Year-Long Goals

I’d mentioned yearly goals in My Plans for 2023 last year. Some of those goals had concrete objectives. Did I satisfy those objectives?

StatusCountPercentage
Total34-
✅ Hit1750%
⏳ Partial1029%
❌ Miss721%

…some of them!

Half of my goals I fully succeeded in. I got at least some of the way towards 79% of my goals. That’s a … pretty good year, I suppose? Room for improvement, but not a failure? C+?

As they say: “Ds get degrees, but Cs better please.”

The following sections go through each of the high-level goals.

Goals: typescript-eslint

ObjectiveStatus
Stable 6.0.0✅ Released
Establish performance improvements for v7✅ Established
Systemize engaging with contributors⏳ We did this ad hoc, but didn’t set up systems.
Spotlighting contributors on social media❌ I didn’t start on this.

I hit the technical goals nicely. The project’s v6 release went well and we’ve got a host of great improvements lined up for v7.

For maintenance processes, I did merge our v1 maintenance docs and we did start reaching out to folks and being more active on the Discord. But that took until December and I haven’t yet had time to set up tasks (let alone automations) for checking on repeat contributors, sending them money, or shouting them out on social media. That’ll be on my 2024 goals for sure.

Goals: template-typescript-node-package & Other, Smaller Packages

ObjectiveStatus
Make the best starter template of its kind✅ In my opinion
Create a suite of assorted open source projects✅ Created
Use it in all my applicable repositories✅ It’s rolled out

Smash success on this one, I think. I’ve yet to see an equivalent TypeScript starter template pack in as much tooling awesomeness or provide as much configurability. I renamed the package to create-typescript-app and rolled it out all my active, applicable repositories. Yay!

Goal: TypeScript

ObjectiveStatus
Send two PRs to TypeScript a month❌ Not even close: ~10

Here’s a query for all PRs that I sent to TypeScript in 2023. That’s less than one a month, including a reference PR not meant for merging.

I think there were three main reasons why I didn’t contribute to TypeScript much this year:

I see this one as less of a goal failure and more of a goal change.

Goal: Open Contributions Project

ObjectiveStatus
Create a set of contribution resources❌ Canceled

I still believe that getting more companies to contribute money and time to open source software is a critical issue for the tech industry. I’d wanted to start an “Open Contributions Project” initiative to make resources for people trying to get their company to sponsor open source. The plan was to eventually expand into tracking which companies are or aren’t doing their fair share.

But, none of us working on it had the time to really give it the attention it deserved. So we tabled it.

In retrospect, I should have known I wouldn’t have time for this. I have a lot of open source goals that clearly come first. Ah well.

Goals: Community Engagement & Conferences

ObjectiveStatus
Be a known part of the TypeScript community✅ I suppose so?
Be a regular speaker at conferences✅ Multiple a month
Be a regularly high quality speaker⏳ Sometimes
Follow up conferences with networking⏳ Sometimes

These goals were a little more intangible than some of the other ones. But I think I understand where I stand well.

I’m definitely a known part of the TypeScript community. I’m not as much of a go-to as Matt Pocock / Total TypeScript, but I still see my reputation sometimes precede me. And thanks to the conferences and open source work, I know people in a lot of neighboring projects. It’s cool to see a personal network grow.

My execution of conference talks and the subsequent networking could use some work. The talks themselves I covered in my 2023 Conferences In Review post. For deepening connections at conferences, it’s happened sometimes. Going to fewer of them in 2024 will certainly help me be better at consistently doing this.

Goal: Branding and Blogging

ObjectiveStatus
Consolidated personal site, blog, and visual brand✅ Complete
One blog post every two weeks⏳ Almost: 22 total posts
One personal blog post every two months✅ Yes: 14 posts
One Learning TypeScript blog post every two months❌ Not even close: 3 posts
One typescript-eslint blog post every two months⏳ Almost: 5 posts

Mixed bag here. I’m happy that I became a regular personal blogger. I think my personal blog posts have been getting better over time, too.

Not populating the Learning TypeScript articles is a big miss, though. It’s a space I think people find useful in general. And it helps sell copies of my book — which is necessary to push for hard as an author.

Goal: PhillyJS

ObjectiveStatus
Finish a logo✅ Done
Design and implement a website✅ Done and done
Set up social media playbooks❌ I opted out

I’m mostly pleased here. phillyjs.com and the associated meetup are alive and well. The brutalist design of the site brings me great amusement.

I’m not a lead organizer — just one of several who’ve joined. So I don’t mind realizing that setting up guidebooks for posting frequently online wasn’t something I’d enjoy.

Goal: Learning TypeScript Videos

ObjectiveStatus
Set up companion videos❌ I opted out

I never really had time for this. In retrospect I should have known I wouldn’t want to set up an entire production run for companion videos.

I’ll probably get to this if there’s a second edition of the book. That wouldn’t likely happen for at least a couple years.

Goal: Twitch Streaming

ObjectiveStatus
Consistently stream twice a week⏳ 44 streams in March through December
Set up my streams’ tech to run reliably✅ Done
Semi-regularly watch other streamers✅ Done

I got somewhat consistent at Twitch streaming this year! It fell apart in months when I was traveling a lot. But when I was home, I kept at it.

My streams are at the point where I consistently have around a dozen people join, with a small handful active in the chat. Which is perfect. I like being able to put most of my energy into coding and conversations with a few friendly names. I’ve seen the multi-hundred-person streams of big influencers and have no interest in getting that noise.

Goals: Personal Health

ObjectiveStatus
Wake up at a reasonable hour most days⏳ Some weeks, mostly when not traveling
Average 8 hours of work a day & 40 hour weeks⏳ Some weeks, mostly when not traveling
Eat balanced meals most days✅ Mostly done
Work out at least three times a week✅ Mostly. I set up a home gym and everything!
Date night with my spouse at least once a week✅ If anything, we have too many nights out
Reduced stress levels over work⏳ Some weeks, mostly when not traveling

There’s a common theme with personal health… When I’m traveling, it’s much harder to keep up with it. When I’m at home consistently, I’m fairly ok.

Personal health is so very important. When I don’t eat healthy, exercise, get good sleep, and manage my stress levels, I don’t work as effectively. My insomnia in particular worsens when my health management gets sloppy. I don’t have the physique I want either, but it’s not much worse than at the beginning of the year.

By the way, protip: I got Lasik in January 2023 and it was excellent. Minimal recovery time and the procedure had no pain. I now don’t need prescription glasses. It’s incredibly freeing — especially given my right eye is too droopy to reliably put in contacts.

So, I’m happy to have made progress here. Even if that progress isn’t quite as much as I wanted. Every year is a journey in learning better how to manage the next year.

Goals: Personal Accountability

ObjectiveStatus
Keep track of my todo list and day-to-day tasks✅ One giant Notion database
End each week at inbox zero and with no desk clutter⏳ Some weeks, mostly when not traveling
Give myself an informed performance review every three months❌ Not even once

Good news: I have tracking pretty much everything I worked on this past year! Very proud of that. Keeping a Kanban board in Notion has done wonders for my personal organization.

Less good news: I have done almost nothing with that information after the fact. I haven’t given myself any performance reviews and wouldn’t know where to start. Maybe next year - if I can clear up my schedule a bit more than in the past.

Closing Thoughts

2023 was a fun year. I made a better wage for myself, pushed forward some fun projects, and hit a good chunk a lot of my top-level goals. More importantly, I think I got the hang of this independent / open source life. I’ve learned a bunch about self-organization and politicking online.

Thanks again to all the awesome people who helped make my 2023 wonderful. I appreciate you all! 💖


Liked this post? Thanks! Let the world know: