Slowly, but surely, I have been writing a bunch of different things for KitchenOS including many of the services that will end up searching for, saving, and creating recipes within my backend through AWS Lambda services.  These have all been pretty straightforward with the development that I am used to, but now I am to the point of where I need to enhance the recipes that I am scraping from The Food Network's website.

To me, recipe enhancement contains some basic functionality and I want to be able to complete it pretty quickly mostly from within a larger tablet or desktop application.  Right now my larger computer (for lack of a better term as I now look at iPads as actual computers and I would probably have one were it to offer XCode) is my Surface Pro, and I assume now this will be my computer for a long time, or at least a descendent of it.  

So how do I build the features of recipe enhancement and have it be a native, non web-app, on Windows?  First things first, I know I could do a web app as this is going to really be a simple CRUD application right now.  But this project is less about doing things that I know, and more about trying to learn new things.  The two options that I have come down to are a UWP app or an Electron app.  I have spent a ton of time thinking of which to choose here, and done quite a bit of research to come up with some pros and cons for both platforms.

Here is what I found when looking into Electron:

  • There are a ton of different apps that I use quite often that are Electron-based including Ghost's blog thick client, Slack, Insomnia, and Visual Studio Code.  So I know that Electron can handle a ton of different application types and they all work.
  • There are a ton of people, specifically in the Mac and Apple ecosystem, that really hate on Slack (and Electron apps in general) for the fact that they are memory hogs and embed the entire Chromium engine in each launch.
  • Electron apps are built really using technologies I already know from the front end (HTML and CSS) and then on the back-end leveraging JavaScript which while I know a bit of, I am definitely not an expert in.
  • The community online is really large.  So I would be able to get answers to my questions by probably a quick Google search or a look at or Stack Overflow for what people are already asking.
  • It's basically web development, so I can re-use my web skills.
  • I cannot use Electron to integrate into a bunch of native API features on either macOS or Windows 10 if I want to do that in the future.

So this is a definite solid option, and I know the technology isn't going away and it is probably something that may be needed in my career.  At least an understanding of it and how it works in case a client wants something to augment a piece of their commerce infrastructure.  But desktop apps are probably a major edge case here.

So what about building a native UWP (Universal Windows Platform) app in C#?

  • I don't really know C#.  Sure, I know Java and they are really close, but there is a whole C# ecosystem that I haven't been anywhere near for the entirety of my career.
  • Obviously, the app wouldn't be cross platform.  But does it matter if I am the one controlling how this will work?  And if this thing becomes something someone else wants to try to use, maybe having native (not Electron) on the major platforms is a good thing.
  • I could end up using some of the new UWP APIs that Microsoft has put in place including Windows Ink, Windows ML, Cortana, and integrating into Office apps.  Sure none of this right now is in my plans, but it could be fun to mess with.
  • The C# community is probably not as large as the web development community, but I know there is still a large one and a lot of content can be found on Stack Overflow.

So all in all, I had a decision to make.  After initially thinking I was going to go down the Electron path, last night I decided to go down the UWP path.  The main deciding factor was that I think there is a lot of cool stuff Microsoft is doing, and if I want to be able to understand it more, there is no better way than to have a playground in which I can learn more.

Now a direction has been chosen and the journey begins to learning the UWP and building out my prototype for the Recipe Enhancement piece.  Should be fun times.