Build 2014

I spent last week in San Francisco at Microsoft’s Build conference. Build is an annual (at least I think it’s going to be) event the company holds at Moscone West to share their latest offerings for Windows, mobile, and Azure. I’m not a developer for any of the Windows platforms. Glassboard, however, runs on Microsoft Azure so I was interested in attending both to learn about the new offerings and to put some names and faces together with people I’ve started interacting with recently.

Overall it was a positive experience as someone who only recently dipped his toes back into what Microsoft is doing recently. The last time I used (or even cared) about Microsoft technology was the late 90’s when they were a giant, evil corporation who was charged with being a monopoly. I switched to the Mac when OS X was announced in 2000 and hadn’t really touched since.

Fast forward 14 years later and Microsoft seems to be a whole new company. New products. New CEO. New development offerings. And less of a focus on Windows, Windows, Windows.

Sure, Windows is a key part of the Microsoft ecosystem (and rightly so), but it also no longer seems to be the central focus that directs everything they do. I sat through two THREE HOUR (emphasis mine because oh my god so long) keynotes that prominently featured iOS devices, the Apple logo, iPads, Androids, and even Linux. A few years ago this was the company that dismissed iOS as a failure to launch and instead focused on how they could go from a Windows computer on every desk to a Windows Phone in every pocket.

Windows Phone is still a key piece of technology for them (and 8.1 looks great), but they realize that integrating their services into the other platforms as first-class citizens is best for business.

Whether this was a plan set in place by Ballmer before he left, or new under new CEO Satya Nadella’s watch I don’t know. As an outside just starting to look in, however, it’s refreshing.

A True Partner

One of the biggest differences I noticed between an event like Build and WWDC was in the subtle messaging. Both Apple and Microsoft are massive companies that make billions of dollars and answer to their shareholders. Both companies also offer development platforms for third-parties to integrate with.

What’s different though is that it feels like Microsoft is more interested in working with us as a partner whereas Apple has always given off a vibe of just sort of dealing with us because they have to. Maybe that’s a little sour grapes, but as a developer it was a nice change.

Build was announced far in advance allowing people ample time to schedule and book their travel. Microsoft released the full schedule of the event the night before so you could plan your week out in advance (or just decide to wait for the videos later on). They even provided previews (and access) to upcoming technologies that aren’t ready just yet, but to give us an eye on where they see things going.

It was cool to get a free Xbox One to play Titanfall on, but they also had several sessions during Build that talked about how to actually build an application that can run on that Xbox so that when the time comes that they release a full SDK and support for that, developers will be ready. They provided that to everyone, not just a few select partners that also share a stock ticker symbol.

Open Source

Microsoft isn’t exactly a showman company. The keynotes were well presented, but they also lacked the pizazz of an Apple event where everything feels as cool as a night out with Frank and Dean.

The one area where I sat up and thought “OK, that was cool” was when Anders Hejlsberg publicly open sourced the new Roslyn C# compiler platform on the Keynote stage at the end of his demo.

Roslyn is a key piece of technology for the future of Microsoft and they’re now managing it as an open source project. This allows for a few things: outside contributions and feedback on the platform from fellow developers for one. More importantly, it allows the Xamarin folks who had implemented their own C# compiler to work on MonoTouch. It’s now possible for Microsoft and Xamarin to collaborate together on a single compiler rather than both building in parallel.

Apple has the LLVM project, which is similar in many ways, but I also can’t imagine them working with a third-party vendor such as RubyMotion (for lack of a better example) to make their jobs easier.

I still hope that some day Apple will open source the core iOS and OS X frameworks the same way Microsoft does with .Net and Google does with Android. I’m not holding my breath, but I can dream.

Overall though, Microsoft seems to be embracing open source in new and interesting ways that the old Microsoft never seemed to care about. Previously when they open sourced a piece of technology it’s because they were no longer interested in it. Now, key pieces of functionality that the future of the company is based on are out in the open.

Bizarro WWDC

