Glenn Stephens
Musings on Mobile, BPM, AJAX and design

One of the interesting things about being a developer is that you get really good at the development tool that you use every day. For me that’s Xamarin Studio and occasionally Visual Studio when I’m doing Windows or writing the other part of the full stack.

But the reality is that I think other tools do such amazing things so I thought I’d share the tools that I enjoy using. These are my personal preferences and I’ll add a justification or two on why I use them.

Here goes:

Sketch: You need to deal with Graphics in your apps and the reality is that you want them to look as professional as possible. Sketch allows you to add your content in and manage it, resize it. I’ve made some iOS and tvOS apps lately and I find it amazing simple to use and it isn’t Photoshop expensive.

iStockPhoto: Speaking of graphics, I like using quality art where possible, iStockPhoto.com is really nice and you can often find icons or graphics that are done by a single artist to give your app a unified feeling as you use it. If you’re not a graphic designer, then subtle changes to graphics you can make an amazing difference to your application.

Jazz Hands: Such a great animation component. Do you want to create a kick-ass introduction screen, then this is the way to do it. Thanks to Xamarin MVP Ryan Davis (who has an amazing designer-like brain) for showing me this; its really an awesome feature and you don’t even need to use its full features to get amazing results. I like the Alpha and Frame based animations and it comes out amazing. It adds a significant wow factor.

Divvy: If you’re on a single screen and you want to work with multiple apps, then this can partition your screen so things fit exactly where you want them. I love this tool

PaintCode: If you need to create custom controls you can use this to create some amazing effects. Often I’ll use this on a UITableViewCell to create a custom cell type. It’s so simple when you create the design you want and paste the code into the overriden OnPaint method of the cell.

Continuous: Ok, I can’t even express how awesome this tool is. Frank Kruger makes amazing next level stuff period. This gives you the ability to live code directly from Xamarin Studio so you don’t have to waste your time on the build/run cycle. Its such as effective tool you can get through your code so much quicker. On my MacMini that I use as backup machine which doesn’t have SSD it has changed that machine to a productivity beast.

Got a suggestion for an awesome tool, feel free to send through to @glenntstephens

I’m really loving using Xamarin.Forms. It’s a great framework for building data-centric apps and you can get a lot of work from it, it has an elegant API and targets multiple platforms natively.

If you are using it in a code-centric manner on Visual Studio with Resharper, you may want to use my templates which will help you find will help you do the typical things a little quicker.

You can find the details at: https://github.com/glennstephens/xfTemplates

Enjoy

I’m doing some work right now writing some code to check what happens when clients connect. Many times we need to connect to a service, but the reality in the mobile world is that mobile connections don’t work. So what do you do?

My favorite thing to do in this case is to declare a base class that defines how you will connect to the service and then write subclass this class to have failure classes. So I may have a class that defines the connection

public class BaseRemoteService

{

public abstract string[] GetCustomerNames();

}

and then have custom implementations of this interface such as

public class AlwaysFailsService : BaseRemoteService

{

public override string[] GetCustomerNames ()

{

throw new ApplicationException(deliberatly failing”);

}

}

and then have a production service

public class AlwaysFailsService : BaseRemoteService

{

public override string[] GetCustomerNames ()

{

throw new ApplicationException(deliberatly failing”);

}

}

It’s basically a mocking mechanism, but I have found it for this mechanism really reliable for testing applications and how they should behave under disputable network connections.

I’ll be speaking at CodeRage 8 next week and for part of my talk I’ll be discussing searching on Geographical locations. My demos will be using Microsoft SQL Server, but in reality other databases could just as easily be used.

For other databases you could use one of the following

 

Looking through my phone yesterday, I found my notes of the Steve Jobs biography and considering the movie comes out here in Australia today it might be a good time to put in online since it was written in November 2011. The thoughts here are someone coming from a tech background and while it partly reads like a review, its my internal notes on how it applies to the design.

Notes on the Jobs book (written November 2011)

I’ve just finished reading Steve Jobs autobiography. An more than interesting and challenging read. I believe that from reading the book that I have had a few aspects of cognitive dissidence, that is that it probably just re-affirms my world view on what I think about on certain topics.

Steve is an interesting fellow, brilliant certainly, but interesting. Some of his thinking is evolutionary relating to the intersection of technology and design and downright stupid when it comes on certain aspects such as how to be decent to your fellow man and diets and lifestyle choices that even the Chaser team would give Steve Jobs the ‘nutjob of the week’ award to. His decision to not take doctors advice when first presented with cancer and be his own doctor and fix himself with a vegan diet and fasting was just dumb and in the end cost him the ability to live. He had early detection, but didn’t do the right thing. This will be my new definition of what to say when someone says ‘knowledge is power’; No the ‘application of knowledge is power.’ I would like to extend that to ‘the application of correct knowledge is power’. But these were his life decisions that he made on his own. Reading you gain the understanding of where Jobs’ single mindedness worked for him as well as against him. When it came to developing products, this was certainly the case.

