Baconit

Baconit, the excellent reddit client for Windows Phone and Windows 10 devices was made open source a while ago. As a .NET developer, I was interested in seeing the source code of a successful app I use often.

Code review

Disclaimer: I want to make a point, to make this point succinctly I will solely focus on what I think can be improved.

Secondly, I’m not a professional app developer and my expertise is more towards the backend, so I will limit the code review to the BaconBackend.

Thirdly, if you are the author or a contributor, don’t get offended or if you do, skip ahead to the Success review part 😉

Code file unit

Visual Studio is a great and versatile IDE. It has a Solution Explorer with great filtering capabilities, allowing you to navigate and discover your code, giving you an overview in the form of a tree.

That’s why I never understand why developers like putting more than one type, let alone a bunch of types, into one single code file. This totally puts the Solution Explorer out of order.

One of many examples, Collector.cs is a container containing 500 lines for 9 types, which I have to scroll through to get a grip on. I cannot get an overview at a glance.

Please, one type per code file, use namespaces to group types. A code file shouldn’t be a surprise package.

// This is a comment

Next thing I notice are comments stating the obvious, generating useless noise.

Here’s a random one: BaconBackend.DataObjects.User.HasMail – Indicates if the user has mail.

Browsing through the code, I suspect it was decided to indiscriminately document everything with xml comments. Public members, private members, doesn’t matter.

This makes the code base verbose and noisy, with detrimental value. Developers often get in this GhosDoc mode, adding a lot of generic comments, instead of adding few valuable comments – making you pause to think about why you have to add a comment in the first place.

Please don’t make comments the default, prefer verbose variable and method names that carry as much meaning as possible.

Let me Helper you

Helpers are a code smell to me. They smell like a shortcut or design fatigue, where you just say, screw it – I just need to get this done and don’t feel like finding this piece of code a place in the bigger picture.

The worst offender I have seen, has to be BaconBackend.Helpers.MiscellaneousHelper.
Miscallenous. Helper.

Unless you’re making an application for Santa, Helpers are not part of your domain.

Don’t send a manager to do a service’s job

More focused than helpers, but still too vague for a clear defined responsibility, are the typical managers.

Instead of SubredditManager that has a ChangeSubscriptionStatus method (among many other unrelated members), I’d prefer a Subreddit namespace with focused services like Subscriber. This makes it clear where to go for Subreddit related functionality and what functionality there is available to use.

Automated tests

There are none which is a sin in any non-trivial application. I think this is a big road block towards any change.

My complaints above might be superficial or not, but without a test harness in place, the risk will often outweigh the benefit of any improvement.

Success review

But what are these potential code improvements worth? I mean, I know what they’re claimed to be worth; I fight this battle every day. But at the same time you have to wonder, what will it buy you?

I feel software developers focus a lot of energy on “the way” software should be developed, but have nothing to show for but some dull enterprise software package no one loves to use.

Meanwhile, Baconit does its job and improves the Windows Phone, which usually gets ignored in the app space.

That’s why I think the points I made in the code review, should always be ignored if they stop or slow you down from delivering value.
One of my New Year’s resolutions is to be more like Quinn Damerell and get stuff done.

So, what if Baconit would add a meetup feature, where you could detect other Baconit users in your proximity? I’m going to add a MeetupManager right now… 🙂

Theme music for this blog post

Baconit

Zero to hundred

I didn’t completely abandon my original intention, but it did turn out a bit different.
I wanted to do short blogs about my progress, both as a way of motivating myself and creating a guide. But I kept feeling like I didn’t have something worth reporting on.

Several weeks later, the app is in the Windows Store without a single post about it.

So a quick summary of where I am at is in order:

  1. I used GitHub Pages to host the product website
  2. I put the source code up on GitHub
  3. The app is named homebased
    1. It has an unlimited trial without any limitations, so don’t worry about the $0.99 🙂
      1. I didn’t make it free, because I want to keep the psychological option of sales and giving it away for free to promote it

What’s next

iwillmakebettermistakestomorr

As you can see, the app is the very bare minimum in all sense of the word.