A week or two before Build, I received a text message from Dave Wiskus of Q Branch/Vesper asking if I was still attending Build. He then informed me that he, Gruber and Brent would be attending the conference as well as part of the keynote.

2.5 hours into the second day keynote, lo and behold my long-time Mac and iOS development friends showed up on a Microsoft stage talking about how Vesper’s sync services are powered by Microsoft Azure.

None of those guys are Windows users. None of them are Windows Phone users either. They’re happily using Microsoft’s cloud services platform to power the backend of their iOS only app.

It was a bit surreal to experience Moscone West with a few other long-time WWDC attendees and compare how similar (and positive) our experiences seemed to be. Outside of there being a DJ spinning house beats above a sea of coding nerds on level 2, we came away impressed.

Showing The Other Side

Kind of excited that @justin and @gruber and @brentsimmons are all doing high-visibility Microsoft stuff. Competition is good.

— Michael Yacavone (@notio) April 4, 2014

If you follow me on Twitter, you were probably pretty tired of seeing me tweet things with hashtag #bldwin (you’re lucky I was kind enough to hash them so you could mute if desired). The reason for the excess tweeting was twofold:

First, I tweet a lot anyway. Second, and more importantly, I know my audience is primarily filled with Mac and iOS developers. We’re all fairly busy people and may not always look up to see what is happening outside of the Apple ecosystem.

Build allowed me three days to immerse myself in technologies that I know almost nothing about. I came away impressed with it too. For all its past faults, the New Microsoft is doing things that are on the cutting edge of technology. Their Rx extensions library is everything I hope ReactiveCocoa could be: a fully functional extension to the core C# language built and maintained by Microsoft. Their unit and integration testing story for Windows Phone is light years beyond what either Apple or Google offer for their respective mobile platforms.

Avoiding Longhorn 2015

John Siracusa has a famous article called Copland 2010 where he talks about Apple’s need to begin looking for a replacement for Objective-C and the Cocoa frameworks before they get to the point where it’s too late and they’re in for several years of hurt much like the transition from Classic Mac OS to OS X.

I still love Objective-C and the Cocoa frameworks, but having worked on Glassboard’s Azure backend and Android app in parallel, I’ve seen a different world outside of the Apple prism. What we have is good, but there’s so much more potential to be great with the emerging and more modern development technologies out there.

With things like C#, the Roslyn compiler/frameworks, and the modern WinRT runtime, it feels like Microsoft is way ahead of Apple in the future looking regard. As a developer, I’m jealous of a lot of the technologies coming out of Microsoft. As a user? They’ve got a long ways to go before I consider using Windows over a Mac.

That said, this is the new Microsoft. They don’t need me to use Windows or Windows Phone as long as I use Microsoft services like Azure, Office 365 and the like.

I can’t believe I’m excited about and interested in working with so many Microsoft technologies. The times are a changin’.

Filed under

The Parts of Your Platform

The simpler devices get, the more complex our jobs as developers becomes it seems.

When I first started my independent developer career way back in the dark ages of 2006, building an app usually meant building a desktop product that persisted data locally. In some cases there was an Internet backed service tied to it, but it wasn’t the norm. This was before Dropbox, people.

If you truly wanted Internet connected services, you built web apps. Using a mix of HTML, CSS and a sprinkling of Javascript you could build web pages that could replace your desktop apps with something that could run on any device and any browser.

Once mobile came on the scene, web apps weren’t as ‘sweet’ a solution as some would have liked us to believe. The pendulum swung back towards native app development, but with the added bonus of being network connected at all times.

For an app that connects to a third-party service such as Dropbox or Twitter, always-on connectivity means implementing a third-party API in your app and using that as the foundation for your data access. It’s a little more work than our desktop days, but certainly not that big of a hassle.

Fast forward to 2014 and you’re starting to see convergence of mobile and those web technologies. Mobile apps from smaller developers are starting to offer online services either as a value add (such as the wonderful Day One app) or as the foundation of the service (such as Glassboard or soon-to-be from Vesper).

