I don’t understand (better: I don’t want to understand) why it is ok for a company to violate laws and regulations for more than ten years and only get fined a tiny amount which they gain tenfold in less than a day. This is not ok. Why do companies do that? Why can’t governments actually fine them? Why doesn’t Google have to pay a 50 billion Euro penalty? If a company – any! company – has more money than probably the majority of countries in the world, they have a responsibility. And that‘s not a responsibility for their „shareholders“. I also don’t understand why their customers and users don’t give a crap about it. Why do they support these companies and their horrible public behavior? Sometimes I question how I can continue to work in this industry. I continue to value more and more to work for a company that’s actually trying to act well and do good things. There’s probably not everything coated in gold as well. But at the very least it’s not evil like Google, Facebook et.al.

Dreaming of Xcode on the iPad

Let’s imagine the iPad was a device for real work. You know… stuff that professionals do. Not only media consumption for fun and stuff. That’s what we’re all waiting for isn’t it?

I think we’re well past that point. Not only are there lots and lots of people that do actual work on their iPad – people that are real professionals. There are less and less tasks that an iPad isn‘t capable of. Yes, there are shortcomings in some areas – I really struggle with the fussiness of copying and pasting things and I seem to never get used to how the Shortcuts app works – but there‘s nothing that can‘t be fixed in the future. There‘s probably not much that can‘t at least be worked around with some tricks even now already. In the end it probably all comes down to what people are accustomed to, how they are used to work and what their preferences are for how they accomplish their work. Even if some tasks might seem cumbersome, it’s still a question of how someone is willing to accept these tradeoffs for other things, that the iPad might do better or are more fun for them. There has been enough talking and writing about this topic in the last couple of weeks before and after the new iPads were released. I think it‘s unfair to dismiss the ability of the iPad to do real tasks on and to belittle the work of people that run their business or core parts of it on iOS. I for one are still undecided on whether this style of work is really for me. I think it is. But I need more time to really try it out.

I was lucky enough to get my hands on a brand new 12.9” iPad Pro last week. Without joking, this might well be the best computer I ever used. I didn’t really have a deeper look at the iPad until a couple of months ago when I tried how it feels like trying to do some actual work on my old iPad Air. I already saw that there are a lot of tasks in my daily work that I could do on it, but it still felt quite cumbersome most of the time, so I lost it and unknowingly went back to the Mac again. Then came the 12.9” iPad and I thought: “Oh well, let’s try it out for a while and see what this feels like. But I will never really use this. It’s just too darn huge.” Well… I am barely able to put this thing down when I sit in front of it. I really love it. iOS is the same as it was a couple of months ago, but the size is the real deal for me. This suddenly feels like a real computer. Together with the smart keyboard folio and the pencil, this thing is not only gorgeous and blazingly fast. I can really work on that thing.

There are still jobs I can’t do with it though. I’m an iOS and Mac developer for the most part of my work life and that’s one of the few things iOS can’t do yet. The iPad could probably run most development projects with the blink of an eye, comparing the benchmarks to ”real” computers. But there is no Xcode available for iOS. I would run across the streets screaming if this would become available at WWDC next summer. This would be the turning point for me. I can do most of my daily work on this iPad. In fact, for the last couple of days that’s what I did. I’m a corporate bee, so besides sitting in front of Xcode I spend a lot of time writing eMails, collaborating in Slack, editing Word documents or looking at Powerpoint presentations. I really can see myself using the iPad as my main device, falling back to the Macbook only for development stuff in Xcode or related tasks where I need a Terminal or specific tools. Everything else? Should be manageable on the iPad. At least at the moment this is a lot of fun.

Now, what about Xcode on the iPad? Is this impossible?

I don’t think so! The hardware can do it. And if it’s not the fastest development machine yet? Oh well… there’s still the Mac for more speed, and I doubt that this is actually the case anymore. But please Apple, let me do my coding on an iPad! I’m willing to take a hit in compile time, if necessary. The support for external 5k displays via USB-C could make Xcode on the iPad a really amazing experience in my opinion.

This would be a setup I could imagine: The iPad attached to an external display using an external keyboard. The display shows my code on one side and the app I’m building in a split view on the other side. No simulator anymore!? The iPad screen is used for documentation and/or the debugger. Everything I need, running on a device I can carry around anywhere I’d like to. Even without the external display I really think there’s a way to make the IDE work. It get’s harder to think of a good solution if you also remove the external keyboard from the scenario. But hey… why should there be no other way to work in an IDE than what we know now? The iPad and iOS already changed a lot of habits and what users expect from their apps. Maybe there’s also a different way to think of an IDE, so that it can be used on a smaller screen?

There are lots of other problems, I know. A lot of issues to solve… what happens if the app crashes while debugging? It will better not bring the whole system down! I guess technical problems like this are the biggest reason why there is no development environment available on iOS yet. But I really hope that either these problems get solved or Apple comes up with another solution I would never ever think of in my life. The playgrounds app is an example. It’s no full blown IDE and the main purpose clearly isn’t building apps from scratch. But it shows that it’s possible to edit and run Swift on an iPad. I even would be fine if the iPad would only be the code editor for my Xcode project and the compilation would have to run on a remote machine like a Mac mini somewhere, running the simulator on the server and only VNCing it to the iPad.

