News, reviews, information and apps for Windows Phone.

One less Podcatcher... victim of 'code cruft' and a tale of an evolving platform

Regular readers will know that I've been adding to my roundup of podcatchers for Windows Phone, with eighteen applications at last count, the latest being Microsoft's own Podcasts and the third party Podcast2Go. 18 just became 17, anyway, with the withdrawal of the eponymous Podcatcher, one of the very first on the platform, with the developer explaining his reasons in detail here. Nothing too dramatic, but just an honest realisation that his code was designed for an older version of a platform which had now evolved. Some interesting insights into a developer's thinking.

So I've announced to unpublish Podcatcher from the Windows Phone marketplace. Podcatcher has been a dear project to me for many reasons and I've noticed it also had some satisfied users. In this blog post I try to open up some of the reasons for unpublishing it.

Podcatcher was (one of the other) projects that I used to teach myself how to do Windows Phone programming. Or even C# programming for that matter. When you start a new project in a completely new environment and language you tend to make a lot of mistakes. And then you fix them. That's how you learn, right.

But some things are more fundamental than others. One of the things that I couldn't fix anymore - a thing that was so fundamental - and a thing that I today for sure would have done differently is how to model the state data using Linq-to-SQL DataContext. It sits at the bottom of every other model that I have. I already once redid the DataContext functionality by properly disposing them inside using() statements. But at this point of time to go forward I would need to redesign how I lay out my data in multiple DataContexts to handle concurrency better and make it easier to update just the correct pieces of data. Some of the bugs that I've now faced were DataContext.ChangeConflictExceptions which are especially nasty to debug and fix. But basically they mean that the data models are not holding up anymore.

OK, so that's already got way too technical for us end users. Roughly translated, with hindsight he'd have written Podcatcher differently and it would have been more future proof.

Boy, if I would have been able to use async and await from the beginning instead of BackgroundWorker as my threading model, the code would have been so much cleaner and more maintanable. But because Podcatcher originally targeted Windows Phone 7.5, it wasn't available at the time. The application was then moved over to Windows Phone 8.0, but all the critical threading code and model handling had already been implemented.

It's clear that none of this was Johan's fault - but platforms evolve and better ways of implementing functions crop up. It has been very noticeable that the later crop of podcatchers have been slicker and more functional than the earlier ones - it's always easier building on top of something which is more mature. And, to an extent, learning from the mistakes of others?

Finally, Johan acknowledges something that's going to bite all the third party podcatcher developers:

Microsoft is adding an app called "Podcast" that comes preinstalled on every Windows Phone 8.1 device that is bought from a retail store. How the heck am I going to compete against Microsoft in this space? This is probably the reason why I don't have the energy to fix the issues that I've described earlier. After all, yes, the issues are "just code" related and you can always write new code, right. But with Microsoft having their own podcast app in the app list preinstalled does not really add any extra motivation to make the necessary changes.

Finally, Johan points out that if anyone else wants to tinker with his code, it's all online now:

All of Podcatcher's code is open sourced on GitHub with the GPL license (except for the Telerik components that the Windows Phone 8.0 version depends on). Go get the code from here: https://github.com/kypeli/Podcatcher.

As for me, I will now code something else Yep, I've installed the Windows Phone 8.1 SDK so I will probably do something else for Windows Phone in the future. No idea yet what. Starting from scratch and to be able target the more mature Windows Phone platform feels great. But one thing is certain: I've learned so much from coding Podcatcher that the project has not been in vain. And now that the code is out there, I hope it will help someone else too.

Very public spirited, Johan, and we wish you well for the future.

PS. Did you know that Johan's implementation of Podcatcher started life on Meego, on the Nokia N9, back in 2010? It had a good run!