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!