Mobile apps requiring their own custom backend data isn’t new for many operations, especially those with a large staff and a bankroll of venture capital money to burn. For the mom-and-pop shops like Second Gear and Q Branch, it’s a whole new world that just became more feasible just recently.

So, what changed?

App Pricing And Expectations

When I released Photos+ last year, one of the biggest sources of feedback I received was “where is the iPad version?” Nevermind that I just spent several months perfecting the iPhone version, consumers expected that the app would be run on all their iOS devices.

Beyond just expecting your app to run on both an iPad and iPhone, users also expect that data to sync effortlessly between those devices.

Implementing that amount of functionality isn’t impossible, but at $2.99 per app or so it becomes really hard to make the economics work in your favor. If you can instead sell a service for a monthly or yearly fee, however, and then give the apps away for free it becomes a bit more feasible to make the economics work. Still difficult, but at least less of a crapshoot.

The Cloud!

Everything is in the magical Cloud now. All your files are on Dropbox. All your photos in Photo Stream. Everything else in Evernote.

Cloud computing has eliminated the need to be a sysadmin and host your own server hardware in favor of renting resources in the cloud. Amazon, Microsoft, and Google are the big three and are all jockeying to lay claim to all the CPU and storage on the web.

Glassboard runs on exclusively Microsoft Azure. All user data is encrypted and stored in Azure Table Storage. Images and videos live in Azure Blob Storage. The actual platform app itself runs on an Azure Cloud Service, which makes scaling as easy as adjusting a few sliders on the Azure web site.

Backend as a Service

Take the cloud computing paradigm, and simplify it even further and you get Backend as a Service. With a BaaS provider such as Parse, Google App Engine, or Azure Mobile Services, you don’t even have to worry about provisioning resources on the cloud. Instead you just import an API wrapper into your mobile app and configure a few cookie cutter options on the BaaS provider’s web site.

These providers make cloud-enabling your product incredibly simple. The tradeoff of using one versus the more traditional ‘cloud’ is that costs rise exponentially much quicker. It’s a tradeoff that many are willing to make, plus competition has made pricing a bit more competitive than it was even just a year ago.

The Parts of a Platform

We’ve accepted that running our own server-side resources is becoming a reality, we should analyze what that really means. And more importantly, understand what is involved.

1. The API

The brain of that powers any cloud-enabled service is its API. It doesn’t matter what language you write it in as long as its secure, stable, and reliable. Glassboard started out as a full C# product, but I’ve been rewriting parts of it in Node where it makes sense.

Most of the time your users won’t see your API firsthand, unless you offer it publicly as a value add to your customers. Whether it’s a public API or not, versioning from the start is always a good idea. You’ll inevitably get to the point where you want to add or change your API’s functionality. By versioning your API from the start, you can ensure that legacy clients aren’t immediately cut off as you improve your product.

If you’re running a marginally successful service on an API, it’s worth your financial and time investment to look into services like New Relic and Runscope. New Relic does magic things to figure out bottlenecks and other slowdowns in your API clients. Runscope is an API monitoring service that lets you test the health of your API as you run a suite of tests against it.

2. The App(s)

Whether its iOS, Android, Windows Phone, or OS X, the app is the nut of any platform. It’s what your consumers will predominantly use to interface with your service and will shape their opinion on it.

This is likely going to be where most of your time is spent, assuming you want to build something that stands out in such a crowded market. There are plenty of hybrid app solutions that can get you on all platforms quickly, but quick doesn’t necessarily mean quality.

Glassboard has native Android and iOS clients. Each one is built using the system-specific APIs and designed to look and behave like a first class citizen on their respective platform. It’s far more work (and cost) than the hybrid approach, but I believe a better app experience in turn leads to a better conversion rate to paying customers of the service.

3. The Management Backend

This is the one most people forget. Once you’ve developed your API and built the app(s) to consume it, you likely have a user base that is going to be emailing in support requests and bug reports. Those requests likely mean you need to look into the data stored on your backend.

