Featured App: NodeDroid
BuildMobile interviews Bruce Cooper, and takes a backstage tour of the development process for an Android App called NodeDroid. In this tour we cover revenue models, compare the state of Android and iOS development today, and dive deeper into some of the specific code challenges presented. We also receive our first tip on development soundtracks.
BuildMobile: Hello Bruce. So, for the benefit of the readers, could you briefly tell us who you are and what you do.
Bruce Cooper: I’m a pretty nerdy guy. I’ve always been into programming, and learning about how to do stuff. I work as an IT consultant, and have been working in the industry for over 15 years, but that doesn’t really allow me to play with all the technologies I like (most corporations are very conservative) so I do side projects as well.
Programming for mobiles is one of the side projects I get into, although I have done a bit of mobile development for my job as well. I’ve worked with iOS, the Mobile Web (HTML5, CSS etc.) and Android. At the moment, Android is my favourite, but that’s because I’ve got an Android phone.
BuildMobile: So, what is NodeDroid?
Bruce Cooper: NodeDroid was my learner app for Android. I had just bought a shiny new phone and wanted to learn what made it tick. I’d already worked out iOS, and wanted to compare the two. The best way to motivate myself to finish something was to make it something I would use myself, so I had a look at what gaps there were in my app selection. At the time, there weren’t any good usage meters for Android, so that’s what I settled on. It allowed me to make sure I didn’t go over my data or phone usage for my phone provider (Optus) or my home internet connection.
I also wanted to provide something that other people could use, so I made sure I put enough effort into making it properly distributable on the Android Market.
BuildMobile: How can you discern if there is a need for an App and what thoughts should go into a revenue model, if there is one?
Bruce Cooper: That’s probably the hardest question anyone ever asks when going into app development. There’s heaps of people out there that have said “Wow, the app store’s a goldmine. I’m going to get on this”. Reality is a bit harder. Knowing what will work and what won’t is just as hard as it is for any other business. Perhaps more so, because there’s so much competition.
Just look at how much duplication there is out there in the app market. I’ve got a friend who sends me ideas for apps every now and then. In almost every circumstance, somebody already has something that does it, and I just send him the link back. I think there’s more to success than just having an app that does something too. In order to be successful, it has to do something well.
Especially if you want people to pay for it. In this circumstance, I wasn’t trying to make money out of NodeDroid. I just wanted something to cut my teeth on. Having said that, I didn’t want to release something half-baked. It’s got my name on it after all.
Revenue is hard. The current thinking is that the “freemium” model seems to work the best. The idea is that you give basic features away, and then charge for the extras. That works well with an advertising-led model as well.
I added advertising to my application, not because I thought it’d make a lot of money, but just because I wanted to see how it all worked. I ended up making a few bucks, but certainly not enough to pay the bills.
In the end, I decided to open source my application. I did this because I want people to help me make it more successful, not to make money off it.
One revenue model that I’ve heard has been successful has been a “volume” approach. I think there’s some dev houses out there that are turning out app after app after app, each of which they only charge $0.99 for. Each one is really, really simple so they can turn it around quickly. Each app doesn’t really bring in enough, but put together you can make a living.
BuildMobile: How hard is it to get up to speed with Android? What is the state of the developer docs, and are they your primary resource?
Bruce Cooper: For me, it was very easy to program for Android. I’m a Java developer, and the vast majority of the standard Java SDK is present for Android. You can also use most 3rd party libraries. In the end, all I had to learn was the Application framework (which is very well thought out, by the way) and I was up to speed.
It was harder for iOS. I had to learn a new language, and I also had to look after memory management myself. The GUI builder for iOS is heaps better than the one for Android, but other than that, I found the development experience much better in Android.
There is a lot of documentation for iOS, and a lot of articles, possibly too much and at too superficial a level. It often took me some time to find the technical information I was after. The Android documents are a lot more sparse. It just has the information that you need to get the job done.
I suspect that a beginner programmer would have an easier time with the iOS docs than Android, but for me, I prefer it the other way around. I want to understand what I’m doing, and quite often iOS documentation seems to blindly preach solution rather than an understanding of the platform. This becomes a magic incantation and the spell-caster doesn’t understand the workings that underpin what made it happen. Android appears to be much more transparent in explaining how things work.
A less experienced developer might prefer to just do it “the way”, but if you want to do something more complex or slightly off the beaten track, then you need that under the hood knowledge. I should also point out there are a lot more Java developers in the world than there are Objective-C developers.
BuildMobile: What feature would you like to see added to the platform?
Bruce Cooper: Wouldn’t it be nice to write a mobile app in Ruby? As an example, screen scraping for NodeDroid is painful. There are regular expressions all over the place, and Java doesn’t have regular expressions as a native first class object. Ruby does, plus it’s better at text manipulation.
I have rewritten the screen scraping component for the Optus parser in Ruby, it’s more readable and about third of its original size (in lines of code). It’d be great to include that in the NodeDroid application.
There’s a project called Ruboto that aims to allow you to do just that. It has some shortfalls at the moment, but it is something to keep an eye on. Apple forbids the use of scripting languages and 3rd party frameworks.
I think that the Android SDK is really well designed, and it allows a developer to do a lot more than an equivalent iOS developer. In particular, the view hierarchy and the way that you can use views to get applications to collaborate is near-perfect.
BuildMobile: What was the most challenging NodeDroid feature to build?
Bruce Cooper: The hardest part to develop was the efficient screen scraping of the Optus web site. Screen scraping is complicated at the best of times, but using traditional methods (parsing the DOM and then using XPath) proved to be too costly, both in CPU and memory usage. In the end, I used a lot of regular expressions to get it going, which works but is much more fragile.
There were some aspects of the UI that proved difficult as well. I had assumed when I started, that implementing page screen swipes would be trivial. It didn’t turn out that way and there weren’t any examples of how to do it. I ended up looking at the source code of ScrollPanel to work out how to do it. That’s one advantage of an open source framework right there! I shouldn’t have had to go into the source code, but it was there when I needed it.
BuildMobile: How did you solve it, and did you find the relevant documentation afterwards?
Bruce Cooper: The standard scroll panel didn’t have a “snap to page” function built into it. So I wrote a subclass that listened to touch events, and when it detected a “touch up” event, worked out which page it should be on then issued a second scroll command to go to the correct location that corresponded to that page.
In the end, it is a fairly simple solution and only required 100 lines of code. It took a while to work out how to do it though. No, there was nothing in the docs about it as “snap to page” isn’t a standard feature. It’s something that I had to add in.
Now obviously this is a pretty standard feature, and each app has to implement it itself. Perhaps Google will add it in a future release.
BuildMobile: Who or what inspires you in mobile development?
Bruce Cooper: I love my mobile phone. I like writing stuff that I use. I’m motivated to improve it because I’m dogfooding it (using it myself). If I was doing this to make money, I would take a different approach.
Most app developers out there are writing for themselves. It’s a cluttered market. We (developers) need to understand that we are not the majority of the market. Normal people want something that’s simple, concise, and gives them information thats relevant to them. That’s probably something completely different to what a nerd wants. This is of course true of all development, not just mobiles, but mobiles have a much broader user base than other applications.
BuildMobile: What is your development setup?
Bruce Cooper: I’ve got a 13“ Macbook pro that I’ve packed to the gills with as much RAM as I can get in it, which I plug into a dock (that’s right, you can have a docking station for your Mac) and a 24” Dell LCD.
I develop using Eclipse, and occasionally Vim if I want to go old school. Source control is done through Git, and that’s about it. One of the nice things about Android is that you can develop on whatever you want: Windows, Linux or OS X.
BuildMobile: What is your soundtrack for coding Android?
Bruce Cooper: Good question! I tend to be an indie-pop kinda guy. I need to be careful though as I have a tendency to dance around the room with a glass of red in my hand rather than code if it’s too good :)
Today, I listened to Snowman’s latest and final album Absence. And the Shins.
BuildMobile: Bruce, thank you very much for your time. I have no doubt your insights will prove invaluable to the readers. Thank you for sharing. Any final thoughts?
Bruce Cooper: I wrote NodeDroid as an experiment and a learning exercise. I’m very happy with the way things went, and I hope I managed to make something useful for people at the same time. At the moment, it is only useful for Optus and Internode users, but I’d love to add other providers if people are willing to collaborate with me. Get in touch with @brucejcooper on Twitter if you’re interested.