The year is almost over, so time for a quick recap.
Work-wise, we started the year by releasing a new app called Narrated. It's a Mac app to create more personal screen recordings by including your camera. It was really fun to build and ship, but it hasn't been a success commercially at all by any means. Our goal was to actually get the entire app out within a few months, and we did manage to go from prototype to finished app within about three months.
At the beginning of the year, we started preparing a SwiftUI workshop. We tried to think hard about what parts are difficult to learn, and focus on that. For example: everyone can figure out how to create a button, but hardly anyone actually understands the layout system.
It's been incredibly rewarding running these workshops for teams both with and without SwiftUI experience at companies across the globe. At first, I was a bit hesitant about running an online workshop, but it turned out to work really well. I think part of it was preparing better than we ever did before. We have well thought-out exercises that all build on top of each other, as well as a Mac app that describes all the exercises and has a large number of interactive explanations. With each workshop we ran, we were able to iterate on this, improving the exercises, explanations and structure.
In the middle of last year we started on a new edition of Advanced Swift (we're hoping to ship it early 2022). We decided to revisit and update every single chapter, as well as adding a new chapter on Swift's new concurrency system. The new concurrency stuff took us a while to understand, but I'm very impressed by its design. Concurrency is still hard, but this new system definitely helps to boil down concurrent and asynchronous code to its essential complexity, rather than complex code that's further obfuscated by lots of nested callbacks and/or reactive programming.
Of course, we also continued Swift Talk. I personally learned a ton reimplementing SwiftUI's layout system. We also built a simple vector drawing app, reimplemented matchedGeometryEffect and SwiftUI's state handling.
Running-wise, it was a pretty good year. Having two clear running goals (a spring marathon and a fall marathon) gave me purpose and meaning every single day. Even when all races were cancelled, I ran a solo marathon in April in 2:36. This was a massive PB. In preparation, I also ran PBs on the 10k (33 min) and HM (1:13). In the second half of the year I didn't run any PBs, but did manage to win a few races. One of the most fun races for me was the Usedom Marathon where I finished in second place. I essentially ran that as a long run at 80% effort (just like the winner, who finished multiple minutes ahead of me). The Berlin marathon result (my main goal for the year) was disappointing for me as I don't think I got anywhere close to what my training predicted.
As a family, I think we managed to get through the pandemic relatively well. We leased a plot in a community garden, which helped: we spent a lot of our free time outside doing physical labour and playing. I actually have good hopes for the future, but if anything, we'll just have to take things as they come.