You aren’t an animal. Running raw SQL queries from the Terminal is neither safe, nor ideal. You need yet another app for your platform. The only difference is that this one is for internal use only.

The admin portal is the piece that most developers forget about until after they’ve shipped, but it can also be one of the most important part of your product once you reach a level of success. Let’s imagine you outsource your support to a third-party company (I recommend and use AptFolk). Ash and crew are a smart group, but they don’t know the internals of your product or how to connect to your servers. Nor should they need to. By offering a web or mobile app that allows them to look up and adjust account information or whatever else is relevant, you’re making your job easier.

Beyond just support, metrics are essential to measuring success or failure. There are simple vanity metrics that are useful for showing on an app like Status Board:

  • Daily signups
  • Active users
  • [Your Specific Data] created
  • Daily/Weekly/Monthly Revenue

For more advanced metrics, I recommend a third-party provider that specializes in things like customer segmentation, funnels, and other more advanced functionality. I use Localytics, but I’m actively shopping for an alternative. Mixpanel is also a nice service, but gets expensive real quick.

Every Piece Matters

The good news is that even though our jobs as app developers is becoming more all-consuming, the tools that enable us to do this are becoming far easier to use. I couldn’t imagine running my own servers back in 2008, and now I don’t have to. Cloud computing takes care of the heavy lifting and let’s me focus on the product itself.

Just because I don’t have to worry about imaging and provisioning servers doesn’t mean I can slack on other parts of my product’s development cycle. The API, apps, and backend platform are all equally important pieces of the puzzle that defines your product. The app may be the only public facing one, but without the API it doesn’t exist. Without the backend management portal, supporting your user base becomes a nightmare that impedes development.

Treat each piece of your product’s stack like it’s the most important, user facing portion bit. Quality isn’t just mean for the surface.

The Full Stack App Developer

Whenever I look at job boards, I notice that a lot of web development jobs are wanting someone who is a ‘full stack’ web developer. To me, that means someone who can build the front end of the application using HTML, CSS, and Javascript as well as the backend using whatever server-side framework is in there. To top it off, sprinkle in a bit of knowledge on cloud computing.

The ‘full stack’ paradigm is starting to make its way to app development going forward as well. It’s no longer enough to just know how to write code for a single platform. To be truly relevant and valuable you need to have an understanding of API design and implementation and cloud computing as well.

Ignoring the cloud or web services because they are out of your comfort zone is no longer an option. The app economy is shifting. Adapt or die.

Filed under

How do you manage your iOS app dependencies?

This is a question I’ve answered more than a few times the past few months.

Answer: with as few third-party dependencies as possible.

A bit cheeky, yes, but there’s truth in it. As I’ve matured as a professional developer, I’ve learned to understand that a dependency and liability are many times interchangeable.

In general most of the projects I work on have as few third-party dependencies as possible. I do my best to work with what is provided by Apple’s frameworks, as well as my own suite of categories and subclasses I’ve accumulated over my years as a developer.

When something new and shiny comes along that I’m thinking about using, I have a few questions I ask before making a decision.

1. How long would it take me to write my own version of this?

Are we talking about a single class and header file that does something fairly basic that I could churn out in a few hours, or something more feature-filled and complex that is represents weeks or months of work.

Single classes I am more than likely to write on my own. Something heavier like CocoaLumberjack (which is awesome) I am likely to include as a dependency.

2. How well maintained and supported is the codebase?

Is the project actively maintained by a developer, or are we just talking about a code dump that’s just been thrown on GitHub? Is there documentation? At a minimum, is there header docs?

Open source contributors are under no obligation to provide support for their projects, but at the same time, I’m less comfortable basing a major part of my project on something that’s just out there on the web without any direction.

Projects like AFNetworking and ReactiveCocoa come to mind as good, well moderated open source projects.

Sidenote: It bugs me when people look at a codebase that hasn’t been updated in a year and claim it’s been abandoned. Projects can be completed without being considered abandoned.