Whatever to solution might be… This is the dream I have. I think with this, I could do 99% of my work off of my iPad. And at the moment that’s really what I want… doing some actual work like professionals do.

Why Should the User Know?

Users are stupid! Or… are they? Who declares what a user should know and be able to do? Designers? Developers? Product Managers? The answer is simple: The user declares what he or she knows and is able to do. But we, the ones who build stuff they should use, tend to think that the user is the problem if there is a problem with a feature.

Nilay Patel wrote a piece on The Verge the other day:

Think of the tech industry as being built on an ever-increasing number of assumptions: that you know what a computer is, that saying “enter your Wi-Fi password” means something to you, that you understand what an app is, that you have the desire to manage your Bluetooth device list, that you’ll figure out what USB-C dongles you need, and on and on.

This resonates with my experience. I‘m an iOS and Mac developer and happen to know my way around in the system and learned a few tricks over the years and I of course have to check what’s new on those platforms all the time. I have to stay on top of it to not get lost. Do others have to do the same? Not really. The examples in the article above are real world problems. I hear them all the time. I get asked similar questions and quite often I think to myself: „That‘s not very hard to understand! How could you ask such a question? That feature is available since 5 years!“. Yet, they just don’t know!

And it’s not their problem. They know how to get along with their devices. There might be other ways, sometimes easier and faster ways to get to the same result. Sometimes they might not know something is possible and they give up trying, because they can live without it. And that’s fine!

I had the opportunity to attend a number of usability tests for one of our internal tools. The app itself is pretty simple. At least it seems so on the surface, but it turns out that average users tend to think completely different then the people who build the apps! Who would have thought that! I learned a lot (again) during these sessions. There were the obvious problems where I thought: „How is it even possible we did not think about that!?“. Those are relatively easy to solve. Then there are issues where the users don’t fully understand the main - and single - use case of the app. Also pretty easy to tackle by training them better, providing more information beforehand etc.

And then there are those issues where we need to make use of certain patterns and features of the platform. If you used an iPhone for more than a month we - the ones building and designing apps - tend to think that people take the time to learn the patterns, the look and feel, the language and features of the system. But really, they don’t! They are not interested in this nerdy stuff. They want to send messages - whatever this means to them - or call someone. If they are adventurous they installed an app, a free one probably. That’s an average user. Maybe they even have a phone full of apps and work on iPads quite often. This does not mean that they know about everything. Those are the ones we need to focus most of the time when building seemingly simple apps. At least for the ones that need to be used by everyone all the time.

But sometimes it’s necessary to go a step beyond that stage. We need to use these well established usage patterns and system features. But they are complicated. They seem to be an integral part of the system and to be known by everyone, but in reality those are power-user features. Let’s take swiping cells in a list to reveal actions, like in the Mail app… you swipe left and a button is revealed. Not a single user is ever going to discover this in an app on the first try. Never! It would take some time to get familiar with the app, maybe reading a manual or help article. It takes effort to learn that the feature exists, if it’s not found by accident. Compared to us power-users living in our information bubble, only relatively few people are willing or even thinking about making this effort.

And again: why should they!? Of course I can come up with dozens of good reasons why they should and why it would be important for them to do it. But those are reasons from my worldview, not theirs. If they are happy with their devices, let them be happy! It‘s not their problem that we fail to understand what’s easy and what’s complicated. We fail to empathize with people that are not using their devices the same way we do. We fail to design our apps in a way that makes it easy and accessible for everyone. Just because there are features on the platform, it doesn’t mean these are good features and every app really needs to make use of them.

And it’s not only a problem of us, designing and developing user interfaces in the wrong way. Stuff is too complicated and it only gets worse. Like Nilay writes:

... over the past few days I’ve started to realize it’s a pretty damning indictment of the tech industry

The tech industry does not care about normal people. They need to build the next iteration of something barely anyone really needs and they need to have built it last year already to make their stakeholders happy. Technology is evolving faster than most of the people are capable of and willing to keep up with. I know a whole bunch of people who ask me „why everything has to change all the time“, in regards to features that already exist since a couple of years and in regards to UI paradigms that were introduced many years ago. Of course, technology evolves and everything is changing more rapidly than ever before. But there a whole lot of people that are left far behind. Changes are either happening too fast, or there is a huge lack of thinking about how people should be guided to learn all the new things without telling them they’re stupid because the tool you show them is just too damn complicated to use. I think it’s a bit of both, with a lot of stress on the latter.

We can’t expect the users to know everything. They can’t. We need to watch them use the stuff we make and learn from them what it means to use something like a normal person would. We need to build the apps we want them to use actually for them, not for us. If there are issues we can’t solve for them, we need to make sure to guide them and not leave them stranded. Our products are our problem, not the users‘. That’s nothing new of course, yet we always forget. These problems are decades old and everybody involved knows about it, yet we always make the same mistakes. We need to try harder.