I posted my 2022 In Review blog post one week into January 2023: two and a half months ago. 2023 has already been a wild and wacky year for me, which enabled procrastinating on solidifying details on my plans for the year. But I’ve learned it’s important -especially when you’re independent like me and have no job or manager- to set medium- and long-term goals for yourself. This post is 40% a reference for anybody curious about what a full time open source maintainer’s life is like… and 60% a form of self-motivation to actually do the things.
So, finally, here are my goals for 2023. I want to try the OKR format but have only gotten through Objectives - which are laced throughout the blog post. The objectives all take effect in the month of March - as both in 2023 and 2022 I spent January wrapping up the previous year, and February mostly out for personal items.
Each of the following sections is a key area I’m going to invest my time in for 2023, in decreasing order of time spent.
Open Source
Objective: Be a known leader in the TypeScript static analysis ecosystem.
Objective: Foster gradual improvement in the TypeScript static analysis ecosystem.
I’m a full time open source maintainer. This is my full time occupation and the most important part of my professional life. I’m going to continue to spend the majority of my time maintaining the open source libraries I’m responsible for, as well as contributing to other libraries I use in my day-to-day.
typescript-eslint
Objective: Continue maintenance of typescript-eslint as it increases in community engagement.
Objective: Prepare typescript-eslint@v7 with significant performance improvements.
I’m one of the core maintainers of typescript-eslint, the tooling that allows ESLint and Prettier to work on TypeScript code. Much of 2022 felt like project onboarding: getting used to the project, going through old issues, iterating on the public docs website’s contents, fundraising, and -of course- continuously triaging issues and reviewing pull requests. The last few months of maintenance have felt more leadership-y as we’ve worked on the v6 milestone.
Speaking of which, the v6 contains a lot of quality-of-life improvements for the experience of using typescript-eslint. v6 is in beta now; please try it out! 💜
The next big area we’d like to improve is performance. With help from the TypeScript team, we’re investigating using different TypeScript APIs so that we can improve type checking speed and support project references. If v6 focused on quality-of-life, then v7 will focus on performance. ⚡️
Additionally, now that we have more maintainers and maintainer budget than ever before, we can perform much more community outreach and developer advocacy. We recently opened up our Discord to the community and created a Mastodon account. To keep that momentum going this year, I’d like to:
- Try out a system for tracking our repeat contributors and engaging actively with them
- Establish a practice of spotlighting community contributions on social media
Lastly, as the project grows and more people ask to get involved, we’re going to need to formalize some of the managerial aspects. What are our tiers of committers/maintainers? What are the minimum expectations for each tier? How does each tier get paid? All questions I hope we have answered this year.
template-typescript-node-package
Objective: Make the best starter template for single-package TypeScript Node repositories.
Like many developers, I’ve found that setting up a new repository largely entails copy and pasting configuration files from my most recent repository and making as few tweaks as possible. That process has gotten more difficult for me over the years as I’ve added more and more tooling to my repositories. I made this template repository in October 2022 because I wanted to get a good starting template from scratch. Then I quickly realized how useful this could be for everybody else facing the same issue.
The template is starting to gain traction now (people are reporting using it! over 100 GitHub stars ⭐️!). Amazing! It’s now a priority of mine for 2023: I’m going to keep adding all the goodness you could possibly want in a (non-monorepo) general TypeScript package. Then I’m going to use it in all my relevant open source packages.
TypeScript
Objective: Send at least two pull requests to TypeScript every month.
Contributing to TypeScript is awesome. It’s a fascinating project, improving it benefits web developers everywhere, and it benefits your street cred something wonderful. I’m not on the TypeScript team but like to contribute to it for fun. I tell people I contribute to TypeScript, but then will sometimes go a couple months without finding the time to contribute.
This year, I’m going to try to find the time to contribute regularly. Hopefully.
Open Contributions Project
Objective: Create a high quality set of resources to advocate for contributing to open source.
Free and open software must be open source and freely available for a progressing tech industry. However, the model by which that software is created and maintained today is deeply flawed. Maintainers such as myself are expected to work on free software used by companies that do not then appropriately -if at all- compensate us for our work.
I believe part of solving this issue should be getting more companies to sponsor open source. Many companies -especially those without high visibility in developer communities- have no budget for sponsoring their open source dependencies. Oftentimes many or all of the employees in those companies -especially the financial decisionmakers- aren’t familiar with open source or why they should sponsor it.
I’d like to create a set of resources tailored towards convincing various groups of people to contribute to open source. Those groups can include: developers, developers managers, financiers, marketers, and so on. Contributing can be coding, proofreading, outright funding with money, and so on.
My Other, Smaller Packages
Objective: Create a small suite of well-managed open source repositories in my areas of interest.
I don’t exclusively work on my larger visibility projects: I also have a collection of smaller utilities I’ve wanted to create over the years. These utilities serve several purposes:
- They’re legitimately useful projects that I want to exist
- They help me dogfood the core tooling I work on, particularly typescript-eslint and template-typescript-node-package
- They broaden my reach and get my face (and sponsorship link) in front of more people
The plan for these is:
- Audit the list of repositories I want to maintain or archive, then update my GitHub README.md profile to mention them
- Once I feel template-typescript-node-package is ready, adopt it in all these packages
- Add some kind of demo to each of them
- Make sure each has
good first issue
s always available so I can suggest them to developers interested in trying out contributing to open source
In particular, I want to put more work into emojisplosion and konamimojisplosion. They’re adorable projects that I think a lot more people would use and appreciate if I bolstered their demos and docs.
Community Engagement
Objective: Be a top-of-mind community member for TypeScript and general web development, and foster others to do the same.
It’s invaluable both for open source maintainers and book authors to be engaged with the community. We get user feedback and project exposure by being a known name people interact with. Plus, I enjoy it!
This year I’d like to continue my growth as a member of the developer community. I don’t like the term “thought leader”, but whatever equivalent is halfway to that… Let’s go with it.
Conferences
Objective: Be a regular high-quality speaker at conferences for TypeScript and general web development.
2022 was when I became a comfortable conference speaker: I got into a good rhythm of applying to conferences, delivering talks, and networking at them. I feel like I’ve gotten good at it and roughly know what I’m doing.
For 2023, though, I want to be great. I want to really take advantage of the networking at conferences and social media afterwards.
- Speak at at least one in-person conference a month
- Be confident in networking with other developers and introducing myself
- Following up with company contacts about sponsoring my open source efforts and/or purchasing Learning TypeScript
I’m also always working on improving the talks I give at these conferences. My general area of growth for them recently has been in storytelling and presentational skills:
- Being intentional in my pacing and enunciation (minimal quick undercuts or “umm”s)
- Building up towards more advanced concepts by layering together introductory ones
- Seeding each talk with at least a couple slides audience members will want to toot/tweet
Blogging
Reliably create high quality blogs post in my managed blogs.
I have a few blogs under my purview:
- My main personal blog at blog.joshuakgoldberg.com
- Learning TypeScript’s blog at learningtypescript.com/articles
- typescript-eslint’s blog at typescript-eslint.io/blog
I didn’t post very frequently to any of them in 2022. Which is a pity: there’s a lot of stuff I want to post!
For 2023, I’d like to maintain two consistency goals:
- At least one blog post every two weeks
- At least one post in each blog every two months
Personal Branding
Present an approachable, informative, professional persona online.
I haven’t changed the design of my personal site in years. Which is unfortunate because I’ve added a lot of content to the site and now the design is starting to show its age. I’d like to make a snazzy personal site the way a lot of other frontend tech people do.
- Revamp my personal site to be a more rich multi-page application that includes my blog
- Add a section to my site for podcast appearances
In fact, I’d even gone through a partial design exercise with a designer friend of mine over a year ago… But I haven’t taken action on the designs since. Sigh.
This year, I promise!
PhillyJS
Goal: make a great online presence for PhillyJS.
I joined the organizer crew for PhillyJS, Philadelphia’s JavaScript meetup, as the marketing coordinator. That means I’m meant to manage documentation and runbooks, social media presence, and the website. All of which I’m real eager to work on.
My first tasks were to set up the internal Notion and run through a logo design process. I completed the first and got through most of the latter, then ran out of steam and haven’t had time to make the final logo assets for the past month. Which is a shame - I really need to get on this.
My plan for marketing PhillyJS is:
- March 2023: Create final assets for the primary logo, as well as our runner-up proposals*
- April 2023: Run a similar design process for the public website
- May 2023: Set up social media profiles and runbooks for using them
*I’m hoping we can make laptop stickers of all the different logo options…
Education Content
Objective: Be a recognized community resource for open source and TypeScript
Learning TypeScript Videos
Objective: Create free high-quality video content for TypeScript fundamentals.
My Learning TypeScript book was published by O’Reilly last year. The next logical step would have been to create free companion videos on YouTube or other platforms to help spread the concepts and serve as lead-ins for the book. My personal life was too chaotic to commit to such a large project…
…but I have the time now! Hooray!
The current plan is to create free companion videos for each of the major topics discussed in each of the Learning TypeScript book chapters. Those videos will be freely available on YouTube and tied into the Learning TypeScript site.
Twitch Streaming
Objective: Be a regular active streamer for open source and TypeScript development.
I started regularly streaming my open source contributions on my Twitch channel The streams don’t typically get very active chats, but I understand how the tech all works (itself an accomplishment with OBS!) and have a regular cadence
To be honest, though, I’m not much of a Twitch viewer myself. Realtime / video content is hard for me to focus during, so even though there’s a lot of good stuff there, I’ve mostly avoided it. I’m going to make an effort to watch more and learn
Otherwise I’ve got no major changes planned for this year, just getting better at what I’m already doing:
- Consistently stream at least twice a week on my own stream
- Attend other streams to learn from how they are run and socialize with other streamers
I might later come up with key results around viewership or channel activity. TBD.
Personal
Objective: Achieve high sustainability and low stress in my personal and professional lives.
Although the second half of 2022 and first couple months of 2023 were great for me professionally, personally they were off-and-on a little terrible. Two close family members I was helping take care of passed away. At times it felt like I was just treading water, barely keeping up with GitHub notifications or conference emails.
But this year I want to be better: healthier, organized, and not constantly stressed about the amount of things I want to do.
Goal: Health
Objective: Be healthy (instead of overworking myself).
I have a tendency to be self-critical drive myself to the point of burnout. Think frequent late nights (or skipping sleep entirely), eating constant junk food, and burning out spectacularly on projects I’ve convinced myself I “need” to finish. It’s not good for my quality of work and is certainly not good for my long-term health.
I’ve slowly gotten better at forcing myself to engage in correct behaviors (part of being an adult, maybe?). This year I really want to be regimented in making sure I don’t fall back into bad habits:
- Wake up at 7am on weekdays and 8am on weekends at least 6 days a week
- Average 8 hours of work a day & 40 hour weeks
- I can go over for time-sensitive work, but need to compensate in a subsequent time period
- Eat three balanced, healthy meals a day at least 6 days a week
- Work out at least three times a week
- Date night with my spouse at least once a week
Body image is something I’ve always struggled with. I do better with it both when I’m physically in better shape and when I’m less stressed. Maybe this year in 2023 I’ll finally be happy with how I look!
Goal: Personal Accountability
Objective: Have confidence in the amount of work I’ve accomplished.
One of the side effects of my being self-critical is that, absent of proof, I tend to undervalue the magnitude of work I accomplish in any time period. That tendency is particularly dangerous now that I’m my own manager. I set up a tracking Notion database & board for tasks, and plan on setting up a reports database with one-click templates to summarize my weeks and months.
- Keep a permanent record of my todo list and day-to-day tasks
- End each week at inbox zero and with no desk clutter
- Give myself an informed performance review every three months
I hope keeping track of all these things will help me achieve a level of personal satisfaction I haven’t felt in… ever.
Out of Scope
Speaking of personal satisfaction, one of the battles I’m happy to have won with myself this year is deciding on what not to take on. If you know you won’t have time for something, it’s best to admit it early on. Don’t keep a sad glimmer of hope to be continuously crushed until you eventually give up.
Sorted in order of the ones I was most likely to tackle this year, first…
TypeStat
Converts JavaScript to TypeScript and TypeScript to better TypeScript. I have high hopes for this library: in addition to being very cool tech internally, TypeStat solves a super common need in industry and open source alike. It brings me great visibility and is the most visible TypeScript area thing I’ve created on my own (almost 1k stars!).
But, TypeStat is a difficult project to work on. There are so many edge case and potential bugs in code changes, and many different preferences users have demonstrated.
When I do eventually have time to work on it, I’d like to:
- Restructure its core architecture significantly to make it more comprehensible and deduplicate repeated logic
- Create a plugin system to support library-specific mutations
- Rework its onboarding flow & suggested fixers so that users can get started with it immediately upon trying it out
I’ll still act as a maintainer for the project this year, of course. I’ll still triage issues and review & merge pull requests. But beyond onboarding it to my template-typescript-node-package I don’t plan on working on major features or overhauls.
My end goal for the library is to make it reliably good enough that people use it as the first step in converting a project from JavaScript to TypeScript.
Budgie
A unified syntax that compiles into your favorite OOP languages. 🦜 I think it’s a fascinating project that demonstrates some really interesting shared characteristics of programming languages. But I haven’t worked on it since 2019.
Eventually, I’d love to:
- Finish dogfooding the codebase from TypeScript into Budgie itself
- Create standard language tooling: formatting, linting, and syntax highlighting
- Add languages that aren’t fully Budgie-compatible with each other
…but even if I did have time to work on those three non-trivial items (I don’t), I certainly wouldn’t additionally have the time to put them to use in any meaningful way. My dream of writing my own full programming language will remain unfinished another year longer.
EightBittr
My bare-bones, highly modular game engine tailored to 2D 8-bit games. 👾 It’s what powers my cute little ChooseYourFramework.dev site. Last year I polished EightBittr’s docs, added example projects using the engine, and wrote guided walkthroughs leading towards those examples.
But I haven’t finished my other pipe dreams for the project:
- Making the engine performant enough for non-trivial games such as Mario-style platformers and Pokemon-style 2D maps
- Rewriting the old level editor code to make a real level editor
- Rewriting the old SpriteMakr site that generates the engine’s image formats
…but, again, even if I did have the time to work on those three non-trivial items (I don’t), I again certainly wouldn’t additionally have the time to put them to use in any meaningful way. FullScreenPokemon will remain unfinished another year longer.
Philadelphia TypeScript Meetup
I really like TypeScript, and a really like meetups. It would be awesome to have a TypeScript-focused meetup in Philadelphia, now that I live here.
…except, PhillyJS just started back up a few months ago, and I’ve never run a meetup before. It’s going to be a while before I’m ready to take on something like this.
A Perfect CSS Framework
The tools we use to build design systems on the web are in a state of long-term turmoil, and have been for quite some time. The industry is split between CSS and equivalent syntaxes (these days, i.e. Sass), CSS abstractions (Tailwind), raw CSS-in-JS (traditional Emotion / styled-components), and component-style builders (e.g. Chakra, styled-system). They all have benefits and drawbacks. My needs boil down to three areas:
- Components with type-safe props based on configured design tokens (
<Box bg="blue-primary" />
/<Box bg={{ sm: "blue-primary", lg: "blue-secondary" }} />
) - Performance cleanliness: static site generation support, minimal page load cost, and small production build size
- A component library of accessible components using the framework
There are plenty of options out there that do some of those three areas, but I haven’t had the time to investigate them thoroughly.
If I were to completely abandon all my TypeScript/typescript-eslint work but remain in the developer tooling space, this would probably be what I’d work on. Maybe. Who knows.
But I don’t have time for this, and thus will wait for someone else to do it!
Closing Thoughts
I think 2023 is going to be very good for me. Instead of radically changing everything, I’m planning on incrementally improving all my existing activities. We’ll see how it goes!
If you read this far - thank you, and I have no idea why. Let me know!