3. Can I understand the code base enough that I’m comfortable patching/contributing to it?

All software has bugs. Even yours. With a third-party code base that you don’t manage, you are likely going to run into a situation where there are bugs that need to be fixed and patched. How comfortable am I reading and understanding the code base that I am thinking about adding as a dependency? If it’s not comfortable enough that I’d be willing to patch it, I’m may not be willing to include it.

One exception to this is the HockeySDK and PLCrashReporter. I have zero idea how that stuff works because I am not Landon Fuller or Mike Ash. I think they actually speak binary as a first language. Even thought I don’t understand the internals, I depend on Hockey for managing my betas and crash reports. Wonderful service.

4. How much of this code will I actually be using?

A lot of developers have the tendency to instantly import AFNetworking into their project without a second thought. It’s a wonderful resource for the community and something I have used in my own projects. At the same time, it’s a fairly heavy library that does a lot.

If you’re building an API wrapper for a third-party web service, do you really need all that AFNetworking offers or are you just using maybe 10% of its features to accomplish your goal? More importantly, if you are offering the API wrapper for consumption by the open source community, do you really want to force another third-party dependency on them?

With OvershareKit, Jared and I try to err on the side of conservative when it comes to adding external dependencies to the library. As is, it’s a pretty heavy amount of code to ingest in your project. But, most of it is self-contained which we see as a feature, not a bug.

So….about Cocoapods

I have been hesitant to adopt Cocoapods in any of my iOS projects these past few years. I’ve also been pretty vocal about this, but without much explanation.

If you look at any other major platform in play today, they have some sort of dependency management story:

  • Node has npm
  • .Net has NuGet
  • Ruby has Gems
  • Android has Maven and Gradle

Dependency management is admittedly a problem that OS X and iOS have dealt with for years. So, Cocoapods comes along and offers a solution for the problem, but I don’t want to jump on it. Why?

For one, stability and predictability. The dependency systems for every other platform are for all intents and purposes the “official” solution. In some cases such as NuGet, they’re even baked into the IDE. Cocoapods, on the other hand, is developed outside of Apple by the community and hacked into the current Xcode workflows. That’s not to insult the developers of the project. It’s pretty impressive what they’ve made from a technical standpoint. But as cool as a project is, that doesn’t eliminate the inherent risk with using it.

Let’s assume that Apple releases an amazing new Xcode 6 this summer. It has all these amazing features that you absolutely have to use. The tradeoff is that because of so many changes under the hood of Xcode, Cocoapods is now broken and your app is no longer capable of building with the new toolset without a lot of surgery.

On a lesser level, let’s say Cocoapods switches from Ruby based spec files to another format (JSON?). Now I’ve got to spend client time just fixing my build system, which isn’t adding much value to their product.

Are these scenarios this likely to happen? I hover somewhere between ‘maybe’ and ‘probably not’.

Contracting vs Personal Projects

Having described how I analyze third-party dependencies and my thoughts on Cocoapods in general, I will say that I am now using it in Glassboard.

Wait. Didn’t I just say it’s risky to use?

Well, yeah. But dealing with risk is a key part of software development. You have to find your personal threshold and work with it.

In my case, I’m not willing to stake the dependency management of a project I’ve been contracted to build by a client on a third-party platform that generates Xcode workspace and project files on the fly and may prevent the app from building cleanly without a 5+ step setup process. For my own projects, however, I’m much more liberal in my choices.

Let’s say the mythical Xcode 6 build breakage occurs in Glassboard. It will suck, but it’s a problem to resolve in my own product, on my own dime rather than someone else’s.

My personal projects likely also have a longer shelf-live than most client engagements where the codebase evolves over time. Glassboard’s code base is over three years old and is still evolving. Many of my client engagements are to build a shippable version and then move on to the next thing. There’s likely to be a lot of built up bit-rot after a project sits dormant for an extended period of time. Dealing with that rot is part of contracting as much as it is your own projects, but I do my best to limit the amount of rot I put on myself in those client engagements.