I see it really needs to:

  1. Improve usability
    1. I developed a first time user experience, that guides you through the setup, but I admit it’s not dummy-proof
    2. Because I wanted something generic that supports different services, it actually turned out a bit clumsy to use with the single service it does support
  2. Improve user interface
    1. although the app does its main job in the background, it could be a bit more inviting visually to set up
    2. I wanted to follow the default Windows Phone settings screens and style, but maybe that’s just an excuse 😉
  3. Add features
    1. You can only connect to IFTTT, there’s more relevant API’s out there
    2. Support multiple users, because if there’s more than one person that lives in a household, you don’t want to lights get turned off just because you are out

Theme music for this blog post

Zero to hundred

Back of the napkin

So although I symbolically titled the first post in this series “File > New Project“, I definitely look at this initiative as a product.

Not a product in any business sense, but in the sense that there is no outlined path of what’s going in and what will come out of it.

napkin

This is how I currently see the minimum viable product, an app consisting out of:

  1. First-time user wizard for a dummy proof setup
    1. Should configure your home location
    2. Should connect to at least one smart service or device
    3. Can configure what to do when leaving home
    4. Can configure what to do when arriving at home
    5. Explains how the app will help
  2. Home screen reports performed actions that were configured
    1. This includes failed actions
  3. Settings screen that allows customization of the initial settings

I forgot to mention I already tried out a basic proof of concept before I started these blog posts, just to make sure it has some chance of working out. So I have some confidence this is conceptually feasible.

Next step is sketching some mockups and developing a first draft.
I should be able to get in the more technical details by then and share some code.

Theme music for this blog post

Back of the napkin

File > New Project

Spare time is the best time

If you are a software developer and occasionally daydream of quitting your day job with a bang like Dave Chappelle, it makes sense to spend some time on a pet project. That’s how humanhuman started and now it’s a promising company.

Mark Heath from NAudio made a convincing argument on this topic, about why you should create a digital product and sell it online. Specifically the point about being able to do it in your spare time, takes away all the reasons not to do it.

So this is where I’m at right now, in my spare time and ready to journey from idea to pet project and if the stars align, to digital product.

Billions and billions ideas

Now when you share an idea for a digital product with a friend, they will very most likely point out that it has already been done. This used to be reason enough for me to abandon an idea, until I realized:

  • there are billions of people, having a truly original idea is like winning the lottery
  • ideas are not even half the battle, it’s the execution that counts
  • there’s always room for a different take on an idea

If you are investing money in an idea, different rules might apply. But in your spare time, the stakes are so low that an abandoned idea is a missed opportunity.

App store or bust

I have had countless exciting ideas that quickly simmered down and then quietly fizzled out. So the number one priority is minimizing any hurdles of completing this endeavor.

That’s why I’m sticking to what I know, which is .NET development. As a result of this, I’m picking the Windows Phone Store as the platform to sell my digital product.

I feel this sets the bar at a realistic height. The goal is to remove any excuses of not completing it, making money in a store of which I haven’t heard many promising stories about is not the point.

Elevator pitch

This is the second unoriginal idea I pick, the first one turned out not to be technically possible on Windows Phone without a backend (app that sends email or SMS in the background before you battery dies, for example to notify your significant other you can’t be reached in case of an emergency or for teens out for the night to give their parents a heads up so they don’t panic just yet)

Anyway, step in the elevator, going up:

  • Do you have your phone on you all the time?
  • Do you have any connected smart devices in your home?
  • You probably commute to work and back five days a week following a pretty regular pattern
  • I’ll build you an app that upgrades your comfort at home by suggesting and letting you customize what your smart devices should automatically do when you leave and arrive at the house every day
  • Left for work? Any running devices get turned off, the heating gets turned down and any other thing you configure
  • Back at home? Well, welcome, we already saw you coming, the heating has already been turned up

*ding*

First floor, please step out.

Ideas on paper are harder than they appear

IMG_4438.JPG

On this journey from idea to app store, I will share sketches, mockups, technical diagrams, code and depending on how far I get, a working app.

Subscribe if you do not want to miss my upcoming irregular and infrequent updates.

Theme music for this blog post

File > New Project