The more I think about it, the more I realize that developers need to think about the CO2 impact their solutions have. You can (roughly) calculate the footprint of a MB of data that’s transferred. Constantly polling an API with lots of data? Nobody cares about the size of an app package anymore? Think about how much CO2 is emitted when only a couple thousand people download an app that includes huge amounts of unnecessary images or tracking and advertising libraries that constantly generate traffic. How many websites are bloated with ridiculous amounts of ads, tracking, auto-playing videos. It’s not just that this is annoying to the users.

We stream everything nowadays… music, videos, apps, games, news. Depending on the scale of your solution, this amounts to a significant portion of power that needs to be generated for data storage, servers and transfer.

The Internet is already responsible for more CO2 emissions than worldwide air traffic. Let’s start taking this into consideration when building software and services.

I didn’t read the whole thing, neither on Daring Fireball nor the article in the New York Times, because quite frankly I don’t care about the details. But while skimming over it, I saw this quote from the article:

The entire event is at odds with our current moment — one in which inequality, economic precarity and populist frustration have infiltrated our politics and reshaped our relationships with once-adored tech companies. But it’s not just the tech backlash. When the world feels increasingly volatile and fragile, it feels a little obscene to gather to worship a $1,000 phone. […]

This 100% describes my current feelings. It’s exactly what all my grumbling about the tech industry lately is about. That’s where the focus of this discussion should be. It’s not like nobody should have any fun anymore or shouldn’t enjoy their gadgets. Good for them! But it really often looks like worshipping. Apple bloggers are defensive here and I agree to some of the arguments from the NYT (again, didn’t read the whole thing). I also understand John Gruber and also Jason Snell here. It’s their job to report about this stuff, and they do probably the very best job in this field, also from a journalistic point of view. They mostly are objective, but sometimes I also get the feeling that they are a little apologetic in some cases.

My point is this: Nobody cares if people are willing to spend obscene amounts of money to get a new toy each year. What I care about is that there are way more important issues in this world, and tech companies are doing nothing against it. What they do is marketing and greenwashing at best. They have money, they have power. They should do something better with it.

Python Easter Eggs

While learning Python I found out that there are a couple of fun easter eggs in the language itself. Something that makes it even more compelling somehow. It’s not harmful to show a little whimsy, even in a programming language.

Besides the import antigravity link, the Zen of Python isn’t just fun, it also teaches you about the foundations of Python and programming in general:

>>> import this The Zen of Python, by Tim Peters

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren’t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one– and preferably only one –obvious way to do it. Although that way may not be obvious at first unless you’re Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it’s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea – let’s do more of those!

I Think I'm Out of This

This might just be another brain fart and/or a moment of madness (maybe even sadness?), but considering what’s going on in this world, the products Apple builds and the audience they are built for… I think I’m backing out of this business. When I look around me, when I read the news or watch reports on TV, I see a degressive world in pain with problems getting worse each day. I just can’t reconcile all of this with my conscience. Sitting here, building meaningless stuff without the purpose to at least try to improve even small things in this world. I’m not the one saving the world, but I can maybe help a little. Everyone can construct a meaning in what they do. But I don’t want to construct it, I want to actually do something more meaningful.

Apple has all the money in the world, and I acknowledge that they might be one of the few companies that at least try to do things more conscious and sustainable. But that’s not enough. The actions they take don’t help the world as a whole. Yes, they build a watch that seems to save lives and makes people live healthier. And I’d argue that this is the most important product they offer at the moment. All their products are great in some way, and I still think they’re the best in what they do. I don’t condemn them for their work. But the way their products are marketed and to whom… there are so many features I don’t think anyone really needs. Those resources (time, money, effort, ideas…) could be spent to make the world a better place to live for our children. Are lots of cameras on the back of a telephone saving our climate? Probably not. Are workers in Asia suffering because some rich kid of Instagram makes money by taking stupid selfies with an insanely expensive electronic device? Probably yes. Do I want to build productivity apps for rich people to squeeze another minute a day out of their precious time they need to optimize themselves, or do I try to create something that actually helps for real?

Times are changing, the world is changing, I am changing. And I need to put my energy in something more worthwhile. Whatever that may be. At least at this moment I don’t see myself in this ecosystem anymore.

More Than Just the Syntax

