Tuesday, October 27, 2015

Shouldn't we aspire to optimize [code] everywhere?

[Searching through my long list of partially finished blog posts I found this. I think the principles are still relevant so posting it now.]

Last weekA [long] while ago I wrote a post about how I've seen a change in the places where it's important to write optimized code.
One of the responses I got was that "shouldn't we aspire to optimize [code] everywhere?"
This strikes me as the result of a very developer/code focused reasoning and is, I feel, a topic worth discussing further.

Let's start by looking at this from a purely developers perspective. By which I mean we're only thinking about the code and there are no other considerations.

Given no other constraints then it may be fine to spend indefinite amounts of time on optimizing code. That is, getting it to run faster or use less memory or any other attribute by which we may measure code.
But to what end?
What benefit does such optimization bring? We may be able to say it's better but if that only benefits our developer mentality then is it worth it?

For most of the time there are external constraints when writing code. If writing for someone else (say as part of your job) there's probably a time and cost constraint. Either code must be written by a certain date/time or there is only so much budget to pay for the development effort.

Even if we are writing code for our own use then there will be a point when it's "good enough" to use. Yes we might be able to make it better than that but should we? If we want to keep making it better then at what point do you stop? If it's theoretically possible to make it faster do you put off shipping?

But what are we optimizing for in the first place?
Because we can?
Or because it will provide a measurable benefit?

On .net rocks show #1003 there was discussion about the value of performance improvements and the following claim:
“The threshold of perception is 2%. The threshold of meaning is 20%”
This means that if you can’t make it 20% better (faster) then the user won’t care.

Do you really need to spend a lot of time optimizing your code for only a small performance improvement? Probably not.
But yes, also a difficult discussion to have when you have to optimize performance to hit some arbitrarily defined number. (If you've ever had a project where someone has decided that X must be done in 300 milliseconds and you're busy trying to get it down from 305 then you have my sympathies.)

Yes, performance is a feature and yes you should make things as good as you can. Just remember to balance them against being usable and good enough.

Friday, October 23, 2015

I don't need to know about your errors


Look at these screenshots I captured today. (from public, released apps - if you really care which apps you should be able to make an educated guess.)
Disappointing isn't it?

Disappointing for at least two reasons:
1. There was an error
2. The app developer thought the best thing to do was put the exception details on the screen.

  • As the user of these app what am I supposed to do with this?
  • How does seeing this help me do what I was trying to do?
  • What are you trying to achieve by displaying this information?
  • Why no helpful error message?
  • Why no instructions on what to do now this has occurred?
  • Has this information been reported back to you so the app can be updated to appropriately account for this scenario in future?
  • Should I forward this to the app developer? If so, how?
  • Would additional information about what I was doing when this happened be useful to the developer? And if so how should I provide it?
  • Is it safe to keep using the app as is? Should I restart it? Or come back later? Or maybe wait for an update?
  • Are the developers already aware of this issue? Has it been reported before and they know about it? Or is this a new thing?
  • When can I expect this to be fixed? If ever?
  • and many more questions....but hopefully you get the idea.

You wouldn't do this in your app. Would you?

Thursday, October 22, 2015

Stop frustrating me with your SPA web apps

tl:dr; it's about the person using it, not the technology.

This will get ranty. I understand if you want to skip this ;)


Congratulations, you've built a fancy new, all the rage, website using the SPA (Single Page App) style where everything is shown on a single page with all the content swapped in/out and loaded as needed.
Good for you. You've done something fancy with technology.

How is someone supposed to link to a specific piece of content? 
The way everyone has always done this is by grabbing the URI from the address bar. You are modifying the address bar (at the very least by changing fragments and allowing them to be used as direct links) when you change what's displayed on the screen, right?
No, having a share link somewhere on the page isn't enough. Especially if that only loads a popup containing the link.

What happens when someone scrolls down through a large amount of content and then loads a small amount?
So, I'm on a page with a lot of content. I scroll down so I can see all that content and then click a link to see something else but the screen goes blank. What happened? A bug? Is there no content? Is it a link to a blank page? Is it still loading?
No. The large amount of content was replaced with a small amount but the height of the page wasn't adjusted so the content is at the top but I'm still looking at the bottom. Is it really too hard for you to adjust the total height of the page or just automatically scroll me up so I can actually see the content I just clicked on?
Yes, I know that scrolling up isn't too hard but it's not a case of just scrolling up. It's: look at the page; wonder if it's still loading; decide it's not; scroll up to see if something is there; be frustrated that the website made something that should have been trivially simple (show the content for the link I click on) much harder than it needed to be.
This also applies to paged lists too: scroll down a list; click on "next page"; list updates but I'm left looking at the bottom of the list (which is now the bottom of the second/next page); have a sad face; scroll back up the list, all the which thinking about alternative apps/sites I could use in the future.

Yes, individually these are just minor things but I'm starting to see them more and more. If your site does this then you're breaking expectations about how to work with (use) websites