I apply the same ‘client vs personal projects’ principle to third-party code dependencies as well. I’ve taken to using the #GlassboardNext codebase as my playground for experimenting with new third-party projects like Cocoapods, ReactiveCocoa, and Mantle even though I can’t imagine a scenario where I’d currently use them a client project (well, maybe Mantle. It’s pretty isolated.)

It’s possible these choices will come to bite me in the ass eventually, but they’re risks I’m willing to take.

I’m assuming this post will get my invitation into the “Old Guy Coders Club” where you hate anything you aren’t used to. I’ll be waiting for my coffee mug and membership card in the mail.

The Auteur Theory

You’re likely sick of hearing about the show “True Detective” by now. Like millions of others, I became engulfed in HBO’s latest 8 hour masterpiece over the last few months. Plenty has been written about the Yellow King, Big Hug Mugs, and Matthew McConaughey’s amazing performance as Rust Cohle.

What I haven’t seen get nearly as much play is how the show is actually created. It wasn’t fully aware to me until the 4th episode’s 6 minute long take scene (Spoilers behind that link). It was riveting the first time I saw it. It was even more amazing when I discovered it was done in a single take.

As I read up on the show I learned that the entire eight episode season was written by a sole writer (show creator Nic Pizzolatto) and directed by a single director (Cary Fukunaga). Traditionally TV shows are helmed by a cast of behind the scenes folks who take turns at writing and directing different episodes. With True Detective, a true auteur theory was allowed to play out on screen.

One writer. One director. Eight hours of the best television I’ve seen in a long time.

The best creative works, whether they be TV shows, books, or apps, are the products of focus and vision. At Apple that was Steve Jobs and Jony Ive. WebOS had Matias Duarte, who has been doing wonders cleaning up the mess that was the Android experience. James Dyson does it for vacuums. I just bought a Dyson and it’s a fantastic product.

As I look at my iPhone I can name the person in charge of the vision for most of the apps on my home screen. Here’s a hint: most aren’t from large corporations that include the marketing folks and bean counters as part of the development process. They are from small development shops run by just a few people who have an idea of what their product should be and how it can impact the world. There are no focus groups or A/B testing. It’s just gut reactions and validating it with user response.

Everyone has a role in the creation of a product (even the bean counters), but having one or two talented people charged with shaping the direction of the product results in something that people actually enjoy using and, more importantly, championing to others.

Who knows? You might even make something that puts a smile on Rust Cohle’s face. OK, maybe not.

The Profitability Test

Last week at Mobile World Congress Nokia unveiled the Nokia X, their first foray into the wild world of Android devices. On the consumer side, the sales pitch has been an affordable phone with all the great Android apps you love, just with Nokia and Microsoft services rather than Google’s. On the developer side, which was the obvious target of announcing this devices at MWC, the pitch was that it should take less than a day to port an Android app from using Google’s services for things like push and in-app purchase to Nokia’s.

On the surface, expanding your product into a new market with minimal effort seems like a great idea. Once you dig a bit deeper, it may not be so easy to justify.

Let’s say you have a product like Glassboard. Its core functionality is wrapped in a server-side component that you manage. The API is the key to everything else. It handles accounts, billing, data access, and all the notifications you need to send out.

The other parts of the Glassboard platform are the client apps. In my case, there are currently three: iOS, Android, and the web. I ran Glassboard’s Android app through the Nokia X Analyzer and had a pretty clean sheet. My biggest issues was replacing Google’s Cloud Messaging with Nokia’s offering.

Here’s where we run into issues. Building a version of Glassboard that uses Nokia’s jars instead of Google Play Services likely isn’t that big of a hassle. The much bigger hassle is then adding support on the server-side to handle the Nokia services.

Now, the “just a day” pitch becomes much harder to justify. Not only do I need to update the Android app, I also now have a slew of C# tests and code to write so that I can pass notifications from Glassboard to Nokia’s servers in additions to Google, Apple, and Sendgrid (our email provider).

Who Is The Market?

Any time I have to add another code path to the API and server components of Glassboard I have to really justify the work that’s involved. There’s usually four things I consider:

  1. Who is the target market?
  2. What’s the current install base?
  3. What’s the potential installed base?
  4. Would you use this thing?

The target market of the Nokia X is what the industry considers “developing nations”. The politically correct term is emerging nations because there’s plenty of room to grow, but the main point is that the Nokia X isn’t going to be on the store shelves in the US, UK, or Germany.

With a brand new platform, the current install base is zero. That’s not necessarily a bad thing as every platform starts from nothing at one point. In many cases, there’s a first movers advantage you can take advantage of.

That first movers advantage depends of course, on the potential installed base. This one was a toss-up for me. On one hand, Nokia is poised to put this in dozens of markets with millions of potential customers at an affordable price. On the other hand, Nokia is about to get sucked up by Microsoft who could snap their fingers and kill this project pretty easily. That’s a big risk.

The final question is more personal than business. I have always built software for myself, so asking if I would use a Nokia X is an important question. I’m curious about the device and would like to give it a shot. Would it be my main Android device? I’m not sure. I marked this one as a “maybe” rather than a hard yes or no.

Can You Make Money?

Once you’ve answered those four questions, you should be able to answer the most important question pretty easily: can you make money on the platform? More importantly, can you make enough money to justify the extra investment of time and resources in supporting it.

With Glassboard, my current belief is that no, I can’t.

Glassboard lives and dies by the amount of people that pay for some sort of premium subscription through the service. Since we have zero outside funding, the amount of users we gain isn’t an important metric. I’m confident that I could add several thousand free customers to Glassboard’s active user base by porting to the Nokia X. I’m much less confident that I can convert a decent percentage of those into folks that would be willing to pay for the service on a monthly or yearly basis.

That’s one of the key differences in running your company as a traditional business. Being on every platform is great if you’re a venture funded startup. If you’re bootstrapping, however, growth isn’t necessarily a good thing unless the financials are there to back it up. You have to analyze each different platform as a liability and justify whether its worth pursuing.

Simplifying Towards Profitability

This isn’t the first time I’ve had to do this sort of liability analysis with Glassboard. When I acquired the service, it was available on two additional platforms: the Kindle Fire and Windows Phone. I made the decision to kill both of these products for many similar reasons that I’ve opted not to tackle a Nokia X version at this time.

In the case of the Kindle Fire, the active user base wasn’t nearly enough to justify the continued investment. None of our premium customers were using the Fire version and that version also wasn’t equipped with any existing in-app purchase functionality, which meant I’d need to write more code myself.

That decision turned out to be the right one. I believe we’ve gotten maybe two total complaints about pulling the Fire version in the three months since it occurred.

The Windows Phone version of Glassboard was similar to the Fire in some aspects. The active user base wasn’t anywhere near the iOS or Android apps, but a decent chunk of the server components were already there. I’d have just need to add support for in-app purchasing to start upselling users to premium, which wouldn’t have been that much effort.

Ultimately the decision to kill the Windows Phone version came down to quality. It was not a good app. Given the small user base and the amount of time I felt it would take to make it an app I would be proud to showcase, pulling it from the shelves was the right move.

We get a few requests for a Windows Phone version a week still, so I believe there is some sort of market there. Whether they’re willing to convert to paid customers remains up in the air.

Focus on the Financials

As enthusiasts, it’s hard to avoid to allure of the new shiny. Updating an years old app to look and feel like an iOS 7 app makes sense as someone who loves to play with the latest stuff. Spending those days or weeks doing that conversion may not make financial sense if the product isn’t making enough money to justify the development time.

The same can be said for services such as Glassboard, and perhaps at an even higher level. With a freemium model, you have to think about every move in terms of its ability to convert free customers to paying ones. Free users are loss-leaders. If you have too many of those loss-leaders, you may have a popular product, but you don’t have a successful business.