2025 in Review
— Personal, 2025, Year in Review — 7 min read
It's that time of the year again - the time where I look back at what I did in the last 12 months. The good, the great and the perfect. Because, to be honest, 2025 was an amazing year for me. Let's start with my new job:
Sentry 👨💻
On January 7th, I joined the Design Engineering Team at Sentry as a part-time contractor after working for a startup in Vienna for the last decade. This was by far the biggest change in my career ever, which was exciting and terrifying at the same time. But, what can I say: I really enjoy working at Sentry. Everyone in the Vienna office is super nice and welcoming, the work is challenging and rewarding, and I even got to travel to San Francisco for a week, which is the first time I left Europe since I've had kids.
I already wrote about what we do in the Design Engineering Team in my blog post Designing Design Systems earlier this year, but in case this sounds a bit abstract, here's a concrete but non-exhaustive list of things I helped ship this year that I am quite proud of:
The Sentry re-design
In case you haven't seen it yet - Sentry has a bold new look, and the Design Engineering team was responsible for rolling it out to the whole platform. This went hand in hand with building S.C.R.A.P.S - our new design language and the design system (Standardized Collection of Reusable Assets & Patterns for Sentry).
The name is quite fitting as we've literally pulled the first version together from existing "shared components" we've found all over the codebase. This also means we have a lot of work ahead of us, making APIs and documentation better as well as providing new patterns that are just outright missing.
Improving the Sentry codebase
We've put quite a bit of effort into trying to make the Sentry codebase better for everyone, as it has organically grown with little oversight over the last 10 or so years. This year, we've enabled type-aware linting, turned on noImplicitAny and introduced knip to remove a lot of unused code. This project, which took a lot of effort over a couple of months, also inspired me to write the talk Dead Code Shouldn't Exist, which I will be giving at various conferences next year.
Improving the Sentry product
We've also put some work into making Sentry faster for everyone. ⚡ This includes features like route intent preloading, automatic virtualization for our Select component and using shared layouts to avoid a flashing loading spinner during first navigation.
And we're in the process of replacing the home-grown URL state solution with nuqs, which is an ongoing migration that will also have a positive perf impact thanks to its support for shallow routing. This has led me to become an active contributor to nuqs, as I got a bunch of features and fixes merged this year. So, it is true that one of the best ways to contribute to open source is by helping out with the tools you love and that you actively need. Shout out to François Best for guiding me through the nuqs codebase. He is literally the Best. 🙌
Open Source 🔓
On the one hand, it feels like open source has slowed down for me this year. For TanStack Query, pretty much nothing happened. Although, we started the year on v5.62.11 and are now on v5.90.12, so that means we must've shipped some features, but I guess it was nothing groundbreaking. staleTime:'static' and timeoutManager come to mind but they are both quite niche, so I wouldn't be surprised if you haven't use them yet. Oh, there's also streamedQuery which was a nice addition. I guess sometimes, we just forget how long a year really is, and looking back like this, we realize how much has actually happened. 😅
Also, yes, I have an unsorted list for what might become a v6 someday, but I'm in no rush here. I will post a public discussion once I'm sufficiently confident on what needs to be done. Usage has spiked thanks to AI, and most people are very happy with the library as it is. The improvements that are left to be done are either very small, or for edge-cases that don't come up a lot. I wouldn't say Query is "feature complete", but it's very likely "good enough" for what users currently try to do.
On the other hand, there is one thing looming over me, and that is of course Async React.
Async React
React has shipped a lot of new features recently: Suspense, useTransition & View Transitions, use, useOptimistic and Actions. If you've seen Ricky's talk, you can see that these features are really great and quite powerful if used correctly, but you can probably also see in the demo that the APIs are a bit low-level and aren't as easy to use as we'd hope.
In part two of his talk, he concludes that we need three things to make this better: Async React support in our design component libraries, our routers and our data-fetching libraries by default. Basically, app developers will not need to worry about those low-level APIs once existing libraries provide a good abstraction of them and integrate with them seamlessly.
As someone who works on all three of these - TanStack Router, TanStack Query and Sentry Scraps - that's terrifying.😂 It means I need to figure out a lot of things going forward. At least for now, that seems like a "future me" problem. Expect more blog posts on this next year as the async react working group ramps up and we collectively get a better understanding of the topic.
Public Appearances 🗣️
I gave the talk React Query API Design - Lessons Learned at React Paris and a workshop called React Query - Beyond the Basics for React Summit Amsterdam and React Advanced London. This was the first time I did a workshop, and I was positively surprised about the experience. I love teaching patterns about React Query and I think I'm uniquely qualified given my experience with it. Preparing the workshop took a lot of work (more than prepping a talk), but seeing how everyone took away something from those four hours no matter their experience level made it totally worth it.
So if you want me to to give that workshop for you too, in person or remote, please do reach out.
Blogging 📚
I tried to blog regularly, and despite having a lot of work, I managed to write eleven blogposts - almost one per month. I do have another one lined up about TanStack Router that I cannot publish yet , because it references APIs that don't exist and need to be implemented first, so I guess that counts as #12.
I even made it to the front page of Hacker News, as you can see in this beautiful statistic:

PoV: A day on the orange site in July 🟠

It even lead to me going back on the PodRocket podcast talking about Is React's useCallback Hook Useless?.
Despite that, traffic to my blog started to go down by a quarter year over year. I think this is mostly because of AI giving you answers directly, which means a lot of people don't need to go read blogposts anymore. It's nice to see though that the visit duration and views per visit are both trending upwards 📈, which indicates people that decide to do visit my blog like what they see.
Running 🏃♂️
2025 is the year I started to take running seriously. I signed up for the Wachau Half Marathon in September and began training towards that in March. I started with 2-3 times a week and ramped up to 4 times a week during summer.
I did a couple of 10k races to prepare myself for the longer distances and to get a feeling for how different it was gonna be to actually compete in a race. I didn't want to believe it, but just the presence of others, the people cheering for you and the "race mentality" really makes you go faster than you ever thought you could during training.
For example, I finished my best training 10k in 59:21, but my PR, which happened in a race, comes in at 51:56.
I also ran the 21.1k distance once in July with a friend, finishing in 2:07:04. My goal for the race was to finish in under 2 hours, so a training run being in that area meant I could probably get there while racing.
Sadly, it never got to that. The only time I got sick this year was one week before the race. 😭 I was feeling better after three days, but still decided to listen to my body and skip the race. It's not worth jeopardizing one's health, and I was scheduled to travel to React Prague - The Spark a couple of days after that, and I didn't want to miss that.
Looking back, the stats tell me that I got quite a bit better at running too. Beginning of the year, my base runs were typically 5km at about 6:30 pace. Now, I usually run at a 5:40 pace easily. That is - with the same heart rate of around 150bpm.
The year isn't over yet, but my watch tells me I ran just over 1k kilometers (1007km) in 142 running activities so far. For next year, I do want to finally get that half marathon race done, and I want to consistently run 100 km per month.
2026 Outlook 👀
Interestingly, I have a lot of my travel for 2026 sorted out already. I will be on the road quite a bit more than this year. If you're at any of these events and want to meet up, let me know:
- March 26 & 27: React Paris
- May 14 & 15: JsHeroes
- June 5: React Norway
- June 11 & 12: JsNation & React Summit
- September 11: ZurichJs
I also have a couple of CFPs still unanswered, so maybe I'll be at another european event or two that I don't yet know about.
Happy New Year 🎉
With that, I like to wish y'all a happy new year, and yes, of course I'm going to really re-write my blog in Astro in 2026. Just like I did for the last four years. 😉
That's it for today. Feel free to reach out to me on bluesky if you have any questions, or just leave a comment below. ⬇️