Product design is hard. I don’t care if it is a complex coffee machine, a pair of thongs or a children’s book. Huge amounts of time goes into these products and their creators deserve our respects for getting something out there. In many cases these products are adequate and some so-so, and it is rare for people to get products right. Steve Jobs was a master of making great products for people. This requires a lot of skills if an individual is doing it themselves, or for teams co-ordinating the right efforts. It requires lots of knowledge on how products work in their operational context, goals of individuals, cognitive psychology, industrial design to name a few. I have heard expressions when people ask about products that they don’t like with responses such as ‘shit software is often better than no software at all’. Steve Jobs didn’t tolerate shit, in fact his default response which was repeated throughout the book was if there was something he didn’t like he would just say ‘thats shit’. I wonder how many managers and executives are going to try out that catchphrase over the next few years just to emulate Jobs. If you hear a manager say something is shit, ask them if they have read Steve Jobs’ autobiography and if they have that conversation may be a managerial fad.

Back to design, it is hard work. There are few people that I know of that take design seriously who understand the nuances of how it links together. A red haired gent at my last contract I worked at in Sydney got it, and a few people I know on the fringes that understand how design works, but in the majority of cases it is a guess of how the design should work for them and these were educational guesses. Sometimes people say they are good designers but they may just have gotten to that point via evolution through customer feedback and market knowledge over time. I have designed applications in the past that have been pitted against four or five competitors and won because of the user experience. My current product is received well and people can use it and get what they need out of it. Reading Jobs biography the reason I think these products work is that I have applied the same Steve Jobs/Apple method of design. Make lots of alternatives, pick the best one, be willing to change it if you realize it is not right. My product developments were done with pencil in paper, sketched, developed, tested, reworked if needed all the while aligning the constrains of cognitive psychology and my sense of design.

The product comes first and profit will come as a result of a good product. And focus. Don’t do too many products and be willing to kill some products off if the don’t work. I have seen examples where products which are what I will call the ‘product love child’ is so emotionally attached to the founding member that they aren’t killed off when they should be. Jobs understood this and applying solid focus helped the company to no end. Think of all the great products that you know. For me it is companies like Bose, Apple, 37signals, Ikea and others, but I like these companies mainly for either magic, design of the combination of the two. I remember being in a Myers store in Brisbane playing with the iTouch for the first time and going wow, this is so cool. Until I touched it thought it was junk and or/hype. I knew that Apple got it right with the design and I was hooked. Likewise earlier in the year I visited a Bose store at the request of a friend and listened to a sound system that was truly unbelievable. If I could have got holograms around me I would have been on the holodeck in some Star Trek thing the sounds quality was that good and real. It was a truly magic moment and probably the only once since using the iTouch all those years ago.

Apple was able to create these magic moments. Their music players are near seemless. I started with a shuffle, and then went iPod nano, iTouch and then iPhone (3G then 4). IN each case they were magical. My father is quite amazed at what a single device can do. At a recent event we used it to find the venue with a GPS nav app, used the flash as a flashlight, looked up the results of some gambling event for my uncle and did a video call to a relative. It is pretty magical what they have built and it is quite impressive.

There is magic in product design. It is hard to do, hard for many to quantify, hard to put it in a budget line item.

I’ve done particularly well with my App Store submissions. I’ve only received one rejection and that was really due to Apple not liking the subscription model I’ve used. That wasn’t a hassle as the change was relatively easy to correct.

But right now I’ve got an App that I’m nearly at the point of submission that might just get rejected. I’ve developed counter arguments for all the things Apple may request, but its definatly in the Gray Area as if Apple will allow it or not. I’ll submit the App in the next two weeks, but keep you updated. If it gets rejected then I’m not really fussed as I use it as a personal tool, but I am hopeful that it will get accepted.

I’ll fill you in the details as it gets closer. I’d be curious to hear from anyone who has played in the area of App submission.

I’m wondering how much Windows work I should be doing. Many of the solutions that I work on tend to be very end-to-end, that is there is a combination of clients and server code. The clients are migrating more towards web and mobile. Most of the server side work I do is either C# or Delphi which are great platforms for server-based system and it often just depends on what I am integrating with. I can probably still do this work within a VM, but it is worthwhile knowing.

