Monday 11 May 2020

When a hobby project turns into a bit of a grind

In a couple of previous posts I have covered my NymphCast project [1] as well as my approach to testing a project before release [2]. As I noted in that second post, NymphCast is a hobby project, and one definition of a 'hobby' is an activity practiced in one's spare time for the sake of relaxation and enjoyment. Here it should be fairly obvious already that developing an ambitious software project from scratch by oneself would be an excellent example of balancing the fine line between 'enjoyment' and 'unpaid work'.

The past weeks I have made a couple of major changes to the project, moving the SDL-based video display and window-handling routines - including the screensaver element - as well as the entirety of the SDL initialisation to a single class. I also rewrote the SoundCloud app to use the new JSON responses from the SoundCloud backend, adding regular expression and key-value store (KVS) support to the AngelScript API to allow the SoundCloud app in NymphCast to fully work for searches and playback of tracks and albums.

After that first major change, I did notice a regression with the playback of files, with playback no longer stopping by itself after a track or video had finished. This persisted after making the second stack of changes, as noticed after trying to stream an album from SoundCloud, with only the first track playing. This finding led me to dive deep into the ffmpeg-based code, with the debugger backtraces as a guide, to figure out where things were going off the rails.


Sometimes there doesn't seem to be a particular reason why a regression like this happens. In those cases it's usually a case of the existing code (in this case heavily borrowed from ffmpeg's ffplay source) being fragile enough that a small change elsewhere or a timing change makes it fall over and catch on fire. Since I couldn't find a particular cause for this regression, I opted to instead improve the existing code to better detect the end-of-file condition once I felt that I had a solid enough grasp on how the code was interacting with the ffmpeg APIs.

It was at this point that I realised that the project was becoming more my 'work' than my actual work, with it consuming a significant part of each day for the past weeks. More seriously, I wasn't enjoying myself. Though I knew that more tests needed to be run, with the goal of finding more issues that need fixing, it's clear that none of this is really 'fun', and more something that one does because it has to be done. Not to say that hobbies do not have those moments where one has to work through something unpleasant, but the difference between a job and hobby should be that with the latter one volunteers to do the work when one feels like it.

Thus I choose to just push the presumed fix to Github and leave it like that for now.


It feels good to do a bit of recharging after a bit too much 'hobby' work like that. To instead think about some small aspects that one could do at some point in the future when one again relishes a challenge to sink one's fangs into. Until then there are other hobbies and of course paid work to spend time on. The last thing one wants is to burn out on a hobby project.

Some other issues have also popped up over the past months that take the fun out of the project. Take for example the idea of using the same client-side application (NymphCast Player) for desktop and mobile. This ran into a breaking bug in Qt's Android support [3]. After considering writing a native Android client (in Java with NDK-based C++ core), the additional work of getting back into Android development didn't feel extremely appealing. The last time I did Android development, the ADT-based Eclipse IDE was still the cat's pyjama's, and I still haven't come to terms with this newfangled Android Studio thing. Basically there is no fun to be found in that direction either. At least not right now.


I still like the NymphCast project as a whole, and I have noticed that others do too, from the stack of Github tickets where people express their gratitude for the project, as well as a couple of small donations for the project. Yet as a whole, the project is still in this awkward phase where it's supposed to be 'fun' because it's a hobby project while at the same time there exist these external expectations about the project and what it could become.

For the immediate future, I'm still immensely grateful for any Github issue tickets for things that I wouldn't have (easily) found myself, as well as the emotional boost from the donations. It's just a matter of time when I'll feel like grinding through the rest of this debugging and testing, much like how one would get through the less fun parts of a video game.


Maya


[1] https://mayaposch.blogspot.com/2020/03/nymphcast-casual-attempt-at-open.html
[2] https://mayaposch.blogspot.com/2020/03/the-fickle-world-of-software-development.html
[3] https://bugreports.qt.io/browse/QTBUG-83372

No comments: