The obligatory look back at what's happened
I've never actually written a "Year in Review" post before. I suppose you could sorta count the "self-evaluation" section of my annual performance review at work, but that's not public, and it only counts the stuff I've done at $DAY_JOB.
Been seeing a flood of these posts over the last week or so with the turn of the decade. The last couple years have been pretty eventful, so I figured I'd give it a shot.
As an information organizer, I had trouble deciding whether to organize this chronologically or topically. So, I'll try to do a bit of both - I'll briefly (hah!) recap what happened when, and then focus on specific aspects.
Also, a lot of what I did in 2019 came as a response to things that happened in 2018, so I'll try to cover both years for context.
Finally, while I don't feel like writing a "decade in review" post, I already covered some stuff that happened earlier in my posts How I Got Here: My Journey Into the World of Redux and Open Source and Learning and Using TypeScript as an App Dev and a Library Maintainer, as well as The History and Implementation of React-Redux and Redux Toolkit 1.0
Table of Contents
- Looking Back, Looking Ahead
- Final Thoughts
At the start of 2018, I had a lot going on:
- I was doing general Redux maintainer stuff
- $DAY_JOB was in the middle of a full development cycle, and I was directing our team in developing a couple major features that I'd designed and architected myself
- I was attempting to keep up with all the fresh React articles and news, and maintain my React/Redux links list and my Redux addons catalog
This was exhausting enough, but I also added some additional major items to my plate:
- I agreed to write and teach a Redux workshop for Ryan Florence's Workshop.me startup.
- I also agreed to do an "intro to Redux" talk at Reactathon
- Finally, inspired by folks like Kent C Dodds, I decided to try starting up my own email newsletter.
At the time, these all seemed like great ideas. In hindsight, I was setting myself up for burnout.
I was already out of town for business in much of February. I was able to put together the Reactathon talk without much trouble, but then only had a few weeks to prep and put together the Redux workshop. I still think I did a pretty good job with the workshop content, but the prep effort drained me.
Immediately after teaching the workshop, I turned around and went out on another business trip. I was able to teach the workshop content again internally at $DAY_JOB, which was cool, but by the time I got home I was exhausted.
I'd already been planning to spend some time goofing off after I got back from that trip, and did. But, when I started trying to convince myself to do something "productive" again, I found I just didn't have any desire to.
I've never had any struggles with mental health, depression, or burnout, which I'm thankful for. But, for the first time, I realized I was on the edge of burning out, due to self-imposed responsibilities. If I was going to be able to keep going, I was going to have to drop things. Besides, I wanted to do "real Redux maintainer" work, but I just didn't have the time to.
I finally concluded that maintaining my links lists was the biggest problem. They were a huge time sink, requiring multiple hours of work every weekend to filter posts I'd bookmarked and add them to the proper categories with appropriate descriptions. While I read a ton of posts naturally anyway, the flood of content was never-ending, and any time I skipped a week of working on it, the backlogged queue of bookmarks just kept growing. I'd felt that I had to keep updating the lists given their popularity and usefulness, but the treadmill here was never going to end, so that had to go.
The newsletter also died an unceremonious death. I'd been posting a mixture of Redux tidbits, Twitter discussion summaries, and lib descriptions. Feedback was positive, but it was yet another thing that just wasn't necessary and only added to my mental workload.
Fortunately, I had some vacation time already planned for that summer, and was able to use that time to relax and reset mentally. After dropping the links list and newsletter, I focused my attention on actual Redux maintainership work.
We'd been discussing how to update React-Redux to make use of the new Context API and better support future "Async/Concurrent Mode" capabilities. I pushed that effort along, collaborating with Greg Beaver on rewriting React-Redux with a new internal architecture that I thought would match the directions the React team was encouraging us to use.
At the same time, I had several discussions about Redux Starter Kit during and after React Rally, and we solidified the name and some of the desired APIs.
In the fall, I opened a discussion about using a different docs site publishing solution, and that led to switching the Redux core docs from Gitbook to Docusaurus+Netlify, and adding published docs sites for React-Redux and Redux Starter Kit.
I went to ReactBoston 2018 just planning to attend, but ended up giving an impromptu talk on "The State of Redux" after another speaker was unable to attend.
The React team announced Hooks at ReactConf in October, and we immediately began getting requests for a React-Redux hooks API.
We finished the year by publishing React-Redux v6 in early December. While we knew that it wasn't quite as performant as v5, we assumed (and hoped) that the differences wouldn't be meaningful in practice.
As 2018 wrapped up, I figured that the foundation of React-Redux was done for the foreseeable future. I assumed I'd be able to focus my time and attention on other things as 2019 started, like the docs rewrite, Redux Starter Kit and creating a React-Redux hooks API.
(Narrator: "He was sadly mistaken.")
Shortly after the release of React-Redux v6, we began getting feedback that it was indeed too slow in practice, as well as other concerns about edge cases. In addition, extended discussions with the React team told us that the way we were using the Context API just wasn't how React was meant to be used, and would prevent us from being able to add a hooks API to v6. This meant that the architecture I'd pushed for was a dead end for now.
At the start of February, I published a massive "React-Redux v7" roadmap issue laying out the problems we faced, and that we were going to do another rewrite to solve them.
Fortunately, I had some time on my hands immediately after that during another business trip, and was able to hack together an alpha version of React-Redux v7 that used hooks internally. This resolved almost all the issues we'd seen with v6, and we published v7 as final in early April.
$DAY_JOB Issues and Changes
While all this was going on, my project at work was undergoing some major changes that made things feel chaotic. We were reorganized from app teams to feature teams, and jumped into a design phase without sufficient info on what we were trying to plan for. Additionally, I was dealing with some personality conflicts with some team leads. As someone who values stability and comfort, this was all incredibly hard to deal with.
For the second time in less than a year, I started feeling mentally drained and exhausted. It culminated in a particular week where I found myself sitting around the office feeling borderline depressed and telling a coworker "I don't know how much longer I can deal with this".
Fortunately, things turned around right after that. After several discussions with management on how the new feature team structure was leaving several areas of responsibility uncovered, I was asked to change roles from being "just" a feature developer (albeit the unofficial tech lead for my small team) to co-leading an "UI and Services Infra" team. That let me focus my time and effort on the web dev and domain areas I'm an expert on, and the shift in responsibilities helped get me mostly avoid the personality conflicts I'd been dealing with.
The work of shepherding along multiple multi-hundred comment Github issue threads during the React-Redux v7 rewrite had also kind of burned me out on that for a while. We'd already had several open issue threads discussing hypothetical React-Redux hooks APIs, and I'd commented that "I don't see this happening any time soon, because I don't have time or energy". But, in late March, my brain began to latch onto the problem, and I started engaging in the discussions to shape how a hooks API might work.
This also coincided with my "State of Redux" keynote at Reactathon 2019, where I talked about all the progress we'd made on React-Redux v7, Redux Starter Kit, and our new docs sites.
Over the next couple months, we worked through a multitude of design questions, and whittled away at the API surface before settling on the final approach. While I didn't write the hooks code myself, I was constantly involved in all the discussions: laying out constraints, analyzing proposed implementations, and desperately trying to keep yet another giant issue thread on track.
I'd been asked to turn my post The History and Implementation of React-Redux into a talk at ReactNext in Israel. That became A Deep Dive into React-Redux. Conveniently, we'd decided that the hooks API was basically ready to go, so we were able to publish v7.1 the night before and I was able to finish my talk by announcing on stage that the hooks API was live.
With React-Redux actually done for now (seriously! I mean it!), I turned my attention back to Redux Starter Kit. Over the next few months, I nailed down the API design, wrote tutorials, and published v1.0. When it became clear that the name "Starter" was causing confusion, I ended up renaming the package to "Redux Toolkit".
Redux Core Docs
I've been insisting for over two years that the Redux core docs content needs to be reworked. I'd really hoped to start on that task way earlier, but the issues and tasks for React-Redux and RTK just kept taking precedence in the queue.
With all the other work finally out of the way, I was finally able to start working on some of the docs rewrite. As a first step, I wrote a new "Style Guide" docs page that lays out our recommended patterns and best practices for using Redux. I also added some additional mentions of Redux Toolkit to the Redux core docs as well.
Meanwhile, the Docusaurus devs had Docusaurus v2 in alpha, and filed PRs to convert the RTK and Redux core docs from v1 to v2. I kept an eye on those PRs and helped guide them along, eventually merging them in.
The rest of this year at work was spent doing research, design, prototyping, and support. I managed to balance playing team lead and defining / assigning tasks, providing training and support to the feature teams in our project, and actually getting to write code myself. Most of that code was lower-level app setup and infrastructure, but I did get to scaffold a couple features to demonstrate the techniques and patterns I wanted the teams to use.
I also got to research several tools, including OpenAPI schemas for Java and Python, Python package management tooling, and Cypress.io.
In addition, I wrote something like 30K words of internal documentation, covering how some of our existing apps are architected and implemented, and guides on how teams should be building features going forward.
This coincided with my journey of learning and using TypeScript, which I documented in the post Learning and Using TypeScript as an App Dev and a Library Maintainer
Finally, I've driven a lot of the discussion and planning for some of our internal processes, including a whole bunch of suggestions and ideas on how our new DevOps team can improve the dev workflow based on a lot of the tools and concepts I've seen used in open source.
Looking Back, Looking Ahead
With that chronological summary done, here's my thoughts on specific topics.
For my "State of Redux" impromptu talk at ReactBoston 2018, I listed the main things we were working on: React-Redux v6, RSK, published docs sites, and the eventual docs rewrite. When I did the updated keynote version of the talk at Reactathon in March 2019, I was extremely excited to see that there was major visible progress on most of those. React-Redux v6 was out and we were now working on v7, RSK's API had been fleshed out, and we had switched to Docusaurus and published docs sites for all three libs.
As of the end of 2019, I'm very happy with the progress we've made this year. React-Redux v7 and v7.1 with hooks are out. Redux Toolkit 1.0 is out, getting incredibly positive feedback, and rapidly picking up adoption. The Redux core docs rewrite is finally underway, and the Style Guide page has already received a warm reception as well.
For 2020, I hope to push that docs rewrite through to completion. I'm really hoping that I'll get a bunch of assistance from the community, because if it's just me working on it then it will take forever to finish.
The other big outstanding question is what will happen with React-Redux and React's "Concurrent Mode" and "Suspense" features. Honestly, it's still a very open question, and I don't know what the final answer will be. We've got an open issue to discuss the implications of Concurrent Mode for React-Redux, but it's honestly a low priority for me right now. I'm hoping the community can help figure that out.
On which note, I'm thankful for the extensive contributions the Redux community has made in the last couple years. React-Redux v6 and v7.1, the Docusaurus docs sites, Redux Toolkit, TypeScript usage in RTK and the Redux core... none of this would have happened if the community hadn't pitched in to do the work.
And yet, at the same time, I still frequently feel like I'm the only person who cares about trying to improve Redux, and a lone voice arguing in favor of using it. I realize that's largely a function of the social media bubble (which I'll return to in a bit), but that feeling of "if I don't do it, nothing will get done" continues to weigh on me.
On the bright side, I can look back at the last two years and see just how much has happened to improve Redux because I pushed to make it happen. At the same time, it suggests that my role as the Little Red Hen ("if no one will help me, I'll do it myself") continues to be all too necessary.
I don't go into too many details of what I do at work, as it's a lot of internal and proprietary stuff. That said, the last couple years have been extremely positive and successful for me personally. I've established a very solid reputation within our project as someone who is an expert on multiple topics; got an out-of-band promotion last year; was asked to take on an official team lead role this year; successfully trained and guided a bunch of back-end C++/Java devs into being productive with JS+React+Redux+TS; provided support to large portions of our developer team; and laid a lot of the groundwork and infrastructure to make our next development phase successful.
I've been incredibly fortunate with my career. While I'd like to think that I've earned much of my current position, I never would have had the opportunity if it weren't for many other people who mentored me and guided me along the way. Also, while I generally stay out of the "privilege" discussions, the truth is I am extremely privileged on many levels. All I can do is try to pass it on by helping others as much as possible.
Career-wise, I'm doing exactly the kind of work I want to do: tech lead, driving tasks based on my areas of expertise, with people I like, on a project I like, and still getting to do just enough technical stuff myself to stay happy and feel productive.
There's a few question marks about what will happen at work this next year, but unless something drastically changes, I should be able to keep doing what I'm doing.
Like everyone else, I perpetually wish that I could lose a few pounds, exercise more, and get back into better shape. I'm not in bad shape, but I'm certainly never going to be the skinny athletic shape I was when I was in school.
Unfortunately, I'm very lazy, sit all day at work and home, and love junk food too much. Not a good recipe for losing weight :)
The good news is I finally made some progress in the second half of the year. I started playing some extra golf in the mornings partway through the summer, and noticed I was dropping a few pounds soon after. The trend line leveled out when the weather got cold, but it was progress.
Several years ago, I'd been fairly consistent in getting some light cardio walking on a treadmill daily, and tracking my food intake via the MyFitnessPal app. In late fall, I started making a concerted effort to track my food again, this time using an app called LoseIt. Turns out that, shockingly, eating a ton of junk food really adds up to a lot of extra calories, and even things that I thought were relatively light snacks turned out to be a ton of calories. Who knew?
I love my sugar and bread and other carbs way too much to drastically change my diet, but I've been successfully keeping my calorie intake at or below the guide levels for the last month or so, and it seems to be paying off. I've managed to drop another couple pounds, and I've been exercising a bit more consistently too. Here's hoping I can stick with things as the year continues.
When I first hit near-burnout in 2018, one of the problems was that I felt I had to spend every evening and weekend doing something "productive" towards my OSS work. Any time I came home and ended up goofing off, or just felt like not doing anything "useful", I felt bad about myself.
Part of the reset from that burnout was allowing myself to have evenings where I can get home and say "Nope, I'm just goofing off tonight", and not feel guilty about it.
The other big issue is social media. I am, sadly, addicted to multiple venues that have notification icons: Reddit, HN, Twitter, and Reactiflux on Discord. It's bad enough that I find myself reflexively flipping over to them any time I kick off a 30-second process at work, or repeatedly refreshing them late at night when I'm tired but don't want to get off the couch and go to bed.
Social media has been a huge benefit for me personally and professionally. I've learned about so many tools and technologies that later were useful for me, I've formed friendships with folks I've never even met, and it's allowed me to establish a worldwide reputation as "the Redux guy".
At the same time, I can see that social media has heavily affected my own mental state in many ways. It's harder for me to focus, I'm more easily distracted, I burn way too much time refreshing and reading discussions, and I frequently get drawn into threads that turn into arguments (usually over whether Redux is still useful or not). I've had a number of days where some troll sucked me into an argument, and I ended up feeling mentally frustrated as a result.
Social media also makes it much harder for me to accomplish actual "productive" tasks, especially in my free time. I'll get up on a Saturday intending to work on some Redux-related task, get pulled into a discussion thread, spend the whole day refreshing it, procrastinate, and never actually accomplish what I wanted to. If I can just force myself to get started, I get into a good flow and can be incredibly productive, but it's just so hard to get started.
I've never been someone who bothers with New Year's resolutions (if only because I know I'm not realistically going to keep them), and social media is frankly too important to what I do right now to consider giving it up completely. But, at the same time, I really need to find some ways to ease back on the amount of time I spend on it this year, and put limits on where and how I engage people. (Yes, I'm looking at you, HN thread about Redux on New Year's Day.) As Scott Hanselman put it, "Do they deserve the gift of your keystrokes?".
So, uh, there you go. The last two years for me, in a 3700-word brain dump. No great insights here or philosophical takeaways here, other than I've done a lot of stuff, I want to do more stuff, and I want to have a better balance of stuff that I do.
This is a post in the Blogged Answers series. Other posts in this series:
- Aug 02, 2017 - Blogged Answers: Webpack HMR vs React-Hot-Loader
- Dec 18, 2017 - Blogged Answers: Resources for Learning React
- Dec 18, 2017 - Blogged Answers: Resources for Learning Redux
- Mar 29, 2018 - Blogged Answers: Redux - Not Dead Yet!
- Jan 19, 2019 - Blogged Answers: Debugging Tips
- Jul 10, 2019 - Blogged Answers: Thoughts on React Hooks, Redux, and Separation of Concerns
- Nov 26, 2019 - Blogged Answers: Learning and Using TypeScript as an App Dev and a Library Maintainer
- Jan 01, 2020 - Blogged Answers: A Comparison of Redux Batching Techniques
- Jan 01, 2020 - Blogged Answers: Reasons to Use Thunks
- Jan 01, 2020 - Blogged Answers: Years in Review, 2018-2019
- Jan 19, 2020 - Blogged Answers: React, Redux, and Context Behavior