Wednesday, October 21, 2015

The user group I organise now has a code of conduct

(Well actually I added it last week.)

Much has been said over the last year or so about codes of conduct (CoC) at conferences and hackathons. I've not heard anyone else talk about them with regard to meetups/user groups but, as a group organiser, they've been on my mind for a long time. Should we have one? Shouldn't we? Do we really need one? What if we do? What if we don't?
I see user group events as being no different to mini-conferences so that seems like a good reason to have this discussion.

As the title suggests we do now have one and I've written about why on the group's website but I thought it might be worth sharing here too.

Ultimately it came down to two reasons:
1. The people who aren't already coming
2. Potential speakers.

The people who aren't already coming.
We haven't had any issues with the people who are coming. (I know that some people assume that CoCs only get created in response to issues. We haven't had any and hope we don't.) This is about people who aren't coming and don't know what to expect if they do.
As a group we're happy for anyone to attend who is interested in the subject (of creating apps). What matters is your interest in the subject. What doesn't matter is where you're from, what you look like or how you identify yourself. In fact having people attend who have a broad range of ideas, experiences and backgrounds is a great thing as those factors can bring new perspectives. It's the opportunity to meet, hear from and exchange experiences and ideas that meeting in person provides. If we were all the same it would be very boring. The CoC just says that we acknowledge differences as a good thing and it's not acceptable to discriminate or act inappropriately in reference to those differences. We know it can be intimidating to go somewhere for the first time when you know you may be different from the other people there. We just want to say that we know that can be the case and we want you to feel welcome if you do come.

Potential speakers.
Hearing speakers, from other events, start to say that they won't speak at events that don't have a CoC could also have been potentially limiting. They don't want to be involved with communities that aren't addressing this potential issue.

If you're interested you can see it at http://windowsapps.london/conduct/

If you've got an opinion on this I'd love to hear it.

Tuesday, October 20, 2015

How much would you pay to get another user of your app?

Once you've built an app it's perfectly understandable that you want as many users for that app as possible. But how do you get them?
I regularly hear developers complain that they are disappointed and frustrated that people aren't just finding their app (and installing it) or they're upset that the store isn't promoting their app.

One of the common approaches to user acquisition is advertising. I find that it's common, particularly amongst those with a development background, to underestimate the cost of advertising and have unrealistic expectations about what they can pay to acquire new users.
"$0.10 per new user is far more than I want to be paying" - A developer
To get a feel for what other companies/developers are willing to pay for a new user, I looked at 50 randomly selected campaigns for both iOS & Android from AdDeals and plotted it in this diagram:
(Yes, it's a box-and-whisker diagram. And, no I haven't made one of these since I was in school.)

It roughly tallies with Cost Per Install (CPI) data from Fiksu from last year.

That's an average of between $1.00 and $1.50 per new install.
Yes these figures are for Android and iOS - there just isn't enough Windows data out there that I could. I expect it to be roughly the same situation there though. Sorry if that's what you want. Or if you know of some I'd love to hear it.

So what?

So, consider how realistic your expected figures for what you'll spend to get new users are.

You may be competing for users against people who are prepared to pay. And those who are prepared to pay more will get more ad space.

The above AdDeals figures are based on "non-incentivized" installs. This means that the apps can't offer benefits to users of an app for installing another.
Why so?
Well, would you want someone to install your app just to get a benefit in another app. If that's why they installed your app do you really think they'd become regular users?
Surely you want people to install your app because they want to use it.

Having the people who install your app actually use it is especially important if you're paying for the user acquisition. After all, if people don't use the app how will you monetise their use and recoup the cost you paid for the acquisition?

Why such a range in the amounts above?
Because different apps will be able to earn more from each user. If a user of an app will typically earn the app's creators $9 in profit it's worth spending more to get that user than an app where users typically only earn the owner $1. It's simple economics.

But what if you can't afford or do want to pay for advertising?
Well then you need to consider other ways of attracting new users. Maybe you could consider cross-promotion. ;)

Tuesday, October 13, 2015

The problem with smart watches (and smart bands)

As more and more functionality moves to the mini computers we wear on our wrists and people talk about them replacing the computers we carry in our pockets (phones) there's a big drawback to be aware of.

Apple Watch and Microsoft Band on wrist

Interacting with a device on your wrist requires you to use the other hand.
I've seen a few experiments where devices on the wrist can detect responses to notifications on the wrist by specific gestures and movements with the hand but nothing that can let me browse content or initialize an action. While I expect lots of people to end up experimenting with this in future, I'm not expecting anything amazing any time soon.

The device in my pocket? I can take that out and use it (well the vast majority of functionality) with just one hand.

This matters because there are often times when it's not always possible to use both hands. Sometimes it's just more convenient to only use one.

Yes, some interesting things are happening, and will continue to happen, with wrist worn computers. Just don't expect them to replace the ones in your pocket for quite a while yet.