Learning a new programming language can sometimes be quite intimidating. It’s not just the syntax. If you know one programming language, you understand more or less any programming language. It’s all the things around the language itself. The whole ecosystem might be special in its own ways, maybe a little quirky to your eyes if you’re so used to some other environment for a long time. Once you’re fairly confident to move a long in one language and its ecosystem you’re used to a certain way of how things work. At least for me its hard to really get into a new language simply because I have a certain standard of code quality in my mind. But what is considered good code in a new language? I don’t want to create tiny playground tools nobody needs and that only use the bare minimum of language features. I have other aspirations and a bigger project in mind. But bigger projects mean bigger responsibilities and bigger complexities as well. If you want to do it open source out in the public, it even means others judging your code. If you go into an ecosystem for the first time, this can be really intimidating.

What does this mean when learning a new language? To me it means figuring out how unit testing works and how to do concurrency and asynchronous tasks. How are you supposed to package your stuff? What to people in the community consider good code? What frameworks are considered the way to go for specific use cases? In my case it even means which of the many UI frameworks should I use?

There’s so much more to learning a new programming language. I still learn best reading books about it, but unfortunately the most books are often just about the syntax and maybe a little theory about how and why things work the way they do. It’s rare to find lots of books to cover more advanced but still generic topics that are needed for more complex solutions.

But it’s fun and rewarding to learn all these things. It’s my level of standard I like to adhere to when programming that slows me down in the beginning. I’ll get there… I just need a little longer to learn everything to get up to speed.

Diving Into the World of Linux Podcasts

A couple of weeks ago I decided to dive a little bit deeper into Linux and try out some new stuff. One thing I hoped would help me was to listen to some Linux Podcasts. I wanted to expose myself to the topics in this community and how the people in there think. This is a whole new world to me, as I tried Linux way back and decided it’s too complicated. (My first impressions basically confirmed this, but that’s a whole other topic.)

So I downloaded a few Podcasts that popped up in a search in Overcast. I didn’t have too much time for lots of shows yet, but I thought I’d write up a (very) short summary of the few I listened to so far.

Linux Action News

This is kind of a fast paced quick news only show, but they cover a wider range of topics, not just Linux specific but also open source in general. It’s around since quite a while with more than 100 episodes yet. They’re not that much opinionated, at least in the few episodes I listened to so far, which I like. The Apple world is really narrowed down in opinions, repeating the same ideas and often circling around themselves too much lately.

It’s just about 30 minutes long and appears weekly, so it’s a nice way to get an update on different topics. I think this is one I’ll stick with for a while.

Linux Unplugged

I heard two episodes and I’m not quite sure what to think of it yet. It’s kind of an ATP format and one of the hosts also is on Linux Action News and founder of the Jupiter Broadcasting network. There are a couple shows on this „network“, all in the area of Linux. Maybe it’s worth checking them out a bit more. It looks a little like Relay.fm for Linux.

The show is a little opinionated, but not in an offensive way. It’s well established with more than 300 episodes. A few notes here and there made me chuckle because they were exactly how I imaged „Linux aficionados“ would think. Having them discuss some topics with the hosts of ATP would definitely be very interesting!

An episode is around one hour, also released weekly. I’m not sure I’ll stick to it, but I’ll keep listening to a few more. In the beginning I didn’t like ATP, but that changed too. Maybe this is similar here.

Going Linux

As a „newcomer“ to the scene it sounded like this would be a good one to get some basics about how Linux runs today, which tools are in fashion and that kind of stuff. I think this one would have potential, but I could only listen to the first couple of minutes of two episodes. The audio quality differs a lot between the two hosts. One is up to today’s Podcasting standards, the other one sounds like a bad phone call. I don’t know why though, because even if you record audio with your phone it sounds quite good today. They’re heading towards 400 episodes, which is why I would expect a more polished sound quality. My time is limited and if I’d wanted to listen to some bad phone audio on my commute to work, I’d join a conference call.

Maybe I’ll try it out at some later point, but for now there are lots of alternatives.

Exploit Brokers - Hacking News

Also a show I’m not sure about yet. The topics they cover sound interesting: It’s about cyber security, „hacking“, data breaches etc., but somehow I kept diverting.

It’s short (around 10 minutes) relatively new and not too regularly it seems. I think I’ll try out some more episodes to get a better opinion and see how it evolves.

There are still a few more Podcasts on my list. Maybe I manage to write up another quick review when I listened to more of them.

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.