I actually started tackling this myself a few days ago. For a while, my off hours coding was an attempt to learn things I needed to know at work. But that got pretty old. For the last few days, I've been coding things that are interesting to me, and are intentionally a bit ridiculous.

For example, if there's no client library for interacting with a web service at work, I had previously been mentally tasking myself with writing the entire library at a high level of quality, because I felt like writing a library for that hit 1 of N endpoints was aiming too low. Now, instead of burdening myself with writing that entire library, I just write something that just contains the bits I wanna use.

For example, it would appear there's no Rust library on Cargo for Artifactory... https://crates.io/search?q=artifactory

The amount of work it'd take to learn their API from scratch, including all of the options and edge cases, is a notable amount of effort. Especially if it's fast, well tested, handles multiple release versions, etc. I might tell myself that I'm going to write the entire Artifactory REST client, start out all gung ho, only to be defeated by various flavors of things that lead to burnout.

Now let's say I want to learn a bit about how the Artifactory API works, and I'm banging out a proof of concept in Rust. Instead of calling it "artifactory-rust", maybe I decided to narrow the use case. My library is going is going to be called "banana-flinger", and it's going to upload 50GB of banana pictures. There are all sort so of lessons one can learn from attempting to upload 50GB of banana pictures to an instance of Artifactory running on a VM that only has 20 GB of disk space. Can I de-duplicate data at the file system level to increase the effective storage? How does the API work when it comes to rate limiting, max upload size, various encoding protocols, etc? How hard is it to move 20GB of data from one VM to a bigger one vs. using an elastic block store. Yada yada. While 50GB of banana pictures is completely stupid to anyone who isn't me, it's an excuse to play with things I'm interested in that are all related to 50GB of bananas. If I ever decide to get serious, I can apply lessons learned from Big Banana, and apply them to real Artifactory client, or to something completely different.

One silly example is my recent adventure on learning the basics of writing a Vagrant plugin (https://www.vagrantup.com/docs/plugins/). Vagrant is mostly written in Ruby, and Vagrant plugins are essentially Ruby gems, but they use a slightly different convention. I occasionally want a custom Vagrant plugin at work, and explored writing a plugin on my own time. To make it not about work, I decided that I'd write a walkthrough on how to use a Vagrant plugin in which one could declare one's self a potato by running the command `vagrant declare-self-potato`. I learned 100% of what I wanted to learn, and it felt 0% like work. Should you wish to learn how to use Vagrant to become either a naughty or proper potato, you may do so here:

https://github.com/amorphid/my_vagrant_plugin

For now, you might consider learning to embrace the a-peel of bananas. If you ever get tired of dealing with yet another banana, split.