2025: Year in Review

Reflecting on my year

Just like last year, I’m writing my year in review for 2025 at the start of 2026 rather than trying to find the time or energy to write this over the festive period at the end of the year. Last year, it felt a bit weird doing this but now I’m doing it again and it feels like a more natural way of doing it anyway!

This year We celebrated our second wedding anniversary! We went on holidays and soaked up as much sun as possible, and enjoyed spending time together and with family. We went pottery painting twice, for our anniversary and then for Christmas. This was also the first Christmas where we had a real Christmas tree and have decided we’ll do this every Christmas.

Holidays & Travel #

We travelled to three countries this year again. Poland, Portugal, and Slovakia.

🇵🇹 Albufeira, Algarve, Portugal #

This was another first for us. We loved this holiday. Even though we went before summer, we still had fantastic, bright, sunny weather. A few spots of rain and some strong winds on a couple of days, especially along the cliff edge overlooking the beach.

Standing on the cliff and overlooking a pier, large waves would rush in and force air through a small hole in the pier, creating a very loud whistling sound just before water shot out like a geyser. I tried to record it several times, but the timing was too unpredictable to catch it on camera.

This was a relaxing trip. We explored the local area, enjoyed some sightseeing, and spent time swimming at the holiday apartment’s pool.

🇵🇱 Poland #

We didn’t take any photos on this particular trip since we were visiting relatives before crossing the border with them into Slovakia.

🇸🇰 Slovakia #

This was my first time in Slovakia! We came for the thermal baths and a river raft tour through the countryside, and both were brilliant.

The thermal park had several swimming pools and thermal baths, some connected together. Stepping out of normal water straight into hot mineral-rich water was a fantastic experience. We spent multiple days there, just relaxing.

Somehow, we all managed to get fairly bad sun burn despite multiple layers of sun cream, and the hot water only made it string more. Still worth it though.

The river raft tour was excellent - very hot in the direct sun (especially on the sunburn!), but the views made it worthwhile. We drifted along as part of a convoy of around twenty rafts, all operated by the same company.

🇬🇧 Various, UK #

We both like to have nice days out, and this year was no exception. Just like last year, we visited several places in the UK: Parks, the Lake District, Warwick castle again (just like last year, there were various events on throughout this year). We tried ice skating for the first time - it’s way harder than it already looks.

Projects #

🌻 Gardening #

I wrote about gardening for the first time in last year’s review, and we kept it going this year - though with less focus on vegetables. Spring 2025 was wet and unpredictable, or it felt that way at least, which put me off growing too many vegetables that would be affected by this. We did get some lovely sunny weather later on and throughout the year, in fact, more than I remember in recent years. It’s my hope that when we try growing more vegetables again next year, the weather cooperates.

I focused mainly on herbs, tomatoes, and chillies this time round. In terms of gardening, we planted many flowering plants and wildflowers. I bought a Blackberry plant last year as a young cutting, and this year it finally started to flower. Exciting - until I re-potted it with different compost and it promptly died. I was gutted, so next year I’ll buy a few and leave them be.

Every year, I have tried to grow wildflowers in pots with very underwhelming results. I planted them in the ground this year, alongside other flowering plants, and the results were fantastic.

This combination appeared to attract even more wildlife and insects than the previous year. Beetles, caterpillars, bees, butterflies, and moths. This was mostly left untamed and as wild as possible, but I still did some weeding. In the video below, you can see some of the pollinators the wildflowers brought.

This also brought three nasty insect bites on my legs and arms that required antibiotics every time, especially on my leg, which was turning a dark blue and black colour. I’ve never had an infected insect bite, so getting three this year was an unexpected and painful surprise. I did find online discussions from people with similar experiences, where the consensus was that the unpredictable weather that affected gardening and plants earlier in the year, ironically, caused an explosion in insect numbers.

🧩 Maze Generation/Solving #

I continued working on a fun long-term project I’ve been working on for a while. I focused on performance, reducing memory allocations, developing the desktop application, and setting up deployment, an installer, and automatic updates.

  • Wrote more benchmarks and profiling tests with BenchmarkDotNet.
    • Reduced allocations in PNG rendering paths.
    • During a one-minute animation render, performance work reduced total allocations from 616,476 to 1,509 = 99.76% reduction.
    • There are still several areas with substantial optimisation potential.
  • Implemented UI controls for many features that already existed in the project core, making algorithm options configurable.
  • Added dialog and window support that integrates cleanly with the MVVM structure.
  • Implemented theme support, allowing users to choose from a range of colour schemes rather than being stuck with the usual generic light and dark modes. I’ve complained about this forced binary choice before.

I’m also very pleased with the automatic and semantic versioning, CHANGELOG.md release notes generation, installer creation and automatic updates. It’s a combination of some very useful tools.

The Conventional Commit format is a foundation for all of this. Apparently controversially for some people, I like commits be well-written and relevant. Because of this, I’m able to use all of the following tools essentially “for free”, as in, I don’t need to do much to make them work because of the pit of success.

The versioning is also automated from these commits:

  • feat(desktop): replace messenger with mvvm dialog library increments the minor SemVer version
  • perf(algorithms): reduce allocations and compute time for cells by splitting equality and link comparison increments the patch SemVer version

All of these pieces come together through the GitHub Actions CI/CD pipeline.

When commits are pushed, Release Please automatically opens or updates a release PR. I don’t need to merge it immediately; it can sit there while more changes accumulate, with the version bump and release notes updated as the commit history grows. I wanted to emphasis this part, a release does not need to happen if I don’t want it to yet. I could make it do that, but often there are features that naturally fit together and so should be deployed together.

When I decide to make a release, I merge the release PR causing the release workflow run to run. Velopack then builds installers for the supported operating systems and uploads the generated packages to Cloudflare R2.

Previously installed versions of the desktop application periodically check for updates. Currently I have written this so that the user needs to click About > Check for updates, where versioning information and the embedded release notes are displayed.

Stay up to date

Subscribe to my newsletter to stay up to date on my articles and projects