But many of my projects are green-field ones where I get to pick the technology stack and more and more I am thinking about moving away from Windows as a development tool, mainly because I am becoming overly frustrated with the baggage that comes along with it. I’m writing this at the moment while my computer restarts because some shitty update tool decided that it should restart the computer while I was in the next room because it thinks that an update to its software is more important than what I think my computer should be doing at that given time. I just don’t get this garbage on a Mac. I get time working getting into flow – that is good.

These things are not isolated. I get crashes, excessive update requests for software and virus software blocking legitimate activity and having to mess around with these things.

Another thing is that the laptops that I tend to get don’t last either. My Dell at the moment only lasts for about 50 minutes on a charge and that is with Battery Saving options all set to maximise time. I think I enjoy the Mac more because I can take it with me for a day without having to charge it more. Its more productive if I can work for 6-7 hours on a charge rather than 1-1.5 hours, especially if I can’t find a power point.

I’m not a zealot, and I’m not tied to one camp that X is better than Y. For me these things are discussions that don’t lead to anywhere positive. Its like Language or Cola wars; They are an opinion and an opinion that is valid for you. Just expressing my frustration because I think there are many of us who have similar issues.

 

An interesting question I get asked a lot by people is “Should I write for iPhone or Android?”. Twelve months ago my advice was to target iPhone first and then target the Android platform if you are making a consumer app. The main reason I had was purely the fact that every now and again I would ask people how many apps they would buy or download.

For Android users the answer was typically that they would not download many apps at all and if they did they would download free ones only. iPhone/iPad users on the other hand would answer that they would spend money on apps more frequently and it wasn’t a bother. Most apps are considered coffee money for iPhone/iPad users so you can make a trivial purchase. After speaking with a collegue who runs a similar business to me on a flight to the US a couple of years ago he mentioned that he noticed an interesting trend in mobile purchasing which was similar to the following:

  • iPad users are normally willing to pay a premium for an app
  • iPhone users will tend to pay, but will want to pay less
  • iTouch users don’t tend to pay as much as they are normally kids

So it was interesting to see this article that validated some of my thinking along these lines.

CHART OF THE DAY: iOS Users Earn More And Spend More Than Those On Android
Read more: http://www.businessinsider.com/chart-of-the-day-ios-android-spenders-2013-1#ixzz2HZksp0RA

Not only do iOS users spend more on apps, they typically make more money as well. This validates another assumption I had is that Android use was not always intentional and that people are buying these devices because these are the default phones. My wife for example used a Sony Expedia Mini for two years because it was a phone. She didn’t like the phone, but when I upgraded my iPhone she got my old phone (although I confiscate it for testing when needed) and she does far more on the iPhone than she ever did on the Android. Android still has a long way to go to truly get to the ease of use that Android has. Many people are saying that it is getting better, but these people tend to be technical people. For non-technical folk its only getting a little better. One of the fundamental reasons that iPhone was so successful is that it created a market segment of people who will use this technology but don’t want to touch a computer. New people who didn’t want to connect before are connecting and liking it.

So to answer the question, I would target iPhone first, generate some money and then target Android. I’ve just done an app with this flow (iPhone then Android) and it has worked quite well. Because of the methodology I use I was able to port the Android version of the App to iPhone within a couple of weeks.

I‘ve had an interesting last week. After doing some work to tweak an apps implementation, I’ve begun work on the Android port of the same app. Much of my Android work has been data apps for internal clients, but this one requires a bit more finesse.

If you design an app using the stock-standard controls for iOS, you actually end up with a pretty decent looking app. It won’t be art in the traditional sense, but it will work, people will look at it go ‘thats fine – I can use that’. Android on the other hand looks like it was drawn with a paper stencil. There is a lot of work to get it to look good.

Some days to finish an app, coding is not the answer, Photoshop is.

I’ve discussed this in some of my talks, but app reviews are crazy things. People can be so polarised in their views. For example, one of the Apps I really like is Sparrow the email app for iOS. Its well designed and elegant, but I’ve seen someone give it one star because it didn’t support the iPhones larger screen. They were completely dismissing the aspects that the app delivers a very efficient way of checking email.

I’ve seen this with my own apps where people trivialise things also. I’ve had five star reviews for my apps and then one star reviews for something my app didn’t have. I can see now why actors don’t read their own reviews. For me I’ll read the reviews when I schedule the app to be updated as it does affect you. If there is truly something wrong with the app people let you know.

Check out the Comments section of the following oatmeal cartoon and you’ll see what I mean.

http://theoatmeal.com/comics/making_things

The review process for the devices really changes the way you have conversations with your customers.